写点什么

Thanos 如何让 Prometheus 更易用?

  • 2018-12-23
  • 本文字数:1846 字

    阅读完需:约 6 分钟

Thanos如何让Prometheus更易用?

Prometheus 本身其实非常棒:它提供了出色的查询语言和统一的收集、发布指标的方法。不过,要让 Prometheus 具备高可用性和可扩展性却是一个不小的挑战。


我们需要以下这些特性:


  • 高可用的 Prometheus;

  • 可在一个地方查询所有指标;

  • 轻松备份和归档数据。


而这就是 Thanos 的用武之地。

让 Prometheus 具备高可用性

Thanos 最基本的功能就是让你可以一次查询多个 Prometheus 实例,并且能够对来自多个实例的相同指标进行去重。这样你就可以运行多个相同的 Prometheus 副本,而无需担心重复指标。


Thanos 边车是 Thanos 提供的一个组件,它与每个 Prometheus 容器一起运行,共同形成一个集群。你实际上查询的是 Thanos Query 组件,而不是 Prometheus 实例。下图有助于理解 Prometheus 与 Thanos 之间的关系。



光是这一点就已经很棒了,因为它可以让你轻松地实现高可用的 Prometheus。除此之外,你还可以使用这些构建块做更多的事情。

在同一个地方查看指标

下一个问题是如何将所有指标集中到一个地方。


我们运行了多个 Kubernetes 集群,每个集群都有自己的 Prometheus 实例。我们之前通常是通过使用特殊的 Prometheus 来抓取每个 Prometheus 实例的联合端点来聚合它们的指标。这样确实可行,但是太浪费资源了,因为我们复制了所有指标,而且这个特殊的 Prometheus 存在单点故障问题。


Thanos Query 节点可以将另一个 Query 节点作为数据源,如果将集群中 Thanos Query 节点的 gRPC 端点公开,就可以将它们作为数据存储,并创建聚合它们的 Thanos Query,见下图。



我们可以使用一个 Thanos Query 来获取所有集群的指标。在下面的屏幕截图中,我只用一个查询查询三个集群(红色、黑色、蓝色)中的 Daemonset 副本数量。



但是这个设置仍然存在问题,因为在每个集群中都有一个特殊的 Thanos Query,我们通过它将获取指标视图,如果它宕机就会导致不可用。我们希望运行多个 Thanos Query 节点,每个集群中都有一个这样的节点,实现用户查询的负载均衡。通过使用我们的 AWS 多集群负载均衡工具Yggdrasil,可以在多个 Kubernetes 集群中分配流量。用户可以查询任意的集群,并接收所有的指标。


当我们把它们放在一起时看起来像这样:



请注意,每个 Thanos Query 层都是 Thanos Query 节点的副本集,这样做是为了增加弹性。


这为我们提供了一个令人难以置信的弹性 Prometheus 设置,跨多个集群,并具有多个副本,为我们提供了大量的冗余层。如果你想查看 Prometheus 指标,可以直接在一个地方查看,而无需操心应用程序所在的集群和命名空间等问题。

存储

Prometheus 的另一个常见问题是备份和保留所有指标。将数据保存在 Prometheus 实例上通常很昂贵,并且会影响性​​能。Thanos 通过边车不断将数据备份到云存储(如 S3),然后通过 Store 节点公开数据来解决这个问题。Store 节点让你感觉好像在 Thanos 集群中有另一个 Prometheus 实例,但所有数据都来自 S3 存储桶。


如果集群发生故障,Store 节点也会为我们提供一些很好的弹性。因为如果 Prometheus 实例消失,就无法查询到最新的数据,但我仍然可以通过查询另一个集群中的 Store 节点来访问数据,因为这些节点可以访问 S3 中的历史数据。

未来的工作

一直以来,我们很想做的一件事情是可以按照团队或命名空间来拆分 Prometheus 集群,这样,每个 Prometheus 实例就不会太大,并且具备了冗余,避免有团队产生大量的指标搞垮 Prometheus。但这样做会非常费力,因为为每个团队或命名空间设置一个单独的端点会带来很多开销,但是有了 Thanos,我们就可以将基于团队的 Prometheus 添加到 Thanos 集群中,并且仍然可以使用相同的单一指标来源。因此,我们希望切换到使用很多小型的 Prometheis,并使用 Prometheus Operator 来创建它们。


