引子:最近在学golang,又碰巧项目组需要做微服务监控,搜索之后最终选定prometheus+grafana+springcloud(eureka)作为技术框架。
本篇文章主要讲解Grafana的安装及告警配置
由于国内的网络环境,很多资源是无法下载的,本来写了一篇番外,教大家如何下载,结果由于敏感词关系无法发布,有需要的小伙伴可以私信与我联系。
1. Grafana下载及安装
- 下载:从我上传的地址下载即可(免费哦),Grafana-6.2.1.rpm下载
- 安装:
rz
命令上传至服务器后,使用rpm -ivh 文件名
安装即可 - 启动:
systemctl start grafana-server
即可完成启动 - 注意事项:如果启动失败的话,使用
systemctl --failed
可以查看到失败实例列表,想要从失败列表中清除这个实例,请使用systemctl reset-failed grafana-server
2. Grafana配置
- 由于grafana没有完善的配置文件检测机制(不像prometheus有promtool),所以需要时刻关注grafana的日志信息,日志路径
/var/log/grafana
下的grafana.log
- Grafana默认端口号是
3000
,直接访问即可,初始用户名和密码都是admin
- 按照首页给定的路线进行配置即可,在datasource中,选择
prometheus
- 由于涉及到要采集服务器的信息,所以还需要在要采集的节点安装
node_exporter
,我安装的是0.18.1版本
。不清楚的小伙伴可以看这篇文章:centos7安装prometheus和node_exporter。 - 安装好后,使用
file_sd_configs
进行服务发现即可,访问9090的prometheus
端口,可以看到我们的服务器node都被发现了。我这里有5个node,如下图所示
- 配置好node后,就可以在grafana上增加仪表盘了,建议直接使用开发好的导入即可,我这里导入的是id为
9276
的模板。如果想找更多模板,可以直接去grafana的官网查找,我是传送门~
3. 告警配置
告警这里,我选择的是钉钉。网上关于钉钉告警配置的文章有很多,不过这里还是有不少坑点的,我一个一个来说。
- 首先,grafana的告警配置只支持
graph
类型的图,因此,如果你的模板上是如下图所示的非graph
类型数据,直接add panel,把相关查询语句添加进去即可
- 接下来就是配置告警项了,首先,在钉钉里创建一个机器人,并配置自定义关键字(配置完成后在发送的message里一定要加上这个关键字)
- 钉钉中配置好后,在grafana中配置告警项,这里有坑点,请一定注意!!!
- 坑点1:type的选择,一定要选actionCard,选link会无法发送消息,具体可排除日志,目前尚未解决这个问题。
- 坑点2:选好type后,根据钉钉提供的文档,在报错提示中添加了json数据,但是,不要这么写!会报错。直接在message中添加字符串即可,具体如下图.。可以在右侧的
Test Rule
中测试你的告警信息
- 坑点1:type的选择,一定要选actionCard,选link会无法发送消息,具体可排除日志,目前尚未解决这个问题。
- 在Grafana中
Alerting
中send test
,钉钉中接收到的信息中,你会发现出现的链接是无法正确跳转的。接下来,我们要修改grafana.ini
来让跳转生效。
- 执行
systemctl restart grafana-server
,使配置生效,在测试一下,可以看到自己的告警信息啦!
4. Grafana告警的缺陷
Grafana的告警配置不适用于生产环境,因为自身存在不少缺陷而且版本更新中都没有解决。
-
首先,是告警速度慢的问题。以使用钉钉为例,常规适应postman调试时,基本做到同步响应,而使用grafana时,需要先完成内部的转换和请求,响应时间大大加长。
-
不支持表达式中使用变量
$node
,会导致告警配置时提示
官方也一直没有解决这个问题。有开发者提出了一种当前版本下的解决方案,简单的说,就是在配置告警panel时,添加多个服务器ip,同时在告警配置这里,设置多个告警项,如下图所示:
但是这种方法有一个最大的弊端,就是在你配置的告警中,没有办法判断是哪个环境产生的告警,因为任意一条condition被触发就会发送告警通知,因此只能通过跳转链接才能进行判断。
详细问题讨论请移步github上的issue,这是传送门~。不过,由于存在大量无意义的+1 response,因此该问题目前处于locked状态。