在K8S圈子里,Prometheus + grafana的报警圈子已经相当成熟了,开箱即用。不管是通过原生deployment部署,还是通过PrometheusOperator基本做到一键部署。而Grafana不仅监控展示,监控数据收集能力出众,连日志都可以展示(https://github.com/grafana/loki),在消费不起elasticsearch的场景下,这也是不错的planB。当然我们今天手把手系列要介绍的是如何扩展grafana的报警频道。
手把手系列
旨在让有编程基础的同学能够1基础使用,即使刚接触编程,也可以理解文章内容,部分或者全部在工作中使用。
首先我们了解下官方目前支持的channel有多少,官网地址:https://grafana.com/docs/grafana/latest/alerting/notifications/
支持的channel非常丰富,不管是国内的Dingding还是国外的Slack OpsGenie等等主流的企业内部交流平台都支持,甚至还集成了kafka这样的中间件方便自定义报警平台的集成。但是在国内,越来越多的公司使用企业微信作为内部工具,自然想把grafana的报警信息在企业微信上展示,毕竟一个内部交流工具的消息流通性是最高的,那么该如何集成的?我们接着往下看。
下面展示下目前我司用到的企业微信通知格式。
报警格式:
恢复格式:
如何实现?
1. 创建企业微信机器人
首先要确认,企业微信机器人只存在于群组中。
右击群组,选择添加机器人
添加机器人名字及头像
记录下Webhook地址,到此机器人便成功添加了。
注意添加机器人后这里有一个webhook地址非常重要,里面有个key字段,是一个调用企业微信的api token,如果泄露,那该群组又有可能会被攻击者利用,请妥善保管!
2. 添加报警消息体转化服务
该服务本质上是通过接受grafana发送的字段,转换成企业微信机器人能识别的的字段,然后机器人就会把收到的消息发送到设置好的群组。
目前我是用goland实现,主要实现思路如下:
一 定义两个结构体
企业微信参数结构体
grafana消息字段结构体
附上grafana自定义告警中所有字段。
二 解析grafana消息格式并生成企业微信字段
企业微信机器人官方文档:https://work.weixin.qq.com/api/doc/90000/90136/91770
三 组装企业微信格式并发送
由于是手把手系列,本文涉及到的代码我会同步到GitHub上,方便大家0基础使用。GitHub地址:https://github.com/liozzazhang/message-transfer
3. 添加grafana webHook
在第二步中,服务起来后,假设地址为http://127.0.0.1:12345
grafana添加webHook地址为:
http://127.0.0.1:12345/cloopy/grafana?webhook=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx-token
设置完后,大家可以在grafana中设置一条测试告警触发验证。
唯一微信公众号: Seveninfos.