总的来说,Thanos 给了我们:


  • 高可用的 Prometheus ——使用 Thanos 边车 + Thanos Query 进行数据去重;

  • 在一个地方查询所有指标——聚合所有集群的 Thanos Query;

  • 轻松备份和归档数据——Thanos 边车和 Thanos Store(基于 S3)。


Thanos 确实将我们的指标设置提升到了一个新的水平,简化了用户查询指标的方式,并为我们提供了一定的弹性。现在,从新的 Kubernetes 集群添加指标变得非常容易。不过,有一点需要注意的是,Thanos 仍然是一个相对较新的产品,所以它可能还是会存在一些奇怪的 bug,幸好它的背后有一个非常活跃的团队和社区在不断地改进它。如果你想加入他们,可以看看他们的Github项目Slack频道


英文原文:https://medium.com/uswitch-labs/making-prometheus-more-awesome-with-thanos-fbec8c6c28ad


2018-12-23 13:015098
用户头像

发布了 731 篇内容, 共 438.2 次阅读, 收获喜欢 1999 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

自动化生成Javascript调用后台代码v0.5.3版本

百家饭隐私计算平台创业者

JavaScript API

九联科技开发板正式合入OpenHarmony主干

科技汇

新书上市 | 图解、幽默、有趣、简单的 Java 书

图灵教育

Java 程序员 计算机

zookeeper-ACL权限相关

zarmnosaj

7月月更

电商平台数据可视化监控系统-Echarts-vue项目综合练习

武师叔

7月月更

金融行业开放平台

穿过生命散发芬芳

7月月更 开放平台

Docker(二)Docker-Compose、网络、数据卷

神农写代码

谈Java Record类

ES_her0

7月月更

异步 API 设计之扇入扇出模式

宇宙之一粟

API 7月月更

jQuery 的事件绑定

Jason199

jquery js 7月月更

GNU/Linux知识库(4)- 用户 & 权限

冯亮

Linux DevOps 操作系统 GNU

玩转Liunx系统,看这篇文章就够了(三)

Java学术趴

7月月更

包装类型

7月月更

手动上传表单数据+图片文件功能

猪痞恶霸

前端 7月月更

【刷题记录】11. 盛最多水的容器

WangNing

7月月更

【Docker 那些事儿】容器数据卷的妙手

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

项目管理系统选择有哪些需要注意的点?

易成管理学

项目管理

渲染与云渲染:一部电影的制作25%的时间是在“等”

Finovy Cloud

GPU服务器

国内外知名的待办事项app有哪些

易成管理学

待办事项 todolist

行业首个「视频直播技术最佳实践图」发布!

阿里云视频云

阿里云 音视频 直播

JSON 和JavaScript 介绍与区别

devpoint

JavaScript json 7月月更

AWS Config

冯亮

云计算 DevOps 架构师 AWS 产品解决方案

Istio组件Mixer介绍

阿泽🧸

istio 7月月更

Python已有列表和字典,为什么还需要元组?

迷彩

Python Python基础知识 元组 7月月更

SQL也能做AI ?没错!MLOps Meetup V3 回顾|OpenMLBD+SQLFlow+Byzer

星策开源社区

人工智能 机器学习 sql 特征平台

17张图带你深度剖析 ArrayDeque(JDK双端队列)源码

程序员小毕

Java 源码 程序员 jdk 队列

Flutter 模拟火箭发射动画

岛上码农

flutter ios 移动端开发 安卓开发 7月月更

Codeforces Round #787 (Div. 3)

KEY.L

7月月更

小程序媒体组件-1

小恺

7月月更

计算机组成原理之计算机最基本的工作原理

未见花闻

7月月更

长安链中的加密算法

长安链

Thanos如何让Prometheus更易用?_云原生_Joseph Irving_InfoQ精选文章