当前位置: 首页 > news >正文

大规模集群下 Prometheus 监控架构实战经验分享

大规模集群下 Prometheus 监控架构实战经验分享

1 业务场景描述

在互联网金融业务发展过程中,我们需要对数千台主机、上万容器与微服务实例进行指标监控,并统计历史数据以支持 SLA 报表、告警与容量规划。传统监控系统面临以下挑战:

  • 实例动态扩缩容,IP 地址和端口不断变动。
  • 指标数据量暴增,Prometheus 单节点存储和查询性能瓶颈明显。
  • 高可用需求,对告警推送和报警规则执行有严格响应时效。
  • 历史指标留存周期长达 90 天,单机磁盘成本不可控。

基于上述场景,我们选型 Prometheus 作为度量与告警引擎,结合 Thanos 组件实现长时数据存储与查询叠加,打造高可用、可水平扩展的监控平台。

2 技术选型过程

  1. Prometheus:云原生时代事实标准,支持多种服务发现、告警规则、录制规则,生态成熟。
  2. Thanos:在 Prometheus 之上提供全球视图查询、对象存储长时存储、横向扩容与高可用。
  3. Alertmanager:灵活路由与抑制策略,集成短信、邮件、Webhook 推送。
  4. Pushgateway:支持短命 Job 指标上报,补充拉取模型在批量任务场景的不足。
  5. 服务发现:结合 Kubernetes API、Consul、文件SD、DNS-SD 满足多种环境。

与其他方案对比:

  • InfluxDB+Telegraf:写入吞吐高,但查询语言不标准、告警生态不足。
  • ELK+Metricbeat:日志型指标存储,性能与成本局限明显。

最终决定以 Prometheus+Thanos 为核心技术栈,兼容原生生态与社区方案。

3 实现方案详解

3.1 架构整体设计

+----------------------+      +-------------+      +-----------------+
|  Kubernetes / VM 集群 | <--> | Prometheus  | <--> | Thanos Sidecar  |
+----------------------+      +-------------+      +-----------------+|                      |v                      v+-----------------+      +-----------------+|   Thanos Store  | <--->|  对象存储(S3) |+-----------------+      +-----------------+|v+-----------------+|   Thanos Query  |+-----------------+|v+-----------------+|  Grafana / UI   |+-----------------+
  • Prometheus 多副本部署,Sidecar 与远程存储对接。
  • Thanos Store Gateway 通过对象存储块读取历史数据。
  • Thanos Query 聚合各 Prometheus Server 与 Store,提供统一查询接口。
  • Alertmanager 集群模式,配置多分组通知策略。

3.2 Prometheus 配置示例

global:scrape_interval: 15sevaluation_interval: 30srule_files:- '/etc/prometheus/rules/*.yml'scrape_configs:- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]regex: trueaction: keep- action: labelmapregex: __meta_kubernetes_pod_label_(.+)- job_name: 'node-exporter'kubernetes_sd_configs:- role: nodemetrics_path: /metricsrelabel_configs:- regex: (.+)action: labelmapreplacement: node_$1# Sidecar remote write
remote_write:- url: 'http://thanos-receive:10908/api/v1/receive'queue_config:max_samples_per_send: 10000batch_send_deadline: 5s

3.3 Thanos 组件部署

  • Sidecar:与 Prometheus 同一 Pod 部署,自动发现和上传 TSDB 块。
  • Store Gateway:读取对象存储中的块,实现长时存储查询。
  • Compactor:定期压缩历史数据,合并小块,提高查询效率。
  • Query:聚合 Prometheus 与 Store,实现全局视图。

示例 Helm Values(简化):

thanos:sidecar:enabled: truestoreGateways:- name: store-gateway-01objstoreConfig:type: S3config:bucket: prometheus-dataendpoint: s3.cn-north-4.myhuaweicloud.comcompactor:retentionResolutionRaw: 6hretentionResolution5m: 30dcompaction:downsample:resolutionLevels: [5m]query:replicas: 2

3.4 告警规则与 Alertmanager

示例告警规则 (/etc/prometheus/rules/alerts.yml)

groups:- name: node.rulesrules:- alert: NodeDiskAlmostFullexpr: node_filesystem_free_bytes / node_filesystem_size_bytes < 0.1for: 5mlabels:severity: warningannotations:summary: "{{ $labels.instance }} 磁盘使用率过高"description: "磁盘剩余少于10%,请及时清理或扩容。"

Alertmanager config

route:receiver: 'team-notify'group_wait: 30sgroup_interval: 5mrepeat_interval: 2h
receivers:- name: 'team-notify'wechat_configs:- to_user: 'devops'api_url: 'https://qyapi.weixin.qq.com/cgi-bin/message/send'

