4、实时监控看板:Grafana看板搭建、实时数据流接入、告警规则配置
监控看板这东西,说白了就是给数据装个「仪表盘」。你花了大价钱做成本治理,总得知道效果怎么样吧?Grafana 就是干这个的。我这些年经手的项目,几乎都用它来做可视化层。今天咱们就把它拆开揉碎了讲清楚。
4.1 Grafana 看板搭建:从零到一
先说说看板搭建。很多人一上来就堆图表,结果满屏花花绿绿,啥也看不清楚。我个人习惯是「先分层,再填充」。
一个标准的成本监控看板,我通常分三层:
- 顶层:全局 KPI,比如总成本、环比增长率、预算消耗率。用 Stat 或 Gauge 面板,一眼就能看到核心数字。
- 中层:趋势与分布,比如按服务/团队的成本趋势图、Top N 消耗排行。用 Time Series 或 Bar Chart。
- 底层:明细与异常,比如异常事件列表、告警触发记录。用 Table 或 Logs 面板。
搭建步骤其实不复杂:
- 创建 Dashboard:点左侧 + 号,选 Dashboard。给个有意义的名字,比如「成本实时监控 v2」。
- 添加 Panel:点 Add panel,选数据源。我一般用 Prometheus 或 InfluxDB。
- 写查询:比如
sum(rate(cost_total[5m])) by (service)。嗯,这里要注意,查询语句决定了看板的灵魂。 - 调样式:选图表类型、配色、单位。成本单位我习惯用「元/小时」或「美元/天」。
- 设变量:加个下拉框,让用户选服务、团队或时间段。这样看板就活了。
核心原则: 看板是给人看的,不是给机器看的。每个面板的标题要写清楚「这是什么」「单位是什么」。我曾经见过一个看板,所有面板标题都是「Metric A」「Metric B」…… 嗯,后来那个看板没人用了。
4.2 实时数据流接入:让看板动起来
看板搭好了,数据怎么进去?实时数据流接入是关键。说白了,就是让数据从产生到展示,延迟控制在秒级甚至毫秒级。
我常用的架构是这样的:
具体到接入方式,我推荐两种:
| 方式 | 适用场景 | 延迟 | 复杂度 |
|---|---|---|---|
| Push 模式 | 应用主动上报(如 Prometheus Pushgateway) | 秒级 | 低 |
| Pull 模式 | 服务端主动拉取(如 Prometheus 抓取) | 秒级 | 中 |
| 流式接入 | Kafka + 流处理(如 Flink) | 毫秒级 | 高 |
我在项目中遇到过一个问题:数据量太大,Prometheus 扛不住。后来换了 VictoriaMetrics,压缩率高了 3 倍,查询速度也快了不少。你想想看,如果数据源每秒产生几万条成本记录,存储层选不对,看板就卡成 PPT 了。
4.3 告警规则配置:让看板会说话
看板有了,数据也进来了。但你不能 24 小时盯着屏幕吧?告警就是你的「哨兵」。配置得好,它能帮你省下几百万的预算超支。
告警规则怎么写?我一般遵循「三要素」:
- 条件:什么情况下触发?比如
cost_total > 10000。 - 持续时间:持续多久才算异常?比如 5 分钟。避免毛刺误报。
- 严重级别:P0(致命)、P1(严重)、P2(警告)。
举个例子,一个典型的成本告警规则:
# Prometheus 告警规则示例
groups:
- name: cost_alerts
rules:
- alert: 单服务成本突增
expr: |
sum by (service) (
rate(cost_total[5m])
) > 500
for: 5m
labels:
severity: P1
annotations:
summary: "服务 {{ $labels.service }} 成本超过 500 元/小时"
description: "当前值: {{ $value | humanize }} 元/小时"
配置好规则后,还要配通知渠道。我常用的有:
- 钉钉/企业:发到群里,@责任人。
- 邮件:适合非紧急告警,比如日报。
- PagerDuty:适合 P0 级,直接打电话。
我的经验: 告警不是越多越好。我曾经见过一个团队,一天收到 200 条告警,结果没人看了。后来我们把规则精简到 10 条,每条都有明确的处理 SLO。告警的「信噪比」很重要。
4.4 实战:搭建一个成本异常检测看板
光说不练假把式。咱们来个完整的例子。
场景: 监控 AWS 各服务的每日成本,当某个服务成本环比增长超过 20% 时触发告警。
步骤:
- 数据源:AWS Cost Explorer API 导出到 Prometheus。
- 看板:建一个 Dashboard,包含:
- 总成本趋势图(Time Series)
- 各服务成本占比(Pie Chart)
- Top 5 高消耗服务列表(Table)
- 环比增长率仪表盘(Stat)
- 告警规则:
expr: |
(
sum by (service) (cost_total[1d])
-
sum by (service) (cost_total[1d] offset 7d)
)
/
sum by (service) (cost_total[1d] offset 7d)
> 0.2
for: 10m
labels:
severity: P2
annotations:
summary: "服务 {{ $labels.service }} 成本环比增长超过 20%"
你看,这个规则用了 offset 7d 来对比上周同一天的数据。为什么要这么做?因为很多服务的成本有周期性,比如工作日高、周末低。直接对比前一天可能不准。
嗯,到这里,实时监控看板的核心内容就差不多了。记住一句话:看板是给人看的,告警是给人用的。别搞复杂了,实用第一。