实时警报通知:微信告警通知的重要性解析
8789
2023-01-23
本文讲述了Grafana面板(panel):报警功能(alerts),grafana告警配置。
alerts(报警设置)
注意:grafana的alert和Transform是互斥的,用来一个,另一个就用不了了。且经过调查,发现阈值和alert的设置中,很多地方不支持变量的使用。
grafana报警功能包含以下四个关键组件。
组件 说明
Alerting rule 决定一个报警是否启动的评估标准。它由一个或多个请求和表达式,一个条件,评估频率,以及满足条件的持续时间(可选)组成。
Contact point 当alerting rule的条件被满足时,发送通知的渠道。
Notification policy 匹配或者分组哪些评估标准。用来决定在哪或者多久一次发送通知。
Silences 用于关闭通知的日期和匹配标准。
Create a Grafana managed alerting rule
详见https://grafana.com/docs/grafana/latest/alerting/old-alerting/create-alerts/
grafana允许你创建alerting rules,这些报警规则请求一个或多个数据源,降低或转换结果,然后把它们和给定的阈值比较。当这些被执行时,grafana会方式通知给contact point(发送通知的渠道)。
一个报警规则是一系列评估标准的集合,这些评估标准决定了报警是否会被触发。
Add Grafana managed rule
选中panel的编辑界面(如下图)|Alert|Create Alert
出现如下界面,选项的说明如下:
Rule(规则)
Name:报警规则的名字。可以使用默认值。可以使用变量。
Evaluate every:指明评估的频率。必须是10s的倍数。
For:指明报警触发前,条件为真需要持续的时间。注意:只要一个条件满足了,报警就会进入预备状态(Pending state,查看grafana上的State history可以看到状态),此时并不会立即发送通知(如邮件)。如果条件保持为真的时间达到指定的持续时间,报警会转换为触发状态(Alerting state),此时会发送通知,且状态恢复正常也会发通知;否则,报警会变回正常状态。
注意:可以在grafana的配置文件里面通过修改alerting.min_interval_seconds来设置最小的评估时间间隔。If no data or all values are null设置为No Data时,For不起作用。No Data会立即除法。这也可能导致OK通知不发送,如果警告转换过程为No Data -> Pending -> OK
Conditions
目前唯一支持的条件类型是Query条件,它允许指定一个请求字母(代表某个请求),时间范围和聚合函数。
如下示例
avg() OF query(A, 15m, now) IS BELOW 14
avg(),设置该用哪个函数将一个序列的值减少(转换)为一个值,再用这个值和阈值比较。点击下面的函数名(如last)可以切换聚合函数。
query(A, 15m, now),字母对应的是请求(建立panel时,每个请求前的字母)。后两个参数定义了时间范围:15m, now代表15min前到现在。10m, now-2m代表10分钟前到两分钟前。
IS BELOW 14定义了比较方式和阈值。点击IS BELOW 可以切换比较方法。
说明:报警中的请求不支持变量。多个条件只支持AND和OR运算且是顺序执行。如condition:A(evaluates to: TRUE) OR condition:B(evaluates to: FALSE) AND condition:C(evaluates to: TRUE)计算为 ((TRUE OR FALSE) AND TRUE) = TRUE
Multiple Series(请求包含多个序列)
如果一个请求返回多个序列,则聚合函数和阈值检查将会作用为每个序列评估一次。grafana当前并不追踪每个序列的警告规则状态。例如:
报警条件中的请求返回两个序列server1 和server2。server1序列触发报警,状态转换为Alerting,发送通知;若接下来对同样的报警规则,server1 也
触发了,则不会发送通知,应为状态已经是Alerting。
即若当前报警规则状态为Pending,则其他的序列触发报警并不会通知。
因此,强烈建议一个请求返回一个序列,降低alert设置的复杂度(使用where)。
No Data和Error Handing
无数据选项 说明
No Data 设置报警规则状态为NoData,这会触发通知。
Alerting 设置报警规则状态为Alerting
Keep Last State 保持当前报警规则的状态
Ok 设置报警规则状态为OK
Execution errors or timeouts
错误或超时选项 说明
Alerting 设置报警规则状态为Alerting
Keep Last State 保持当前报警规则的状态
若数据不稳定,建议设置为Keep Last State
Notifications
实际中通知被配置然后在多个报警中共享。详见
选项 说明
Send to 选择一个报警通知渠道(如某个email)
Message 输入一些要发送的信息。一些警告通知支持html或者更多形式。支持模板
Tags 指明一系列tag(键值对),它们会被包含在通知中。只有某些通知支持,参见some notifiers
Alert state history and annotations
警报状态更改记录在 Grafana 数据库的内部注释表中。可以在报警的State history部分看到相关信息或者情况历史状态。
下面是alert配置界面。
alert notifications
报警状态发生改变时,会发送通知。每个报警可以有多个通知。为了给报警增加一个通知,首先要增加一个notification channel(如邮件,pageDuty等)。
增加一个notification channel
在dashboard的左侧栏目上:Alerting(铃状标志)|Notification channels|new channel
详见https://grafana.com/docs/grafana/latest/alerting/old-alerting/notifications/
alert报警邮件中的链接地址错误如何配置
https://stackoverflow.com/questions/41282961/how-to-edit-the-link-in-a-slack-notification-from-grafana
https://blog.csdn.net/west_jing/article/details/112873302
修改[server]部分,以冒号开头的时注释。详见https://en.wikipedia.org/wiki/INI_file
alert产生的报警如何删除?
前往alert|Status history|Clear history|保存刷新dashboard即可清除伯氨基标志(带颜色的竖直虚线)
alert设置注意事项
报警基于某个请求的,而覆写(overwrite设置,如下图)某个measurement(对应一个序列)让它不在图中显示是请求后处理,这个报警是识别不了的,所有覆写的序列也会参与报警评估。因此为了方便报警设置建议:不需要的序列建议请求中用where排除。
本文主要介绍grafana的告警是如何配置的,以及在触发告警时通过邮件和企业微信消息将告警通知给用户,最后介绍了如何在告警内容中添加告警时刻的panel图片。
告警配置
grafana的告警触发以panel为基础,即每个panel单独配置告警信息,包括告警规则、触发条件、告警通知通道及内容,例:
告警通道
grafana官方最新版本7.0.5支持的告警通道 :
使用钉钉的小伙伴还是有福的,可以直接通知到钉钉。
本文主要介绍了笔者在开发中用到的两种:邮件和企业微信
邮件
修改grafana配置文件:
vim /etc/grafana/grafana.ini
#################################### SMTP / Emailing ##########################
[smtp]
# 开启邮件通道
enabled = true
# 配置邮件服务器
host = smtp.exmail.qq.com:25
# 发件用户名和密码
user = xxx@company_a.com
password = ********
from_address = xxx@company_a.com
from_name = company_a
WebUI配置邮件告警通道
点击测试按钮:
测试邮件内容如下:
Webhook
笔者所在公司使用的是企业微信,目前官方版本尚不支持发送告警到企业微信,不过,已经有开发者在github贡献了支持企业微信的代码,感兴趣的可以下载源码后自己编译安装。使用官方版本的话,发送通知到企业微信的需求,只能通过webhook的方式曲线救国。
本文仅以通过webhook将告警消息发送到企业微信为例介绍webhook的使用方式:
主要流程:
grafana监控触发了告警条件,发送告警http请求到nginx。
nginx将请求转发到处理告警信息的http服务
http服务需要自己根据告警需求进行开发,目的是将grafana的告警信息包装成自己需要的格式,按照企业微信机器人接口说明,发送请求到企业微信机器人接口。
调用接口后,机器人就会在企业微信群中发布告警信息(此步骤为自动完成,前提是添加机器人到企业微信群)
在微信群添加机器人
添加好机器人后要记下参数key的值,后面会用到。
开发http服务
网上有人造好了轮子,但并未把告警详细信息(触发告警条件的数据指标)添加到告警内容中,笔者在前人的基础上做了修改,可以直接拿来使用。
下载代码:
git clone https://github.com/imuchen/g2ww.git
安装go语言环境可参考:https://www.runoob.com/go/go-environment.html
根据运行环境进行编译:
在运行机器上进行编译:
go build -o g2ww.linux *.go
在非运行机器上编译时,需要指定运行机器的环境,如:
GOOS=linux GOARCH=amd64 go build -o g2ww.linux *.go
运行:
./g2ww.linux 2>&1 &
Fiber v1.9.0 listening on 127.0.0.1:2408
服务启动成功,监听2408端口。
配置nginx代理
nginx安装部署可参考:https://www.runoob.com/linux/nginx-install-setup.html
修改nginx配置文件,使用80端口转发请求到http服务:
vim /usr/local/webserver/nginx/conf/nginx.conf
server {
listen 80;
server_name sdc7;# nginx域名
location / {
proxy_pass http://127.0.0.1:2408;# http服务ip+port
}
启动nginx,已经启动的话重新加载配置文件:
# 启动nginx
/usr/local/webserver/nginx/sbin/nginx
# 重新加载配置文件
/usr/local/webserver/nginx/sbin/nginx -s reload
在grafana中配置webhook告警通道
Url填写nginx的域名+端口(默认80),其中,红框中部分为企业微信机器人Webhook的key。配置完成后点击下面的测试按钮,配置正常的情况下,在微信群中会收到如下消息:
但是,当grafana真的触发告警时,收到的告警信息却是:
咦?图片哪里去了?
告警内容
告警图片
grafana在告警消息中添加图片的原理是,将告警时刻的panel渲染成一张图片,添加到告警信息中。而告警图片的渲染,并没有包含在grafana主程序中,而是需要单独启动。
安装image_rendering,可参考https://grafana.com/docs/grafana/latest/administration/image_rendering/
建议采用docker的方式启动,比较方便。直接安装的方式对机器环境有很多依赖,坑比较多。
由官网提供的docker-compose.yml文件:
version: '2'
services:
grafana:
image: grafana/grafana:master
ports:
- "3000:3000"
environment:
GF_RENDERING_SERVER_URL: http://renderer:8081/render
GF_RENDERING_CALLBACK_URL: http://grafana:3000/
GF_LOG_FILTERS: rendering:debug
renderer:
image: grafana/grafana-image-renderer:latest
ports:
- 8081
可见,官网介绍的docker启动方式为grafana主服务和image_rendering全部由docker启动,由于我本地已经启动了grafana主服务,所以docker只启动image_rendering。
修改docker-compose.yml文件为:
version: '2'
services:
renderer:
container_name: renderer
image: grafana/grafana-image-renderer:latest
ports:
- 8081:8081
environment:
- GF_RENDERER_PLUGIN_TZ=Asia/Shanghai
- GF_RENDERER_PLUGIN_IGNORE_HTTPS_ERRORS=true
执行命令,启动image_rendering:
docker-compose up -d
查看已启动的docker容器,确认启动成功:
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ec5566fd4a grafana/grafana-image-renderer:latest "dumb-init -- node b…" 24 hours ago Up 24 hours 0.0.0.0:8081->8081/tcp renderer
可见,服务已在配置的8081端口启动成功。
接下来配置grafana中渲染图片的相关配置:
vim /etc/grafana/grafana.ini
[external_image_storage]
# 渲染的图片存放在什么地方,笔者选择了本地
provider = local
[rendering]
# image_rendering服务地址
server_url = http://127.0.0.1:8081/render
修改配置后重启grafana服务:
systemctl restart grafana-server
打开浏览器进行测试:
随便选择一个panel,点击[Share]:
在打开的弹窗中点击[Direct link rendered image]:
顺利的话,你会看到在新的tab中生成了一张图片:
此时,如果grafana再次触发告警后,我们收到的微信消息中将会显示告警时的图片:
上文就是小编为大家整理的Grafana面板(panel):报警功能(alerts),grafana告警配置。
国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)睿象云智能运维平台软件分析、比较及推荐。
发表评论
暂时没有评论,来抢沙发吧~