Zabbix集成于Grafana OnCall
Zabbix是一个开源的监控软件工具,适用于多种IT组件,包括网络、服务器、虚拟机和云服务。Zabbix提供对网络利用率、CPU负载和磁盘空间消耗等指标的监控。
配置Zabbix集成于Grafana OnCall
此集成适用于Grafana Cloud OnCall。您必须在Grafana OnCall中拥有管理员角色才能创建集成。
- 在集成选项卡中,点击+ 新集成以接收警报。
- 从可用集成列表中选择Zabbix。
- 按照如何连接窗口中的说明获取唯一的集成URL并查看下一步操作。
配置Zabbix服务器
如果您尚未设置Zabbix沙盒环境,请部署一个
docker run --name zabbix-appliance -t \ -p 10051:10051 \ -p 80:80 \ -d zabbix/zabbix-appliance:latest
建立到Zabbix服务器的SSH连接。
docker exec -it zabbix-appliance bash
将grafana_oncall.sh脚本放置在Zabbix服务器配置文件(zabbix_server.conf)中指定的
AlertScriptsPath
目录。grep AlertScriptsPath /etc/zabbix/zabbix_server.conf
注意:脚本必须由运行zabbix_server二进制文件(通常是“zabbix”)的用户在Zabbix服务器上可执行。例如,
chmod +x grafana_oncall.sh
ls -lh /usr/lib/zabbix/alertscripts/grafana_oncall.sh -rw-r--r-- 1 root root 1.5K Jun 6 07:52 /usr/lib/zabbix/alertscripts/grafana_oncall.sh
配置Zabbix警报
在Zabbix网页界面中,执行以下操作
在浏览器中打开localhost:80。
转到管理 > 媒体类型 > 创建媒体类型。
创建以下字段的媒体类型。
- 名称:Grafana OnCall
- 类型:脚本
- 脚本参数
- {ALERT.SENDTO}
- {ALERT.SUBJECT}
- {ALERT.MESSAGE}
设置{ALERT.SEND_TO}值
要将警报发送到Grafana OnCall,必须在用户媒体配置中设置{ALERT.SEND_TO}值。
在Web界面中,导航到管理 > 用户并打开用户属性表单。
在媒体选项卡中,点击添加并将Grafana OnCall的链接复制到
发送到
字段。在最后一列点击测试,以将测试警报发送到Grafana OnCall。
在打开的测试窗口中,使用上一步骤中的唯一集成URL指定发送到OnCall。
创建一个带有正文和可选主题的测试消息,然后点击测试。
Zabbix通知的分组和自动解决
Grafana OnCall提供了Zabbix通知的分组和自动解决功能。使用以下步骤来配置分组和自动解决。
为分组区分提供标识符参数给Grafana OnCall。
将此变量附加到操作的标题中,格式为
ONCALL_GROUP: ID
,其中ID
是Zabbix的任何宏。例如,{EVENT.ID}
。Grafana OnCall脚本grafana_oncall.sh提取此事件并将alert_uid
传递给Grafana OnCall。要在Grafana Oncall内启用自动解决,需要在“恢复操作”中的“默认主题”字段中包含“已解决”关键字。
grafana_oncall.sh脚本
#!/bin/bash
# This is the modification of original ericos's shell script.
# Get the url ($1), subject ($2), and message ($3)
url="$1"
subject="${2//$'\r\n'/'\n'}"
message="${3//$'\r\n'/'\n'}"
# Alert state depending on the subject indicating whether it is a trigger going in to problem state or recovering
recoversub='^RECOVER(Y|ED)?$|^OK$|^Resolved.*'
if [[ "$subject" =~ $recoversub ]]; then
state='ok'
else
state='alerting'
fi
payload='{
"title": "'${subject}'",
"state": "'${state}'",
"message": "'${message}'"
}'
# Alert group identifier from the subject of action. Grouping will not work without ONCALL_GROUP in the action subject
regex='ONCALL_GROUP: ([a-zA-Z0-9_\"]*)'
if [[ "$subject" =~ $regex ]]; then
alert_uid=${BASH_REMATCH[1]}
payload='{
"alert_uid": "'${alert_uid}'",
"title": "'${subject}'",
"state": "'${state}'",
"message": "'${message}'"
}'
fi
return=$(curl $url -d "${payload}" -H "Content-Type: application/json" -X POST)
更多信息
有关Zabbix脚本的更多信息,请参阅通知脚本。