1 Thanos简介
Thanos是一个开源项目,旨在通过一种可扩展且可靠的方式为Prometheus提供跨集群的监控数据聚合、查询和长期存储功能。它解决了Prometheus在大规模环境下遇到的一些核心问题,比如数据的长期存储、监控数据的全局视图和高可用性。Thanos将云原生监控的概念推向了新的高度,为企业提供了一种强大且灵活的监控解决方案。
1.1 Thanos的起源和目标
Thanos诞生于Prometheus社区,其核心目标是弥补Prometheus在长期数据存储和跨集群监控方面的不足。随着云原生应用的快速发展,企业越来越需要一个能够处理大量监控数据、提供准确可靠监控信息的系统。Thanos应运而生,它不仅保留了Prometheus的优点,如简单的部署过程、丰富的指标和灵活的查询语言,还通过引入新的组件和架构设计,大幅提升了系统的可扩展性和可靠性。
1.2 监控的挑战
监控系统带来了新的挑战,包括:
- 数据泛滥:大规模集群产生的监控数据量巨大,传统监控系统难以高效处理。
- 持久性与可靠性:监控数据需要长期保存以供分析和审计,要求监控系统具备可靠的数据持久化能力。
- 全局视角:应用通常跨多个集群和地域,需要一个统一的视角来观察和管理这些分散的资源。
- 高可用性:监控系统自身也需要保证高可用,以确保监控服务的持续性。
1.3 Thanos与Prometheus的关系
Thanos建立在Prometheus之上,它通过引入几个关键组件扩展了Prometheus的能力:
- Thanos Sidecar: 连接到Prometheus,读取其数据进行查询和/或将其上传到对象存储,做到数据持久化存储
- Thanos Store Gateway: 处理对存储在对象存储(例如S3或GCS)中的数据的查询
- Thanos Compactor: 默认情况下,Sidecar将数据以2小时的块上传到对象存储中,Compactor会逐渐将这些块合并为更大的块,对数据进行压缩和降低采样率,加速大时间区间监控数据查询的速度
- Thanos Receiver: 从Prometheus的远程写入WAL接收数据,将其公开和/或上传到对象存储
- Thanos Ruler/Rule: 对监控数据进行评估和告警,还可以计算出新的监控数据,将这些新数据提供给 Thanos Query 查询并且/或者上传到对象存储,以供长期存储
- Thanos Querier/Query: 实现Prometheus查询API并针对从Sidecars和Stores获得的数据提供全局查询视图
- Thanos Query Frontend: 实现Prometheus查询API,将其代理到Querier,同时缓存响应,并可选择每天按查询进行拆分
通过这些组件,Thanos不仅提供了Prometheus的所有功能,还增加了多个实用的特性,如数据压缩、去重、长期存储、高可用性等,使得Thanos成为了处理云原生监控数据的理想选择。
2 thanos架构
Receiver和Sidecar是Thanos和Prometheus 进行数据交互的两种不同架构模式
Thanos Sidecar 组件需要和 Pormetheus 实例一起部署,它主要起到两个作用,第一代理 Thanos Query 组件对本地 Prometheus 数据读取, 允许 Query 使用通用、高效的 StoreAPI 查询 Prometheus 数据。第二是将 Prometheus 本地监控数据通过对象存储接口上传到对象存储中,这个上传是实时的,只要发现有新的监控数据保存到磁盘,会将这些监控数据上传至对象存储。
Thanos Receiver 通过 thanos receive命令实现了命令实现了Prometheus远程写API。它构建在现有的 Prometheus TSDB之上,并保持其实用性,同时通过长期存储、水平可伸缩性和下采样扩展其功能。Prometheus实例被配置为连续地向它写入度量,然后Thanos Receiver默认每 2 小时将时间序列格式的监控数据块上传到一个对象存储的桶中。Thanos Receiver公开了StoreAPI,以便Thanos Query可以实时查询接收到的指标。
3 Thanos组件概览
Thanos设计为一个高度模块化和可扩展的系统,通过多个互相协作的组件提供其功能。这些组件共同工作,以解决大规模监控数据的长期存储、高可用性和全局查询等问题。以下是Thanos主要组件的概览及其详细描述。
查询组件(Querier)
Querier是Thanos中负责处理查询请求的组件。它可以从多个数据源(如Thanos Sidecars、Store Gateways、和Thanos Receivers)查询数据,实现了对多个Prometheus实例数据的透明访问。Querier的关键功能是提供一个全局视图,无论监控数据存储在何处,用户都可以通过单一的查询接口获取信息。此外,Querier还支持对查询结果进行去重,确保即使在高可用性部署场景中,相同指标的数据不会被重复计算。
存储网关(Store Gateway)
Store Gateway组件使Thanos能够接入长期存储解决方案,如Amazon S3、Google Cloud Storage等,访问历史监控数据。它对外提供与Prometheus兼容的API接口,让Querier能够透明地查询这些长期存储中的数据。Store Gateway通过对存储在对象存储中的数据块进行索引,实现了高效的数据访问,同时还支持对数据进行压缩和分片,以优化存储空间和查询性能。
接收器(Receiver)
Receiver组件主要负责接收来自Prometheus的监控数据,并将其写入到长期存储中。它支持接收Prometheus远程写入协议的数据,可以作为一个集中式的数据接收点,汇总来自多个集群的监控数据。Receiver通过实现数据的多副本存储,增强了监控数据的可靠性。此外,Receiver还可以与Thanos Querier结合使用,提供实时监控数据的查询功能。
编译器(Compactor)
Compactor是Thanos中负责处理监控数据压缩和优化的组件。它定期对存储在对象存储中的数据块进行压缩,合并重复的时间序列数据,减少存储占用并提高查询效率。Compactor还负责清理过期的监控数据,实现监控数据的生命周期管理。通过数据去重和压缩,Compactor显著降低了长期存储成本,同时保持了查询性能。
侧车(Sidecar)
Sidecar组件部署在每个Prometheus服务器旁边,负责实时同步监控数据到对象存储,以实现数据的长期存储。同时,Sidecar还提供了一个查询代理功能,使Querier能够通过它查询Prometheus的实时数据。Sidecar确保了数据的即时可用性和完整性,同时降低了对Prometheus服务器的直接访问需求。
规则器(Ruler)
Ruler组件提供了基于时间序列数据的警报规则和数据聚合规则的评估功能。它允许用户定义复杂的查询并在满足特定条件时触发警报。Ruler与Prometheus的规则引擎非常相似,但它可以跨多个Prometheus实例和Thanos组件工作,提供全局的规则评估能力。
通过这些组件的配合使用,Thanos解决了监控数据的长期存储、全局查询、高可用性和规模扩展等多个方面的挑战,为构建大规模、可靠的监控系统提供了强有力的支持。
4 thanos支持的对象存储
5 环境规划
主机 | 组件 |
192.168.137.128 | Prometheus(node_exporter)、minio、thanos |
192.168.137.130 | Minio、nginx、thanos |
192.168.137.131 | Prometheus(node_exporter)、minio、thanos、alertmanager、grafana |