4、实时监控看板:Grafana看板搭建、实时数据流接入、告警规则配置

监控看板这东西,说白了就是给数据装个「仪表盘」。你花了大价钱做成本治理,总得知道效果怎么样吧?Grafana 就是干这个的。我这些年经手的项目,几乎都用它来做可视化层。今天咱们就把它拆开揉碎了讲清楚。

4.1 Grafana 看板搭建:从零到一

先说说看板搭建。很多人一上来就堆图表,结果满屏花花绿绿,啥也看不清楚。我个人习惯是「先分层,再填充」。

一个标准的成本监控看板,我通常分三层:

  • 顶层:全局 KPI,比如总成本、环比增长率、预算消耗率。用 Stat 或 Gauge 面板,一眼就能看到核心数字。
  • 中层:趋势与分布,比如按服务/团队的成本趋势图、Top N 消耗排行。用 Time Series 或 Bar Chart。
  • 底层:明细与异常,比如异常事件列表、告警触发记录。用 Table 或 Logs 面板。
我的小技巧: 看板不是报表。每个面板都要回答一个具体问题。比如「哪个服务昨天成本突增?」而不是「展示所有服务的成本」。

搭建步骤其实不复杂:

  1. 创建 Dashboard:点左侧 + 号,选 Dashboard。给个有意义的名字,比如「成本实时监控 v2」。
  2. 添加 Panel:点 Add panel,选数据源。我一般用 Prometheus 或 InfluxDB。
  3. 写查询:比如 sum(rate(cost_total[5m])) by (service)。嗯,这里要注意,查询语句决定了看板的灵魂。
  4. 调样式:选图表类型、配色、单位。成本单位我习惯用「元/小时」或「美元/天」。
  5. 设变量:加个下拉框,让用户选服务、团队或时间段。这样看板就活了。

核心原则: 看板是给人看的,不是给机器看的。每个面板的标题要写清楚「这是什么」「单位是什么」。我曾经见过一个看板,所有面板标题都是「Metric A」「Metric B」…… 嗯,后来那个看板没人用了。

4.2 实时数据流接入:让看板动起来

看板搭好了,数据怎么进去?实时数据流接入是关键。说白了,就是让数据从产生到展示,延迟控制在秒级甚至毫秒级。

我常用的架构是这样的:

实时数据流接入架构 数据源 云账单 / 日志 / API 采集层 Prometheus / Telegraf 存储层 InfluxDB / VictoriaMetrics 可视化层 Grafana 告警层 Alertmanager / 钉钉 说明: 数据从源采集后,经过 存储、查询,最终展示 在 Grafana 看板上。

具体到接入方式,我推荐两种:

方式 适用场景 延迟 复杂度
Push 模式 应用主动上报(如 Prometheus Pushgateway) 秒级 低
Pull 模式 服务端主动拉取(如 Prometheus 抓取) 秒级 中
流式接入 Kafka + 流处理(如 Flink) 毫秒级 高

我在项目中遇到过一个问题:数据量太大,Prometheus 扛不住。后来换了 VictoriaMetrics,压缩率高了 3 倍,查询速度也快了不少。你想想看,如果数据源每秒产生几万条成本记录,存储层选不对,看板就卡成 PPT 了。

避坑指南: 我曾经把 Prometheus 的 retention 设成 90 天,结果磁盘爆了。实时监控看板的数据,建议只保留 7-14 天。历史数据归档到其他地方,比如 S3 或 ClickHouse。

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% 时触发告警。

步骤:

  1. 数据源:AWS Cost Explorer API 导出到 Prometheus。
  2. 看板:建一个 Dashboard,包含:
    • 总成本趋势图(Time Series)
    • 各服务成本占比(Pie Chart)
    • Top 5 高消耗服务列表(Table)
    • 环比增长率仪表盘(Stat)
  3. 告警规则:
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 来对比上周同一天的数据。为什么要这么做?因为很多服务的成本有周期性,比如工作日高、周末低。直接对比前一天可能不准。

小提示: 告警的「沉默周期」一定要设。比如同一个告警 4 小时内不重复发送。不然半夜被叫醒,发现是同一个问题刷屏,你会想骂人的。

嗯,到这里,实时监控看板的核心内容就差不多了。记住一句话:看板是给人看的,告警是给人用的。别搞复杂了,实用第一。