4、指标可视化:使用Prometheus + Grafana搭建实时监控大盘
监控数据收集上来了,然后呢?
说实话,光看一堆数字和日志,你很难快速判断系统状态。我见过不少团队,Prometheus里存了几个G的数据,但没人去看——因为太枯燥了。
可视化,就是把冷冰冰的指标变成一眼能看懂的图表。今天咱们聊聊怎么用Prometheus + Grafana搭一个OTA升级的实时监控大盘。
4.1 为什么非得用Grafana?
Prometheus自带的表达式浏览器,说白了就是个调试工具。你查个瞬时值还行,想做个漂亮的仪表盘?嗯,它真不行。
Grafana就不一样了。它专门干这个的——把数据变成图表。而且它原生支持Prometheus作为数据源,配置起来非常顺滑。
我个人习惯,把Prometheus当后端存储,Grafana当前端展示。各司其职,清爽得很。
核心思路:
- Prometheus:负责采集和存储指标数据
- Grafana:负责查询和可视化展示
- 两者通过HTTP API通信,配置简单
4.2 搭建步骤:从零开始
咱们一步步来。假设你已经装好了Prometheus,现在开始装Grafana。
4.2.1 安装Grafana
我用的是Ubuntu 20.04,其他系统也类似。
# 添加Grafana仓库
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
# 安装
sudo apt-get update
sudo apt-get install grafana
# 启动并设置开机自启
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
装完后,浏览器访问 http://你的IP:3000。默认账号密码都是 admin,第一次登录会让你改密码。
小技巧: 我习惯把Grafana的端口改成非标准端口,比如3001。为什么呢?因为有些公司安全策略会扫描常见端口,改一下能少很多麻烦。
4.2.2 添加Prometheus数据源
登录Grafana后,按以下步骤操作:
- 点击左侧齿轮图标 → Data Sources
- 点击 Add data source
- 选择 Prometheus
- 在URL栏填入Prometheus地址,比如
http://localhost:9090 - 点击 Save & Test
如果看到绿色提示 Data source is working,说明连上了。
这里有个坑——我曾经遇到过Grafana和Prometheus不在同一台机器上,防火墙没开9090端口,折腾了半天才发现。嗯,网络问题永远是第一排查点。
4.3 设计OTA升级监控大盘
数据源配好了,接下来就是画图了。我个人习惯,先想清楚要看什么,再动手。
4.3.1 关键指标梳理
对于OTA升级系统,我一般关注这几个维度:
| 指标类别 | 具体指标 | PromQL示例 |
|---|---|---|
| 升级状态 | 当前正在升级的设备数 | sum(ota_upgrade_status{status="in_progress"}) |
| 成功率 | 最近1小时升级成功率 | sum(rate(ota_upgrade_result{result="success"}[1h])) / sum(rate(ota_upgrade_result[1h])) |
| 耗时分布 | 升级耗时P50/P90/P99 | histogram_quantile(0.9, sum(rate(ota_upgrade_duration_seconds_bucket[5m])) by (le)) |
| 错误分布 | 各类错误数量 | sum by (error_type) (ota_upgrade_errors_total) |
| 设备版本 | 各版本设备数量 | count by (firmware_version) (ota_device_info) |
注意: 这些指标的前提是——你的应用层已经正确暴露了这些metrics。如果没埋点,Grafana再牛也画不出图。我在项目里见过有人花了两天搭Grafana,结果发现应用层一个指标都没上报……
4.3.2 创建第一个面板
咱们先做一个最简单的——实时在线设备数。
- 点击左侧 + 号 → Dashboard
- 点击 Add new panel
- 在查询框中输入:
count(ota_device_info) - 右侧选择图表类型为 Stat(只显示数字)
- 设置标题为「当前在线设备数」
- 点击右上角 Apply
你看,几秒钟就出来一个实时数字。是不是比看日志舒服多了?
4.3.3 做一个升级成功率趋势图
这个稍微复杂一点,但很实用。
# 查询语句
sum(rate(ota_upgrade_result{result="success"}[5m]))
/
sum(rate(ota_upgrade_result[5m])) * 100
图表类型选 Time series,单位选 Percent (0-100)。这样你就能看到成功率随时间的变化曲线了。
我一般还会加一条阈值线——比如低于95%就标红。怎么加?在面板的 Thresholds 里设置:
- Base: 绿色 (默认)
- 95: 黄色
- 90: 红色
这样一眼就能看出有没有异常。
4.4 告警配置:让大盘自己说话
光有图表还不够。你不可能24小时盯着屏幕看。我习惯把告警也集成到Grafana里。
4.4.1 配置告警规则
在Grafana中,每个面板都可以设置告警。比如:
- 打开刚才的成功率面板
- 点击 Alert 标签
- 点击 Create alert rule
- 设置条件:
WHEN last() OF query(A, 5m, now) IS BELOW 90 - 设置评估频率:每1分钟检查一次
- 设置通知方式:比如发到钉钉或企业微信
避坑指南: 我曾经把告警评估间隔设成10秒,结果Prometheus查询压力太大,直接把Grafana搞挂了。建议评估间隔至少1分钟,条件判断窗口至少5分钟。别太激进。
4.4.2 配置通知渠道
Grafana支持很多通知方式。我常用的是Webhook,可以对接钉钉机器人。
# 钉钉机器人配置示例
{
"url": "https://oapi.dingtalk.com/robot/send?access_token=你的token",
"messageType": "markdown",
"title": "OTA升级告警",
"text": "升级成功率低于90%,当前值:{{ .Value }}"
}
配置路径:左侧 Alerting → Contact points → Add contact point
4.5 大盘模板分享
最后,我分享一个我常用的OTA监控大盘布局。你可以直接照着搭:
| 行号 | 面板内容 | 图表类型 |
|---|---|---|
| 第1行 | 在线设备数、升级中设备数、待升级设备数 | Stat(数字) |
| 第2行 | 升级成功率趋势(最近24小时) | Time series |
| 第3行 | 升级耗时P50/P90/P99 | Time series |
| 第4行 | 错误类型分布 | Pie chart |
| 第5行 | 各固件版本设备数量 | Bar chart |
这个布局我用了两年多,基本覆盖了日常运维的所有关注点。你根据自己的业务场景调整就行。
好了,Prometheus + Grafana的监控大盘就搭完了。下一章咱们聊聊告警规则的进阶玩法——怎么避免告警风暴,怎么做到「告警即问题,问题即处理」。