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后,按以下步骤操作:

  1. 点击左侧齿轮图标 → Data Sources
  2. 点击 Add data source
  3. 选择 Prometheus
  4. 在URL栏填入Prometheus地址,比如 http://localhost:9090
  5. 点击 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 创建第一个面板

咱们先做一个最简单的——实时在线设备数。

  1. 点击左侧 + 号 → Dashboard
  2. 点击 Add new panel
  3. 在查询框中输入:count(ota_device_info)
  4. 右侧选择图表类型为 Stat(只显示数字)
  5. 设置标题为「当前在线设备数」
  6. 点击右上角 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中,每个面板都可以设置告警。比如:

  1. 打开刚才的成功率面板
  2. 点击 Alert 标签
  3. 点击 Create alert rule
  4. 设置条件:WHEN last() OF query(A, 5m, now) IS BELOW 90
  5. 设置评估频率:每1分钟检查一次
  6. 设置通知方式:比如发到钉钉或企业微信

避坑指南: 我曾经把告警评估间隔设成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 }}"
}

配置路径:左侧 AlertingContact pointsAdd 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的监控大盘就搭完了。下一章咱们聊聊告警规则的进阶玩法——怎么避免告警风暴,怎么做到「告警即问题,问题即处理」。