当前位置: 首页 > news >正文

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

相关文章:

  • Spring任务调度之Spring-Task
  • P5112 FZOUTSY
  • java B2B2C springmvc mybatis多租户电子商城系统- 路由定位器
  • linux对vxlan的支持
  • Mysql优化
  • 3.1Python的判断选择语句
  • 深度解析ES6通过WeakMap解决内存泄漏问题
  • Redis 和 memcache 简单比较
  • verilog语法实例学习(1)
  • Docker三剑客之docker-machine
  • 正者表达式exec和match
  • Linux操作系统有什么吸引力,在程序员中这么受欢迎!
  • Oracle常用语句
  • Ubuntu Vscode安装
  • wx2tt 微信小程序转头条小程序工具
  • ES6核心特性
  • JDK 6和JDK 7中的substring()方法
  • mysql中InnoDB引擎中页的概念
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • python docx文档转html页面
  • SQLServer之创建显式事务
  • VUE es6技巧写法(持续更新中~~~)
  • windows下如何用phpstorm同步测试服务器
  • 记一次删除Git记录中的大文件的过程
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 类orAPI - 收藏集 - 掘金
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 浅谈web中前端模板引擎的使用
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 微服务入门【系列视频课程】
  • 译自由幺半群
  • 最近的计划
  • No resource identifier found for attribute,RxJava之zip操作符
  • 选择阿里云数据库HBase版十大理由
  • 移动端高清、多屏适配方案
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • !!java web学习笔记(一到五)
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #android不同版本废弃api,新api。
  • #数学建模# 线性规划问题的Matlab求解
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)斐波那契Fabonacci函数
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (六)c52学习之旅-独立按键
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)为C# Windows服务添加安装程序
  • (转)详解PHP处理密码的几种方式
  • ****Linux下Mysql的安装和配置
  • .NET Core 和 .NET Framework 中的 MEF2