4、Grafana进阶:Dashboard设计原则、变量与模板、告警通知配置(钉钉/邮件)
好,咱们继续聊Grafana。上一章我们把Grafana跑起来了,也接上了数据源,能画几个简单的图。但说实话,那只是入门。真正让Grafana发挥威力的,是今天要讲的这几个进阶技能:Dashboard怎么设计才好看又好用?变量和模板怎么玩?告警怎么配才能第一时间通知到你?
我个人习惯,把Grafana的进阶能力分成三层:看得清、查得准、喊得响。Dashboard设计解决“看得清”,变量模板解决“查得准”,告警配置解决“喊得响”。咱们一层一层来。
4.1 Dashboard设计原则:别让监控变成“监空”
我在项目中遇到过不少这样的场景:打开一个Dashboard,满屏的折线图,颜色花花绿绿,根本不知道看哪里。说白了,这就是设计没做好。
一个好的Dashboard,应该像一张报纸的头版。最重要的信息在最上面,一眼就能看懂。我总结了几个核心原则:
- 黄金8秒原则:打开Dashboard,8秒内要能判断系统是否健康。超过这个时间,说明信息层级有问题。
- 从上到下,从左到右:最关键的指标放左上角。比如CPU使用率、内存占用、请求延迟。次要的放下面。
- 颜色别乱用:红色只表示“有问题”,绿色表示“正常”,黄色表示“警告”。别为了好看把线画成彩虹色。
- 一屏原则:尽量让所有关键信息在一个屏幕内展示完。需要滚动才能看完的Dashboard,说实话,没人会认真看。
核心思路:Dashboard是给人看的,不是给机器看的。设计时多想想“如果我是值班的人,我最想先看到什么?”
嗯,这里要注意一点:别把所有的指标堆到一个Dashboard里。我建议按业务维度拆分。比如一个Dashboard专门看“应用性能”,另一个专门看“基础设施”。每个Dashboard的指标控制在10-15个以内。
4.2 变量与模板:让Dashboard“活”起来
你想想看,如果每个环境(测试、预发、生产)都要单独做一个Dashboard,那得累死。Grafana的变量和模板就是干这个的。
变量说白了就是“占位符”。你定义一个变量叫$env,然后在查询语句里用$env代替具体的环境名。用户在上方下拉框里选一下,整个Dashboard的数据就变了。
我常用的变量类型有几种:
| 变量类型 | 说明 | 使用场景 |
|---|---|---|
| Query | 从数据源查询出来的值 | 动态获取主机列表、数据库名 |
| Custom | 手动定义的值列表 | 环境选择(dev/test/prod) |
| Interval | 时间间隔 | 聚合粒度控制 |
| Data source | 切换数据源 | 多数据源场景 |
举个例子。假设你的Prometheus里存了多个应用的指标,每个应用都有app_name这个标签。你可以这样定义一个变量:
变量名:app
类型:Query
查询语句:label_values(app_name)
刷新方式:On Dashboard Load
然后在Panel的查询里这样写:
rate(http_requests_total{app="$app"}[5m])
这样,用户只要在顶部选择不同的应用,所有图表都会自动切换。是不是很方便?
小技巧:变量可以嵌套。比如先选“环境”,再根据环境动态加载“主机列表”。我曾经用三层嵌套变量(环境-集群-主机)做了一个通用的Dashboard,一个模板覆盖了200多台机器。
为什么会这样?因为变量在Grafana里是全局生效的。你定义好变量结构,所有Panel共享同一套变量,维护成本极低。
4.3 告警通知配置:让Grafana“喊”你起床
监控的最终目的是发现问题。如果出了问题没人知道,那监控就白做了。Grafana的告警功能,说白了就是“当指标触达阈值时,通过某种方式通知你”。
我主要用两种通知方式:钉钉和邮件。咱们一个一个说。
4.3.1 钉钉告警配置
钉钉告警的核心是“Webhook”。你在钉钉群里加一个自定义机器人,拿到Webhook地址,然后配置到Grafana里。
具体步骤:
- 钉钉群 -> 群设置 -> 智能群助手 -> 添加机器人 -> 选择“自定义”
- 设置关键词(比如“告警”),复制Webhook地址
- 在Grafana中:Alerting -> Contact points -> Add contact point
- 类型选择“DingDing”,粘贴Webhook地址
配置好联系人后,再创建告警规则:
Alert rule name: CPU使用率过高
条件:avg by(instance) (cpu_usage_percent) > 90
评估频率:每1分钟
持续时间:5分钟
通知策略:发送到钉钉群
我曾经踩过一个坑:钉钉机器人有频率限制,每分钟最多20条消息。如果告警风暴来了,消息会被丢弃。所以建议在告警规则里加一个“持续时间”条件,比如持续5分钟才触发,避免误报和刷屏。
注意:钉钉机器人的安全设置里,建议勾选“加签”。这样Webhook地址里会多一个secret参数,Grafana配置时也要对应加上。否则容易被别人利用。
4.3.2 邮件告警配置
邮件告警适合“不那么紧急”的场景,比如日常巡检报告、非关键指标的异常。配置起来也不复杂。
在Grafana的配置文件grafana.ini里设置SMTP:
[smtp]
enabled = true
host = smtp.qq.com:465
user = your_email@qq.com
password = your_auth_code
skip_verify = true
from_address = your_email@qq.com
from_name = Grafana告警
配置完重启Grafana,然后在Alerting里添加邮件联系人即可。邮件告警的好处是内容可以写得很详细,适合做“事后复盘”。
我个人习惯:紧急告警用钉钉,非紧急告警用邮件。钉钉响起来是真的烦,所以只有真正需要马上处理的问题才走钉钉。邮件嘛,每天看一次就行。
4.4 知识体系总览
为了让你更直观地理解这一章的内容,我画了一张图。它展示了Dashboard设计、变量模板、告警配置三者之间的关系:
这张图想表达的是:设计是基础,变量是灵魂,告警是保障。三者缺一不可。没有好的设计,Dashboard没人看;没有变量,维护成本高到崩溃;没有告警,监控等于白做。
好了,这一章的内容就到这里。记住我说的:Dashboard是给人看的,变量是给运维省力的,告警是给系统保命的。把这三点吃透,你的Grafana水平就能上一个台阶。
公众号:蓝海资料掘金营,微信deep3321