如何配置Prometheus支持云原生多集群模式下的Thanos Query高可用无缝无损全局查询

大萱大大_6486

大萱大大_6486

2026-06-06

464人浏览

原创

prometheus 多集群全局查询需统一 external_labels(如 cluster、replica)、sidecar 启用 grpc store api、query 配置去重与自动降采样、store gateway 对接对象存储。

如何配置prometheus支持云原生多集群模式下的thanos query高可用无缝无损全局查询

要让 Prometheus 在云原生多集群场景下,通过 Thanos 实现高可用、无缝、无损的全局查询,核心不在 Prometheus 本身改配置,而在于统一数据标识 + 组件协同 + 查询层去重。关键不是“让 Prometheus 支持 Thanos”,而是让每个 Prometheus 实例在接入 Thanos 时,具备可识别、可聚合、可去重的语义能力。

确保每个 Prometheus 实例带唯一且一致的 external_labels

这是全局查询正确性的基石。不同集群、不同副本的 Prometheus 必须通过标签区分来源,又不能因标签冲突导致数据无法合并。

  • 为每个集群分配唯一 cluster 标签(如 cluster: "prod-us-east"),不可重复
  • 同一集群内多副本 Prometheus,必须使用相同 cluster,但需添加 replica 标签(如 replica: "0" 和 replica: "1")以支持自动去重
  • 避免使用动态值(如 hostname、pod name)作为 external_labels,防止重启后标签漂移
  • Sidecar 启动时会自动注入这些标签到 Prometheus 的元数据中,但前提是配置已写入 prometheus.yml 的 global.external_labels 段

Sidecar 必须启用 gRPC 并暴露 Store API

Thanos Query 不直接连 Prometheus HTTP 接口,而是通过 gRPC 协议与 Sidecar 通信。未启用 Store API 将导致实时数据不可见。

CodeGeeX
CodeGeeX

CodeGeeX是一款基于大模型的智能编程助手。

下载
  • 启动 Prometheus 时,务必添加参数:--web.enable-admin-api --web.enable-lifecycle(用于 Sidecar 管理 reload)
  • Sidecar 容器需监听 --grpc-address=:10901(默认端口),并挂载 Prometheus 数据目录和配置卷
  • 验证方式:访问 http://<sidecar-ip>:10901/metrics</sidecar-ip> 应返回指标;调用 grpcurl -plaintext <sidecar-ip>:10901 list</sidecar-ip> 应可见 thanos.store.v1.Store 服务
  • 若跨集群通信,确保网络策略允许 10901 端口的 gRPC 流量(非 HTTP)

Thanos Query 需启用去重与自动降采样

多副本采集带来的数据重复、时间偏移、小范围断连等问题,全靠 Query 层智能处理才能实现“无损”体验。

  • 启动 Query 时必须指定 --query.replica-label=replica(匹配 Prometheus 的 replica 标签),否则无法去重
  • 加上 --query.auto-downsampling,让 Query 在查大时间范围时自动切换到对象存储中的下采样数据,避免实时节点压力过大
  • 多个集群的数据源,推荐用 DNS SRV 发现(如 --store=dns+dnssrv+_grpc._tcp.thanos-store.prod.svc.cluster.local),而非硬编码 IP,提升弹性
  • 若存在部分集群临时离线,Query 默认会静默跳过——这本身就是“无缝”的体现;无需额外配置熔断或 fallback

Store Gateway 与对象存储联动保障长期一致性

仅靠 Sidecar 提供的实时数据(通常保留 2–6 小时)无法支撑“全局”和“无损”。历史数据必须由 Store Gateway 从对象存储(S3/MinIO/OSS)加载,并与实时数据自然拼接。

  • 所有 Sidecar 必须配置相同的对象存储 endpoint 和 credentials,并启用 --objstore.config-file
  • Compactor 需定期运行,对上传的 block 做压缩、合并、下采样;否则 Store Gateway 查询性能会随时间劣化
  • Store Gateway 启动后会自动发现所有已上传的 block,无需手动注册;它对外也提供标准 Store API,和 Sidecar 对等加入 Query 的 store 列表
  • Query 对用户透明:查最近 1 小时走 Sidecar,查过去 30 天走 Store Gateway,中间无感知切换

相关专题

更多
Golang 云原生与容器化开发
Golang 云原生与容器化开发

本专题聚焦 Golang 在云原生与容器化环境中的应用,系统讲解 Docker 镜像构建、Kubernetes 部署与调度、服务网格、微服务通信、日志与监控等关键技术。通过实战案例(如微服务电商平台部署、容器化API网关开发),帮助学习者掌握 从开发到运维的完整云原生实践能力。

2025.09.29

6385

11

Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

2025.12.22

116

5

Go云原生应用与Kubernetes服务部署实战
Go云原生应用与Kubernetes服务部署实战

本专题围绕 Go 语言在云原生环境中的应用展开,讲解容器化部署、Kubernetes 编排、服务发现、健康检查与弹性扩缩容机制。通过真实云端案例,帮助开发者构建可扩展的云原生微服务架构。

2026.06.29

168

19

轻量应用服务器和云服务器的区别
轻量应用服务器和云服务器的区别

随着科技的快速发展,越来越多的企业和个人开始依赖于服务器来托管其应用程序和网站。然而,在选择服务器时,很多人对轻量应用服务器和云服务器之间的差异不够了解。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.27

482

3

注册云服务器的作用
注册云服务器的作用

注册云服务器的作用:1、可放置公司网站、电子商务平台、APP和其他应用程序等;2、使用云服务器来存储和共享数据,不仅高度安全,而且可以随时随地在线访问;3、当内存不够时,站长可自行增加,使资源充沛,保障了页面加载速度和优质的用户体验。想了解更多云服务器的相关内容,可以阅读本专题下面的文章。

2024.03.13

2844

9

云服务器的全部用途
云服务器的全部用途

云服务器的用途广泛,包括网站托管、应用程序部署、数据存储和备份、虚拟化和容器化、大数据处理、游戏服务器以及开发测试环境等。想了解更多云服务器的相关内容,可以阅读本专题下面的文章。

2024.03.21

11479

12

云服务器价格性价比高的服务商介绍
云服务器价格性价比高的服务商介绍

性价比较高的云服务器服务商,包括阿里云、腾讯云、亚马逊AWS和华为云。这些服务商提供丰富的产品线、亲民的价格、完善的生态体系和技术支持。想了解更多云服务器的相关内容,可以阅读本专题下面的文章。

2024.03.21

3027

9

云服务器的使用教程
云服务器的使用教程

使用云服务器需要遵循以下步骤:选择可靠的云服务提供商,注册账号并购买所需实例,配置安全组和网络,连接到服务器,配置服务器环境,定期管理和监控服务器,优化性能和成本。想了解更多云服务器的相关内容,可以阅读本专题下面的文章。

2024.03.21

5197

10

云服务器作用介绍
云服务器作用介绍

云服务器作为云计算的关键组成部分,广泛应用于弹性计算、数据存储处理、应用程序部署托管、灾备容灾、开发测试环境、虚拟化容器化等领域。想了解更多云服务器的相关内容,可以阅读本专题下面的文章。

2024.03.21

1505

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习