目录标题
这是一个非常实用的需求。下面我会用一个“新增监控指标并实现展示告警”的全过程为例,详细说明一个现代化监控平台的底层链路,包括:
采集 ➜ 存储 ➜ 展示 ➜ 告警 ➜ 问题定位
我将以 Prometheus + Grafana + Alertmanager 的体系为例,并结合企业常见的微服务或数据库平台(如 Kafka/MongoDB/MySQL)进行说明,结构如下:
✅ 一、链路总览
[被监控服务]
│
└─ Exporter(暴露指标)
↓
Prometheus(拉取采集)
↓
时序数据库(TSDB)
↓
Grafana(查询展示)
↓
Alertmanager(告警)
🧪 二、客户新增一个监控指标的场景示例
假设客户想新增一个指标:MongoDB 当前活跃连接数
mongodb_connections{state="active"}
步骤 1:数据源暴露指标
-
组件:MongoDB Exporter(或自研 exporter)
-
操作:
-
Exporter 在
/metrics暴露 Prometheus 格式的指标,如:mongodb_connections{state="active"} 135 mongodb_connections{state="idle"} 22 -
可通过访问
http://<exporter-host>:9216/metrics查看
-
✅ 关键点:
- 若指标未预置在 exporter 中,需要开发插件或修改 exporter 逻辑采集该指标。
步骤 2:Prometheus 采集指标
-
组件:Prometheus Server
-
配置:
scrape_configs: - job_name: 'mongodb' static_configs: - targets: ['10.0.0.1:9216'] # exporter 地址 -
执行流程:
- Prometheus 每隔 N 秒(默认15s)通过 HTTP 拉取一次
/metrics - 将
mongodb_connections{}指标及其标签、值写入 TSDB
- Prometheus 每隔 N 秒(默认15s)通过 HTTP 拉取一次
✅ 关键点:
-
采集不到?检查:
- Exporter 是否暴露正确
- Prometheus 配置是否 reload 生效
- Label 是否和预期一致(state=“active”)
步骤 3:Grafana 展示指标
-
组件:Grafana
-
操作:
-
在 Grafana 创建 dashboard 面板,PromQL 查询示例:
mongodb_connections{state="active"} -
设置时间区间和刷新频率,生成图表
-
✅ 关键点:
- 查询返回为空 → 多数为 label 错误或数据未被采集
步骤 4:定义告警规则
-
组件:Prometheus Alerting Rules
-
配置(如:活跃连接数超 300 告警):
groups: - name: mongodb.rules rules: - alert: HighMongoConnections expr: mongodb_connections{state="active"} > 300 for: 1m labels: severity: critical annotations: summary: "MongoDB 活跃连接数过高" description: "当前连接数为 {{ $value }}, 超出阈值 300"
✅ 关键点:
for: 1m表示超过 1 分钟才触发告警(避免波动)
步骤 5:Alertmanager 处理告警
-
组件:Alertmanager
-
行为:
-
接收来自 Prometheus 的告警
-
根据路由规则发送到:
- 企业微信
- 邮件
- webhook(可接入飞书、钉钉、PagerDuty)
-
-
示例通知消息:
[CRITICAL] MongoDB 活跃连接数过高 当前连接数为 350,超过阈值 300,实例:10.0.0.1
✅ 关键点:
- 通知不触发 → 检查 Alertmanager 是否接收到、路由规则是否匹配
步骤 6:问题定位辅助功能
一旦告警触发,你可以通过 Grafana 查询历史曲线、关联其他指标进行根因分析:
-
当前连接数 vs CPU、内存曲线
-
当前连接数 vs 请求速率
-
聚合查询:
sum by (instance) (mongodb_connections{state="active"})
🧠 三、整个链路核心组件定位说明
| 环节 | 问题排查关键点 |
|---|---|
| Exporter | 是否监听了指定端口?是否暴露了你关心的指标? |
| Prometheus | 配置是否生效?target 状态是 up 吗?是否成功拉取? |
| TSDB 存储 | 是否写入数据?数据有没有 retention 丢失? |
| Grafana | 查询语句是否正确?dashboard 是否引用正确数据源? |
| Alertmanager | 是否接到告警?路由规则是否匹配?通知模板是否生效? |
✅ 四、参考补充
- Prometheus 指标格式文档:https://prometheus.io/docs/concepts/data_model/
- Exporter 列表:https://prometheus.io/docs/instrumenting/exporters/
- Prometheus + Grafana 实战教程:https://grafana.com/docs/grafana/latest/getting-started/getting-started-prometheus/

1460

被折叠的 条评论
为什么被折叠?



