
第一步:数据源对接——让Grafana“读懂”你的数据
数据就像仪表盘的“食材”,连不对食材,后面再厉害的厨艺也做不出好菜。我刚开始用Grafana时,就犯过“食材选错”的错:明明要连MySQL数据库,结果选成了PostgreSQL,捣鼓了一小时才发现数据源类型选错了,白白浪费时间。
先搞懂:你要连哪种“数据仓库”?
Grafana支持20多种数据源,但咱们后端常用的就那么几个,我整理了个表格,你对着选就行:
数据源类型 | 适用场景 | 配置难度 | 关键配置项 |
---|---|---|---|
Prometheus | 服务器/容器监控(CPU、内存等) | ★★☆☆☆ | URL、超时时间、Scrape interval |
MySQL | 业务数据统计(用户数、订单量等) | ★★★☆☆ | 主机、端口、数据库名、账号密码 |
Elasticsearch | 日志/事件分析(错误日志、访问记录) | ★★★★☆ | Index pattern、时间字段、版本 |
(表格说明:配置难度基于我带过5个新人的实操经验,★越多表示需要注意的细节越多)
手把手教你连数据源(以Prometheus为例)
你先打开Grafana,左边菜单点“Configuration”(就是那个齿轮图标),再选“Data Sources”,点“Add data source”。在搜索框里输入“Prometheus”,选中后会跳到配置页。最重要的是“URL”——如果你是本地搭的Prometheus,一般填http://localhost:9090
;如果是远程服务器,就填服务器IP+端口,比如http://192.168.1.100:9090
。
这里有个坑我必须提醒你:别漏了填“Name”!我之前帮朋友配置时,他随手填了个“Prom”,结果后面面板多了,根本分不清哪个数据源连的是生产环境,哪个是测试环境,后来全得重改。 你按“用途+环境”命名,比如“Prometheus-生产服务器监控”。
填完URL拉到最下面点“Save & Test”,如果显示“Data source is working”就成功了。要是失败,先检查Prometheus服务是不是开着(可以浏览器直接访问URL试试),再看看Grafana服务器能不能ping通Prometheus的地址——我遇到过最离谱的一次,是防火墙没开端口,折腾半天发现是运维同事忘了放通9090端口。
第二步:面板配置——把数据“画”成看得懂的图表
连好数据源,就该把数据变成图表了。我见过很多人卡在这一步,觉得“要写查询语句好难”——其实Grafana早就做了“傻瓜式”工具,不用写代码也能搞定。
先想清楚:你要监控什么?
我刚开始做仪表盘时,总想着“把所有数据都放上去才全面”,结果一个面板里堆了CPU、内存、磁盘、网络4种指标,线都缠成一团,老板看了3秒就说“太乱,重搞”。后来我才明白:每个面板只讲一个“故事”,比如“Web服务器响应时间趋势”、“数据库慢查询次数统计”,这样才清晰。
你可以试试这个思路:先列3个你最关心的核心指标(比如运维最看重“服务器是否活着”、“响应快不快”、“有没有报错”),每个指标做一个面板。像我现在负责的业务,必看的三个面板是:服务器存活状态(用“状态面板”显示在线/离线)、接口平均响应时间(折线图看趋势)、5xx错误数(柱状图看峰值)。
5分钟做个CPU监控面板(全程鼠标操作)
node_cpu_seconds_total
(这是Prometheus采集CPU的默认指标)。 100
(value * 100)
(这是把空闲时间转成使用率的公式,不用记,我把常用公式放文末了)。 这样一个能看CPU使用率的折线图就做好了!你点右上角“Apply”保存到仪表盘,是不是很简单?我第一次做的时候,以为至少要半小时,结果10分钟就搞定了,当时还怀疑“这么简单是不是不对”,后来运行一周数据都准得很。
第三步:动态交互与告警——让仪表盘“主动干活”
做好静态图表还不够,好的仪表盘得能“跟着业务变”,甚至“出事了主动喊你”。这步学会了,你就能从“盯着屏幕看”变成“等它通知你”,效率直接翻倍。
用“变量”实现“一键切换”
你有没有遇到过这种情况:监控10台服务器,得做10个CPU面板,想看哪台就得切来切去?用“变量”就能解决——就像给仪表盘装个“遥控器”,点一下就能切换不同服务器、不同应用的数据。
我教你加个“服务器IP”变量:
server_ip
(变量名最好用英文,后面写查询方便),“Type”选“Query”,数据源还是Prometheus。 label_values(node_uname_info, instance)
(这是获取所有服务器IP的Prometheus查询),点“Run query”会显示所有服务器IP,然后“Save”。 现在回到CPU面板,编辑查询语句,把固定的服务器IP换成$server_ip
,保存后你会发现仪表盘顶部多了个下拉框,选不同IP,图表数据就跟着变了!我用这个功能帮公司做了个“业务线监控仪表盘”,销售同事自己就能切换想看的产品线数据,再也不用天天来找我要报表了。
告警设置:让异常“自动敲门”
最爽的是不用盯着屏幕等问题——设置好告警,数据异常了Grafana会主动发通知给你。我之前配置过“内存使用率超过90%就发钉钉群”,有次半夜服务器内存飙升,5分钟内告警就来了,比人工发现快了半小时,避免了业务中断。
简单设置步骤:在面板编辑页点“Alert”标签,点“Create alert rule”,条件设“当CPU使用率>80%持续5分钟”,通知渠道选“DingDing”(需要提前在Grafana配置钉钉机器人,教程网上很多,跟着配就行),消息内容写清楚“哪台服务器、什么指标、当前值多少”,比如“⚠️ 服务器192.168.1.101 CPU使用率达85%(阈值80%),已持续5分钟”。
不过要注意别设太敏感的阈值!我刚开始把告警阈值设成“CPU>70%”,结果业务高峰期每小时都报警,同事都把告警群设免打扰了。后来改成“>85%持续10分钟”,既不会漏报严重问题,也不会太吵。
按这三步走,你现在应该已经有一个能看、能用、还会主动提醒的仪表盘了。刚开始可能会觉得“这里配置不对”“那个图表不好看”,别着急,我带过的新人里,最快的3天就能上手,最慢的一周也熟练了。
对了,我整理了份“Grafana常用公式 cheat sheet”,里面有CPU、内存、磁盘使用率的现成转换公式,还有不同图表的配置模板,你需要的话可以评论区喊我,我发给你。
如果你按这些步骤做了,欢迎回来告诉我你的仪表盘长什么样——是简洁的“核心指标看板”,还是酷炫的“全业务监控大屏”?遇到问题也可以问,咱们一起把运维监控这件事变得简单又高效!
你先别急着查日志,我帮人排查过十几次这种问题,八成是这三个地方没弄对。先说最常见的——告警渠道配置是不是真的通了?就拿钉钉告警来说,很多人在Grafana的“Alerting→Contact points”里填了Webhook地址,觉得“复制粘贴完事儿”,结果压根没发过测试消息。我上周帮个朋友看,他填的Webhook少了个“s”(把https写成http),自己没发现,后来我让他点“Test”发个测试消息,立马弹出404错误,改完地址再测,钉钉群里秒收到消息。所以你第一步必须先在Contact points里点“Test”,发条“告警测试”,能收到再往下查,收不到就盯着报错信息改配置——比如企业微信要填AgentID和Secret,飞书要开机器人权限,每个渠道的坑都不一样,但测试消息是万能的“通行证”。
再说说告警条件是不是真的触发了,这也是个高频坑。你以为设了“CPU>80%持续5分钟告警”就万事大吉?但Grafana触发告警有个“严格规则”:得同时满足阈值和持续时间。我之前给一个客户配置时,他非说告警坏了,结果一看面板“State history”——CPU确实有几次冲到82%,但每次都只持续了3分钟就掉下来了,根本没达到5分钟的持续要求,Grafana当然不会发通知。还有人阈值设得太“理想化”,比如服务器内存平时就稳定在85%,他非要设“>90%告警”,结果跑了一周都没触发,还以为工具坏了。你现在打开面板的“Alert”标签页,看看“State history”里有没有“Alerting”状态的记录,要是一直显示“Normal”,要么是阈值设太高,要么是持续时间太长,调低点试试——比如先设个“CPU>70%持续2分钟”,看能不能触发,能触发再慢慢把阈值调回去。
还有个特容易忽略的点——你得看看Grafana服务器能不能联网访问通知渠道。我碰到过最哭笑不得的情况:一个公司为了安全,把监控服务器的出站流量全关了,结果运维配完告警等了三天没反应,后来一查服务器日志,全是“dial tcp: lookup oapi.dingtalk.com: no such host”(连钉钉API域名都解析不了)。这种时候你得在Grafana服务器上手动测试网络,比如用curl命令访问钉钉Webhook地址(curl -X POST “你的Webhook地址” -d ‘{“msgtype”:”text”,”text”:{“content”:”测试网络”}}’),要是返回“{“errcode”:0,”errmsg”:”ok”}”就说明网络通,要是报“Connection refused”或者超时,那就是服务器被防火墙拦了,找运维开放对应域名的出站权限就行——比如钉钉要放行oapi.dingtalk.com,企业微信要放行qyapi.weixin.qq.com,别上来就怪Grafana不好用,先让服务器能“出门”再说。
Grafana连接数据源时提示“无法连接”怎么办?
常见原因有三个:① 数据源类型选错(比如MySQL选成PostgreSQL),核对文章表格中的“数据源类型”和实际场景匹配;② URL或地址错误,本地服务用localhost:端口
,远程服务用服务器IP+端口,可先在浏览器直接访问URL测试连通性;③ 权限问题,比如MySQL账号没有SELECT权限,或Grafana服务器未开放数据源端口(比如Prometheus的9090端口被防火墙拦截)。按这三步排查,80%的连接问题都能解决。
不同数据源怎么选?比如监控服务器和业务数据分别用什么?
参考文章中的表格,按“场景优先”原则选:① 服务器/容器监控(CPU、内存、磁盘等)优先用Prometheus,配置简单且原生支持时序数据;② 业务数据(用户数、订单量、接口调用量等)用MySQL/PostgreSQL,适合结构化数据统计;③ 日志或事件分析(错误日志、访问记录)用Elasticsearch,支持全文检索和日志聚合。如果是混合场景(比如既要看服务器性能又要看订单量),可以在一个仪表盘里添加多个数据源面板。
制作的图表数据不实时更新,怎么设置自动刷新?
在仪表盘右上角有个“刷新”按钮(类似循环箭头图标),点击可选择刷新频率(5秒、10秒、1分钟等),也可以手动输入自定义间隔(比如30秒)。如果想让单个面板独立刷新,编辑面板后在“Options”标签页找到“Refresh”,选择“Independent”并设置频率。注意:刷新间隔太短(比如<5秒)可能增加数据源压力, 非核心面板用1-5分钟刷新,核心监控面板用10-30秒。
配置了告警但没收到通知,可能是什么问题?
先检查两个关键点:① 告警渠道是否配置正确,比如钉钉告警需在Grafana“Alerting→Contact points”中填对机器人Webhook地址,测试发送一条“测试消息”确认渠道通不通;② 告警条件是否触发,在面板“Alert”标签页查看“State history”,确认是否达到阈值(比如设置“CPU>80%持续5分钟”,实际可能只达到75%或持续时间不够)。 Grafana服务本身要有网络权限访问通知渠道(比如服务器能访问钉钉API),之前遇到过因服务器禁网导致告警发不出去的情况。
怎么让变量在多个面板中生效?比如切换“服务器IP”时所有图表一起变
在仪表盘设置中添加“全局变量”即可。进入仪表盘设置(右上角齿轮图标)→“Variables”→“Add variable”,按文章步骤配置变量(比如服务器IP),保存后变量会显示在仪表盘顶部。编辑其他面板时,在查询语句中用$变量名
(比如$server_ip
)替换固定值,这样切换变量时,所有引用该变量的面板会自动更新数据。我现在维护的多服务监控仪表盘,就是用一个“业务线”变量控制10+个面板,切换起来特别方便。