4. Grafana可视化:让数据会说话
说实话,运维数据光有指标还不够。你得让它们「看得见」。
我见过太多团队,Prometheus里存了几百个指标,但没人去看。为什么?因为数据都在黑盒里,没有变成直观的图表。Grafana就是那个把数据「翻译」成图表的工具。今天我就带你走一遍,从数据源配置到告警配置的完整流程。
本章核心脉络:数据源配置 → Dashboard设计 → 图表类型选择 → 告警配置
4.1 数据源配置:第一步不能错
Grafana本身不存数据。它是个「画板」,数据源才是「颜料」。我刚开始用Grafana时犯过一个低级错误——配错了数据源地址,折腾了半天图表都是空的。后来学乖了,配完先点一下「Save & Test」。
支持的常见数据源:
- Prometheus:监控标配,时序数据首选
- InfluxDB:适合IoT和事件型数据
- Elasticsearch:日志分析场景
- MySQL / PostgreSQL:业务数据可视化
配置步骤其实很简单:
- 进入 Configuration → Data Sources → Add data source
- 选择类型(比如Prometheus)
- 填写URL(例如
http://localhost:9090) - 点击「Save & Test」验证连通性
小技巧:我个人习惯把数据源名称加上环境标识,比如「Prometheus-Prod」、「Prometheus-Staging」。这样在Dashboard里一眼就能分清数据来源,避免把生产数据跟测试数据混在一起。
4.2 Dashboard设计原则:别做成「监控墙」
你见过那种满屏都是图表的监控大屏吗?红红绿绿一片,根本不知道看哪里。说白了,那是「监控墙」,不是Dashboard。
我总结了几条设计原则,你可以参考:
| 原则 | 说明 | 我的经验 |
|---|---|---|
| 分层设计 | 从上到下:全局 → 服务 → 实例 | 先看整体水位,再下钻定位 |
| 聚焦关键 | 每屏不超过6-8个图表 | 超过8个,人眼就疲劳了 |
| 统一时间轴 | 所有图表使用相同时间范围 | 否则对比时容易误判 |
| 颜色语义化 | 绿色=正常,黄色=警告,红色=异常 | 别用花里胡哨的颜色 |
避坑指南:我曾经给一个团队设计Dashboard,放了20多个图表。结果运维同学说「看了三分钟,眼睛都花了,还是不知道哪里有问题」。后来我砍到6个核心图表,加了一个「异常聚合」面板,问题定位效率反而提升了。记住:少即是多。
4.3 常用图表类型:选对图表,事半功倍
Grafana里图表类型很多,但常用的就那几种。我按场景给你拆解一下。
折线图(Time Series)
最常用的图表,没有之一。适合展示指标随时间的变化趋势。
典型场景:CPU使用率、QPS、延迟P99
// PromQL 示例:过去1小时CPU使用率
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
嗯,这里要注意:折线图不要同时展示超过5条线。否则就变成「意大利面条」了,谁也看不清。
柱状图(Bar Chart)
适合做对比,比如不同服务的请求量、不同机器的内存使用量。
典型场景:各服务错误数排行、各机房流量对比
我的习惯:柱状图我一般配合「排序」使用。比如展示Top 10错误最多的服务,一眼就能看到「罪魁祸首」。比折线图直观多了。
热力图(Heatmap)
这个图表有点「高级」,但用好了非常强大。它用颜色深浅表示数值密度,适合分析分布情况。
典型场景:请求延迟分布、错误发生的时间分布
// 热力图查询示例:请求延迟分布
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
热力图有个好处:你能看到「大多数请求的延迟集中在哪个区间」。比如P99是500ms,但热力图显示大部分请求其实在100ms以内,只有少数几个毛刺拉高了P99。这种信息折线图是看不出来的。
选图建议:
- 看趋势 → 折线图
- 做对比 → 柱状图
- 看分布 → 热力图
- 看占比 → 饼图(但我不推荐,人眼对角度不敏感)
4.4 告警配置:让Grafana主动找你
Dashboard是给人看的。但你不能24小时盯着屏幕。所以告警很重要——让Grafana在指标异常时主动通知你。
Grafana的告警系统经历过一次大改版。现在用的是「统一告警」(Unified Alerting),配置起来更灵活。
配置步骤:
- 进入 Alerting → Alert rules → New alert rule
- 选择数据源和查询语句
- 设置触发条件(例如:CPU > 90% 持续5分钟)
- 配置通知渠道(邮件、钉钉、Slack等)
- 设置静默时间(避免半夜被骚扰)
// 告警规则示例(PromQL)
avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.1
// 含义:CPU空闲率低于10%,持续5分钟,触发告警
避坑指南:我曾经设置过一个告警,条件太敏感了。CPU偶尔飙到91%就触发,结果一天收到200多条告警。运维同事直接把我拉黑了。后来我加了「持续5分钟」的条件,告警量降到了每天3-5条,大家才愿意看。记住:告警要「准」不要「多」。
通知渠道配置:
- 邮件:配置SMTP,适合非紧急告警
- 钉钉/企业微信:Webhook接入,适合值班通知
- Slack:海外团队常用
- PagerDuty:适合SRE团队,支持排班
我个人习惯把告警分三级:
- P0(紧急):服务宕机,直接电话+短信
- P1(警告):指标异常,钉钉群通知
- P2(提醒):趋势预警,邮件日报
这样分级后,大家不会对告警「免疫」。该重视的重视,该忽略的忽略。
好了,Grafana可视化的核心内容就这些。数据源配好、Dashboard设计合理、图表选对、告警配置到位,你的运维指标体系就真正「活」起来了。数据不再是冷冰冰的数字,而是能帮你做决策的「眼睛」。
一句话总结:Grafana不是画图工具,是运维决策的「驾驶舱」。别把它做成装饰品。