Prometheus 学习之——高可用方案 Thanos

Prometheus 学习之——高可用方案 Thanos

文章目录

  • Prometheus 学习之——高可用方案 Thanos
  • 前言
  • 一、Thanos 的 4 个组件
  • 二、节点发现
  • 三、历史数据存储
  • 四、历史数据降准


前言

在 Thanos 产生前,在 Improbable 公司内部存在多套 Kubernetes 集群,每个集群都部署了一套独立的 Prometheus,再通过 Grafana 之类的展示工具分别查看每个集群的资源,缺乏一个全局资源视图;另一方面,Prometheus 的高可用需要得到保证,需要一套数据备份方案及历史数据存储方案。在这种背景下,Thanos 诞生了。


一、Thanos 的 4 个组件

    Thanos 的整体架构如下,它主要有 4 个组件:Querier、Sidecar、Store 和 Compactor。
Prometheus 学习之——高可用方案 Thanos_第1张图片
    每个 Prometheus 节点都配置了一个 Sidecar 组件,Prometheus 通过 Kubernetes 的部署,可以将 Sidecar 容器和 Prometheus 容器集成到一个 Pod 中。Sidecar 组件有两个主要作用,一是用来代理 Querier 对 Prometheus 本地数据的读取,二是将 Prometheus 本地监控数据通过对象存储接口保存到对象存储中。

    Querier 接收 HTTP 的 PromQL 查询,组件负责数据查询汇聚。当 Querier 收到一个请求时,它会向相关 Sidecar 发送 GRPC 查询请求,Sidecar 再去调用 Prometheus 的 API 并返回获取的监控数据,Querier 将这些数据聚合在一起,并对它们执行 PromQL 查询。

    为了持久化历史数据,Sidecar 会监控 Prometheus 的本地存储,如果发现有新的监控数据保存到磁盘,则将这些监控数据保存到 S3 对象存储上;相应地,在查询数据时,如果需要查询历史数据,则 Querier 会调用 Store 的接口,Store 再通过 S3 对象存储接口获取数据,Store 会将 S3 的对象数据转化为 Querier 所需的数据格式。

    Compactor 是一个批处理组件,主要负责针对 S3 的对象压缩,可以将历史的小对象(block,块)合并压缩成大文件对象,对齐数据并且删除这些小文件,从而节省存储占用。


二、节点发现

    Querier 会通过 Store API 获取每一个 Sidecar 上的监控数据。为了让 Querier 找到 Sidecar 节点,Thanos 引入了 Gossip。

    Thanos 的每个组件之间都通过 Gossip 通信,这样不仅可以动态添加、删除组件节点,还可以在每个节点之间共享元数据信息,但这是有代价的:
    (1)Gossip 本身比较复杂,维护成本较高;
    (2)Gossip 全互联 NN 的方式没有必要存在,因为对于 Querier 来说,它只需知道所有实现的 Store API 节点即可;
    (3)Gossip 底层采用 UDP 和 TCP,如果在网络中只有七层负载均衡,那么会非常尴尬。

     所以,Thanos 正逐渐淘汰这种做法,而使用基于文件或者 DNS 的方式完成节点注册和发现。


三、历史数据存储

    Sidecar 可以将本地数据保存到对象存储中。简单回顾一下 Prometheus 2.0 的数据存储方式,Prometheus 将监控数据按照时间顺序以 block 方式进行划分并存储到磁盘中,在每个 block 内部通过 index 索引 chunks 里面的监控数据。
Prometheus 学习之——高可用方案 Thanos_第2张图片
    Thanos 的 Sidecar 目前只支持 Prometheus 2.0 版本以后的数据格式,Sidecar 每隔 30s 读取一次本地元数据,查看是否有新的监控数据落盘,如果有,则读取本地数据块并将其上传到对象存储,标记最新的读取时间并且通过本地 JSON 文件保存已经上传的块,避免重复上传。


四、历史数据降准

    对历史数据的检索通常需要通过降准方式进行:如果检索一天的数据,则通常以 h 或者 10min 为准度;如果检索一个月的数据,则通常以 d 或者 h 位准度;如果检索一年的数据,则准度更低。

    Thanos 会将原始的监控数据降准汇聚,将初始以 30s 为周期采集的监控数据经过两次压缩后,汇聚成以 1h 为周期的数据,过程如下:
Prometheus 学习之——高可用方案 Thanos_第3张图片

    数据降准的方式比较简单,需要汇聚 count(个数)、sum(总和)、min(最小值)和 max(最大值),如下所述。

  • count 指将这个压缩时间段内的监控指标个数求和。
  • sum 指对监控指标的数值求和。
  • avg 可以通过 sum/count 求取。
  • max 和 min 分别是这个时间段内监控的最大值和最小值。

    Thanos 方案本身对于 Prometheus 没有任何侵入,可以很好地扩展,但其本身依赖对象存储服务,这部分成本也是需要考虑的。

你可能感兴趣的:(prometheus,kubernetes,kubernetes,prometheus)