多集群监控的挑战与联邦架构概述
当业务部署在多个数据中心或多个Kubernetes集群时,单体Prometheus无法满足全局可观测性需求。每个集群部署独立Prometheus采集本地指标,再通过联邦(Federation)或远程读写(remote_write/remote_read)将数据汇聚到中央存储,是当前主流的多集群监控方案。
两种方案的核心区别:联邦是拉取模式,中央Prometheus定时从各集群Prometheus拉取聚合指标;remote_write是推送模式,各集群Prometheus将原始数据实时写入远端存储。联邦适合轻量级聚合场景,remote_write适合需要完整原始数据的集中分析场景。
remote_write配置与可靠性保障
remote_write将Prometheus采集的样本实时推送至远端存储(如Thanos Receive、Mimir、Cortex等),配置位于prometheus.yml的remote_write段:
global: evaluation_interval: 30s scrape_interval: 15s external_labels: cluster: "prod-east" replica: "prom-1"remote_write: - url: "https://mimir-central.example.com/api/v1/push" name: "mimir-central" send_exemplars: true send_native_headers: true queue_config: capacity: 10000 max_shards: 100 min_shards: 1 max_samples_per_send: 500 batch_send_deadline: 5s min_backoff: 30ms max_backoff: 100ms metadata_config: send: true send_interval: 1m headers: X-Scope-OrgID: "tenant-prod"
remote_write的可靠性由内置WAL(Write-Ahead Log)保障。Prometheus先将采集数据写入本地WAL,再异步通过HTTP推送。如果远端存储不可达,数据在WAL中排队等待重发。queue_config控制推送队列行为:max_shards决定并发推送的分片数,系统根据积压情况自动在min_shards和max_shards间调整;batch_send_deadline控制批次超时,避免小批量频繁发送。
关键调优参数:
# 高吞吐场景(单集群>100万samples/s)remote_write: - url: "https://mimir-central.example.com/api/v1/push" queue_config: capacity: 50000 max_shards: 200 max_samples_per_send: 2000 batch_send_deadline: 2s# 低延迟场景remote_write: - url: "https://mimir-central.example.com/api/v1/push" queue_config: capacity: 5000 max_shards: 50 min_shards: 10 max_samples_per_send: 200 batch_send_deadline: 1s
联邦配置与指标过滤
联邦通过/federate端点的匹配参数实现指标过滤,避免中央Prometheus拉取全量数据:
scrape_configs: - job_name: "federate-prod-east" scrape_interval: 30s honor_labels: true metrics_path: "/federate" params: "match[]": - "{job=~\".+\"}" - "{__name__=~\"alert:.*\"}" static_configs: - targets: - "prometheus-east-internal:9090" relabel_configs: - source_labels: [__address__] target_label: cluster replacement: "prod-east" - job_name: "federate-prod-west" scrape_interval: 30s honor_labels: true metrics_path: "/federate" params: "match[]": - "{__name__=~\"container_cpu.*|container_memory.*\"}" static_configs: - targets: - "prometheus-west-internal:9090" relabel_configs: - source_labels: [__address__] target_label: cluster replacement: "prod-west"
honor_labels: true确保源集群的原始标签不被覆盖,cluster标签通过relabel_configs注入用于区分数据来源。match[]参数是联邦的关键过滤机制,越精确的匹配越能减少网络传输和中央存储压力。
remote_read实现透明跨集群查询
配置remote_read后,Prometheus在查询时会同时读取本地数据和远端存储数据,对上层Grafana等查询工具完全透明:
remote_read: - url: "https://mimir-central.example.com/api/v1/read" name: "mimir-central" read_recent: true required_matchers: [] chunk_size: 8192
read_recent默认为false,意味着Prometheus只对本地不存在的时间范围才查询远端存储。设为true可确保最近数据也从远端获取(适用于远端数据更完整的场景)。对于大规模部署,建议通过required_matchers限制哪些指标走远端读取,避免全量查询远端存储造成性能瓶颈。
架构选型对比与落地建议
三种主流多集群监控架构的适用场景:
方案 数据完整性 查询性能 运维复杂度 适用规模联邦+中央Prometheus 低(聚合) 快 低 中小规模remote_write+Mimir 高(原始) 中 中 中大规模remote_write+Thanos 高(原始) 中 高 中规模
落地建议:3个以下集群选用联邦方案最简单;5-50个集群推荐remote_write + Grafana Mimir,Mimir原生支持多租户和水平扩展,是当前社区活跃度最高的方案;已有Thanos基础设施的可沿用,但Thanos Receive组件在写入吞吐方面弱于Mimir。无论哪种方案,确保external_labels正确标注集群来源是查询和分析的基础。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/prometheus-yuan-cheng-du-xie-remotewrite-yu-duo-ji-qun-lian/