Thanos 长期存储

Prometheus 的本地存储设计目标是高效的数据写入和短期查询,而非长期存储。当需要保留超过 15 天的历史数据时,Prometheus 原生存储就力不从心了——磁盘空间有限,查询性能也会随数据量增长而下降。Thanos 正是来解决这个问题的。

Thanos 是 Prometheus 的开源扩展组件,它将 Prometheus 的数据长期存储到对象存储(如 S3、GCS、MinIO),同时提供全局视图、跨集群聚合、去重等高级能力。Thanos 不修改 Prometheus 本身,只在其基础上添加组件实现扩展。

核心组件

Thanos 由多个组件组成,每个组件负责特定功能:

Sidecar:部署在 Prometheus Pod 旁边的代理,负责将 Prometheus 的数据上传到对象存储。Sidecar 同时充当 Querier 的数据源,实现「查询 Prometheus + 查询对象存储」的统一入口。

Store Gateway:对象存储的查询代理,将对象存储中的历史数据暴露给 Querier 组件。Querier 无需直接访问对象存储,通过 Store Gateway 的 gRPC 接口统一查询。

Compactor:定期整理和降采样对象存储中的历史数据。Compactor 执行三个任务:合并小块文件(提升查询效率)、应用保留策略(删除过期数据)、生成降采样数据(提升大时间范围查询性能)。

Querier:统一的查询层,汇总来自 Sidecar、Store Gateway、Ruler 的数据,返回去重后的查询结果。Querier 实现 Prometheus 的 Query API,可以直接用于 Grafana 数据源。

对象存储配置

Thanos 支持多种对象存储后端:S3(AWS)、GCS(GCP)、Azure Blob Storage、Swift(Ceph)、MinIO(私有化部署)。配置通过 YAML 文件指定:

type: S3
config:
  bucket: thanos-data
  endpoint: s3.amazonaws.com
  region: us-east-1
  access_key: ${AWS_ACCESS_KEY}
  secret_key: ${AWS_SECRET_KEY}

对象存储的成本是本地 SSD 的 1/10 左右,是长期存储的经济选择。需要注意的是:对象存储的查询延迟比本地磁盘高数倍,Thanos 通过缓存和降采样来缓解这个问题。