监控数据长期存储的痛点与Thanos架构选型
Kubernetes集群的监控告警体系中,Prometheus是事实标准,但单机Prometheus的存储能力受限于本地磁盘,数据保留期通常仅15-30天。当故障排查需要回溯数周甚至数月的指标数据时,本地存储的局限性暴露无遗。Thanos作为Prometheus长期存储方案,通过Sidecar组件将数据上传至对象存储,Query组件实现跨实例全局查询,解决了监控数据的持久化和全局视图两大核心问题。
Thanos架构有三种部署模式:Sidecar模式(与Prometheus同 Pod 部署)、Receive模式(远程写入接收端)、Rule模式(分布式告警评估)。对于已有Prometheus集群的环境,Sidecar模式改造成本最低;新部署环境建议采用Receive模式,省去Sidecar依赖,支持Prometheus远程写入协议直接推送数据。
Thanos Receive模式部署与远程写入配置
Receive模式下,Thanos Receive作为独立组件接收Prometheus的remote_write数据,写入本地TSDB并异步上传至对象存储。部署示例如下:
# Prometheus远程写入配置
remote_write:
- url: http://thanos-receive:19291/api/v1/receive
queue_config:
max_samples_per_send: 500
max_shards: 10
batch_send_deadline: 5s
min_backoff: 30ms
max_backoff: 5s
send_exemplars: true
metadata:
send: true
max_cells_per_send: 500
Thanos Receive使用Hashring实现数据分片,确保同一series的数据始终路由到同一接收节点:
# thanos-receive-hashring.json
[
{
"endpoints": ["thanos-receive-0:10901"],
"tenants": ["default"]
},
{
"endpoints": ["thanos-receive-1:10901"],
"tenants": ["default"]
},
{
"endpoints": ["thanos-receive-2:10901"],
"tenants": ["default"]
}
]
Receive节点数量建议为3的倍数以保证高可用,每个节点配置持久化存储卷。数据上传到对象存储的间隔由--tsdb.retention参数控制,默认2小时执行一次压缩上传。
对象存储选型与Compactor压缩策略
Thanos支持的对象存储后端包括S3、GCS、Azure Blob和阿里云OSS。国内环境常用MinIO作为兼容S3的私有存储:
# Thanos S3存储配置
type: S3
config:
bucket: thanos-metrics
endpoint: minio.monitoring:9000
access_key: minioadmin
secret_key: minioadmin
insecure: true
trace: false
Compactor组件负责对象存储中数据的降采样和合并压缩。长期监控数据的查询频率随时间递减,降采样可显著降低存储成本和查询延迟。默认策略将原始数据保留40天,5分钟粒度数据保留180天,1小时粒度数据永久保留:
# Compactor启动参数
thanos compact \
--data-dir /data/thanos-compact \
--objstore.config-file=/etc/thanos/storage.yml \
--retention.resolution-raw=40d \
--retention.resolution-5m=180d \
--retention.resolution-1h=0d \
--wait-interval=5m \
--downsample-concurrency=4 \
--compact.concurrency=4
全局查询与告警规则迁移
Thanos Query组件提供全局查询入口,可同时查询多个Prometheus实例和对象存储中的历史数据。配置Query指向所有Receive节点的gRPC端点:
thanos query \
--endpoint=thanos-receive-0:10901 \
--endpoint=thanos-receive-1:10901 \
--endpoint=thanos-receive-2:10901 \
--query.timeout=2m \
--query.max-samples=50000000
告警规则从各Prometheus实例迁移到Thanos Rule组件,避免重复告警。Rule组件定期评估全局告警规则,通过Alertmanager发送通知。关键调优项是--eval-interval,建议设为30s平衡告警时效性和评估开销。
存储成本方面,一个1000节点Kubernetes集群的指标数据量约为2TB/月(15s采集间隔),经Compactor降采样后对象存储用量可压缩至每月约200GB,按MinIO部署成本计算,年存储费用约在万元级别,远低于扩展Prometheus本地磁盘的方案。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/prometheus-yuan-cheng-xie-ru-yu-thanos-chang-qi-cun-chu-jia/