4 踩过的坑与解决方案

  1. 高基数(cardinality)爆炸

    • 问题:错误地将动态标签(如用户 ID、订单号)暴露给 Prometheus,导致 TSDB 索引暴涨。
    • 解决:通过 relabel_configs 丢弃非必需标签,使用 drop_labels 清洗。
    relabel_configs:- source_labels: [order_id]action: labeldrop
    
  2. 查询延迟与内存溢出

    • 问题:PromQL 聚合大范围时间窗口时,Prometheus 内存占用剧增。
    • 解决:
      • 使用 Thanos Query 限制下推参数;
      • 针对复杂报表提前录制录制规则(Recording Rules);
      • 合理设置 max_concurrent_queries
  3. 对象存储 IO 瓶颈

    • 问题:Compactor 与 Store Gateway 同时访问 S3,带宽耗尽。
    • 解决:
      • 引入缓存层,如 MinIO 网关;
      • 拆分 Compactor 时段,与高峰查询时段错峰执行;
      • 使用网络带宽 QoS 分流。
  4. Alertmanager 集群状态不一致

    • 问题:多副本间配置信息不同步,导致告警漏报。
    • 解决:统一配置存储(GitOps 管理),并使用 Consul 或 KV 存储做服务发现与配置同步。

5 总结与最佳实践

  • 统一指标规范:提前设计 Label 维度,避免高基数。
  • 录制规则优先:Apdex、率类指标预先计算,降低在线计算资源消耗。
  • 分层架构:将短期数据留存在本地 Prometheus,长时数据交给 Thanos 压缩与存储。
  • 异步告警:告警与主链路隔离,避免监控系统自身故障导致告警丢失。
  • 监控自检:Prometheus 自身指标也要纳入监控,如 prometheus_target_interval_length_seconds

完整项目结构示例:

prometheus-stack/
├─ prometheus/
│  ├─ config/
│  │  ├─ prometheus.yml
│  │  └─ rules/
│  │     └─ alerts.yml
│  └─ Dockerfile
├─ thanos/
│  ├─ compactor/
│  ├─ store-gateway/
│  └─ query/
└─ helm-values.yaml

通过上述设计与优化,我们在生产环境中实现了秒级发现、数小时内查询 TB 级别历史指标、子服务告警 15s 内送达的目标,为业务运维与容量规划提供了有力支撑。


本文结合真实生产案例,旨在帮助中大型团队快速上手并优化 Prometheus 监控架构。欢迎在评论区交流更多实战经验。

http://www.lryc.cn/news/584984.html

相关文章:

  • LTR相关记录
  • 牛客周赛 Round 99
  • 【Dify(v1.x) 核心源码深入解析】mcp 模块
  • 4.丢出异常捕捉异常TryCatch C#例子
  • USB数据丢包真相:为什么log打印会导致高频USB数据丢包?
  • mysql数据库导入导出命令
  • 【Linux-云原生-笔记】系统引导修复(grub、bios、内核、系统初始化等)
  • Grok-4 发布会图文总结
  • 苹果UI 设计
  • SLICEGPT: COMPRESS LARGE LANGUAGE MODELSBY DELETING ROWS AND COLUMNS
  • Deepseek-如何从零开始开发需要专业知识的prompt
  • 8155平台SPI学习笔记
  • 从零实现一个GPT 【React + Express】--- 【4】实现文生图的功能
  • 深入剖析Spring Bean生命周期:从诞生到消亡的全过程
  • 英文国际期刊推荐:MEDS Chinese Medicine,中医药方向可发
  • 47-RK3588 用瑞芯微官方提供recovery进行OTA升级
  • Auto-GPT 简易教程
  • 前端抓包(不启动前端项目就能进行后端调试)--whistle
  • UI前端与数字孪生融合新领域:智慧环保的垃圾分类与回收系统
  • Windos服务器升级MySQL版本
  • 中国银联豪掷1亿采购海光C86架构服务器
  • 如何查看自己本地的公网IP地址?内网环境网络如何开通服务器公网ip提供互联网访问?
  • 电力分析仪的“双语对话”:CCLinkIE与Modbus TCP的无缝连接
  • 从《哪吒 2》看个人IP的破局之道|创客匠人
  • 【实用IP查询工具】IP数据云-IP地址查询离线库使用方案
  • 服务器机柜与网络机柜各自的优势
  • 解决Linux绑定失败地址已使用(端口被占用)的问题
  • python的卷烟营销数据统计分析系统
  • AIStarter新版重磅来袭!永久订阅限时福利抢先看
  • Spring Cloud Gateway介绍 - -基础概念,简单工作原理和配置示例