ThanosHA组件
HA组件
- Sidercar
- Receiver
其它组件
- Querier
- Store
- Compactor
- Ruler
Sidecar & Receiver工作方式
Sidecar
为实现高可用,Sidecar组件与Prometheus运行在一个Pod中,双副本的Prometheus独立运行采集数据(scrape metrics),默认情况部署在Kubernetesk的Prometheus使用PVC持久化存储卷
Sidecar 在 Prometheus 的远程读取 API 之上实现了 Thanos 的 Store API,Thanos Querier通过Thanos Store API接口查询 Prometheus数据。此外,sidecar还可以配置为每隔两小时将TSDB块上传到对象存储,每两小时创建一次块。存储在存储桶中的数据可以使用 Thanos Store 组件进行查询,该组件实现了相同的 Store API,并且需要由 Thanos Querier 查询
有关 sidecar 的详细信息 Making Prometheus High Availability (HA) & Scalable with Thanos
Receiver
与 sidecar 不同,Receiver 使用 StatefulSet独立配置。在这种方法中,Thanos Stack 所有其他组件都存在,并且其功能与 Sidecar 方法相同,但 Receiver 取代了 Sidecar 组件。
Prometheus Remote Write API投入使用,Prometheus实例被配置为在Receiver上持续远程写入。接收器配置写入到对象存储桶,同时支持数据保留期。Querier用于通过Store查询Receiver和存储桶上的数据,同时也支持Thanos Query访问Receiver的Store API
与 Sidecar 相比,集成 Receiver 有点棘手,有关设置接收器的更多详细信息,请参阅博客文章使用 Prometheus & Thanos Receiver 实现监控中的多租户。
Sidecar vs Receiver 对比
从以下几个方面对比
高可用模式
Sidecar
副本集的组成是由Sidecar与Prometeus集成在一起,每个副本中的Prometheus独立采集监控数据,并且Sidecar支持将数据上传至对象存储,但是有个缺点Prometheus二个小时刷一次数据到磁盘,如果实例故障有二个小时的数据丢失风险存在,所以需要配置二个Prometheus实例,Thanos Querier 负责填补丢失的数据并进行重复数据删除
Receiver
基本上与Sidecar相似,但是Receiver模式不是必须一定要Prometheus集成一起,而是使用Prometheus的remote_write功能将采集的数据写入至远程的Receiver接口(使用HTTP协议),如果Prometheus部署在Kubernetes集群需要使用StatefulSet副本,Receiver适合在多租户的场景下
与Prometheus集成
Sidecar
Sidecar只需要与Prometheus实例集成在一个Pod就可以了,主要是共享Prometheus数据卷,远端存储至对象存储
Receiver
与Sidecar不同的是需要独立部署至StatefulSet副本中,并且需要独立的存储来存放Prometheus监控数据,需要在 Prometheus 实例中更改配置,将 TSDB 远程写入Receiver将并将TSDB 保留在本地存储
Storage
Sidecar
Sidecar 从 Prometheus 的本地存储中读取,因此 TSDB 不需要额外的本地存储 (PV)。此外,它还大大减少了 TSDB 在 Prometheus 本地存储中的保留时间,因为它每两小时上传一次,同时其历史数据通过对象存储变得持久且可查询。默认情况下,Prometheus 会存储数据 15 天。在监控一个完整的、重型生产集群的情况下,需要大量的本地存储,并且本地存储比对象存储相对昂贵(EBS卷比S3存储桶贵)。
由于 Sidecar 每 2 小时将 Prometheus 指标导出到存储桶,因此它使 Prometheus 更接近无状态。虽然在 Thanos文档中,建议 Prometheus 的保留时间不低于最小区块持续时间的三倍,因此变为 6 小时
Receiver
Receiver 作为 StatefulSet,需要配置 PV。这里所需的本地存储量取决于StatefulSet 的flags --receive.replication-factor
、和 pod 副本。--tsdb.retention
TSDB 保留率越高,将利用更多的本地存储。由于数据不断写入接收器,Prometheus 保留率可以保持在最小值。与 Sidecar 相比,此设置需要更多本地存储。
数据获取方式
Sidecar
TSDB块是从Prometheus实例的本地存储中读取的,要么提供给Thanos Query进行查询,要么间歇性地导出到对象存储。Sidecar 使用pull的模型(Thanos Querier 在查询时从 Prometheus 中拉出数据),并且数据不会不断写入任何其他实例。
Receiver
Receiver 采用基于push的模型,TSDB 由 Prometheus 实例不断远程写入到 Receiver,从而使 Prometheus 最接近无状态。然后数据进一步从接收器上传到对象存储。push模式也存在自身的优点和缺点,我们将在此处讨论这些优点和缺点。