Prometheus高可用需分层实现:采集层双实例冗余、联邦层仅聚合关键指标、存储层分离热冷数据、告警层Alertmanager集群化,各层协同保障采集不断、查询不垮、告警不漏、数据不丢。
Prometheus 本身不内置集群能力,所谓“高可用”不是靠它自己变成一个分布式数据库,而是通过合理分层、冗余部署和协同组件共同实现的。核心目标是:采集不断、查询不垮、告警不漏、数据不丢。
单个 Prometheus 实例挂掉,监控就断档——这是最常见故障点。解决办法是在每个业务集群或监控域内部署至少两个完全相同的 Prometheus 实例:
--cluster.advertise-address),避免重复告警或漏发。联邦(Federation)不是高可用的“开关”,而是用于跨集群汇总视图的协作机制。global Prometheus 从各 worker 拉取指标,但仅限于:
{__name__=~"up|probe_success|job:rate1m:sum|alert_status"};scrape_interval ≥ 30s,避免对 worker 施加额外压力;honor_labels: true,保留原始 job/instance 标签,方便定位问题来源;/federate 接口默认只返回最近 5 分钟数据,无需额外 TTL 配置。本地 TSDB 只存近期热数据(建议保留 15–30 天),长期数据必须外移:
告警不能依赖单点,可视化也不能只连一个 Prometheus:
不复杂但容易忽略。真正稳的高可用,不在“多跑几个实例”,而在每一层都明确谁负责什么、谁备份谁、数据流向是否闭环。