Zabbix问题告警如何实现处理闭环?
摘 要
本文分享笔者在Zabbix实践过程中,如何利用Zabbix自带的问题确认(ACK)功能,实现告警问题的闭环。从而让系统运维保障团队的问题处理过程,即可实时反馈进度,亦可满足团队的质量管控要求。
一、搭建Zabbix6.2平台
1.1、创建Zabbix专属网络
创建Zabbix组件虚拟子网: Zabbix-Subnet
docker network create --subnet 172.10.0.0/16 --ip-range 172.10.240.0/20 Zabbix-Subnet
1.2、运行Zabbix MySQL容器
选择MySQL8.0作为Zabbix监控数据的存储引擎。
docker run --name Zabbix-MySQL -t \
--restart unless-stopped \
--network=Zabbix-Subnet \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zb-passwd" \
-e MYSQL_ROOT_PASSWORD="zb-passwd" \
-v /etc/localtime:/etc/localtime:ro \
-d mysql:8.0 \
--character-set-server=utf8 \
--collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
1.3、运行Zabbix Server容器
本文使用企业微信群机器人作为告警媒介,为确保容器能正常请求Webhook地址,通过 --add-host
绑定hosts实现强制解析,可根据实际情况配置。
docker run --name Zabbix-Server -t \
--restart unless-stopped \
--network=Zabbix-Subnet \
--hostname="Zabbix-Server" \
-e DB_SERVER_HOST="Zabbix-MySQL" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zb-passwd" \
-e MYSQL_ROOT_PASSWORD="zb-passwd" \
-e ZBX_NODEADDRESS="Zabbix-Server" \
-v /etc/localtime:/etc/localtime:ro \
-p 10051:10051 \
--add-host qyapi.weixin.qq.com:157.148.55.111 \
-d zabbix/zabbix-server-mysql:alpine-6.2-latest
1.4、运行Zabbix Agent2容器
Zabbix Agent2基于Go语言开发,作为Zabbix Agent替代品,它几乎集成了Zabbix Agent原有的所有功能,且易于通过Go插件实现第三方功能。
docker run --name Zabbix-Agent -t \
--restart unless-stopped \
--network=Zabbix-Subnet \
-e ZBX_HOSTNAME="Zabbix server" \
-e ZBX_SERVER_HOST="Zabbix-Server" \
-e ZBX_SERVER_PORT="10051" \
-v /etc/localtime:/etc/localtime:ro \
--privileged \
-d zabbix/zabbix-agent2:alpine-6.2-latest
docker exec -it Zabbix-Server zabbix_get -s Zabbix-Agent -k web.certificate.get[zabbix.com,,104.26.7.148] | python -m json.tool
{
"result": {
"message": "certificate verified successfully",
"value": "valid"
},
"sha1_fingerprint": "8b5889c0a9ecb12a7f4ec1e2c91d70eebb70aa4a",
"sha256_fingerprint": "22a31bd36212fd11bedaba8a3cd66e113710d68c2725b37ebd8c10c2ff49cc56",
"x509": {
"alternative_names": [
"*.zabbix.com",
"zabbix.com",
"sni.cloudflaressl.com"
],
"issuer": "CN=Cloudflare Inc ECC CA-3,O=Cloudflare\\, Inc.,C=US",
"not_after": {
"timestamp": 1685750399,
"value": "Jun 02 23:59:59 2023 GMT"
},
"not_before": {
"timestamp": 1654214400,
"value": "Jun 03 00:00:00 2022 GMT"
},
"public_key_algorithm": "ECDSA",
"serial_number": "014937aa9f28ce4846ddfb7109cbfb0e",
"signature_algorithm": "ECDSA-SHA256",
"subject": "CN=sni.cloudflaressl.com,O=Cloudflare\\, Inc.,L=San Francisco,ST=California,C=US",
"version": 3
}
}
1.5、运行Zabbix Web容器
选择Nginx作为ZabbixWeb前端引擎。
docker run --name Zabbix-Web -t \
--restart unless-stopped \
--network=Zabbix-Subnet \
-e PHP_TZ="Asia/Shanghai" \
-e DB_SERVER_HOST="Zabbix-MySQL" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zb-passwd" \
-e MYSQL_ROOT_PASSWORD="zb-passwd" \
-v /etc/localtime:/etc/localtime:ro \
-p 80:8080 \
-d zabbix/zabbix-web-nginx-mysql:alpine-6.2-latest
1.6、配置Zabbix Agent
►批量创建Zabbix-AgentN容器并正确配置后,稍等片刻再次刷新仪表盘,查看已能正常收集数据。
二、创建Zabbix用户和告警媒介
2.1、添加Zabbix告警用户
系统保障团队
的群组,主机权限视具体情况勾选主机群组、并授予 读
或 读写
,如下图所示:
servicedesk
、appadmin
,"用户名第一部分"分别为:运维服务台(一线)
、应用运维(二线)
。群组均为:系统保障团队
,如下图所示:►切到用户权限页,勾选角色为:User role
,当然这里可视实际情况而定,如下图所示:
2.2、添加企业微信群机器人
复制地址
获取完整WebHook链接。
2.3、创建Webhook告警媒介
try {
var params = JSON.parse(value),
request = new HttpRequest(),
msg = {
msgtype: 'markdown',
markdown: {
content: params.Subject + '\n' + params.Message
}
},
response;
if (params.HTTPProxy) {
request.setProxy(params.HTTPProxy);
}
request.addHeader('Content-Type: application/json');
response = request.post(params.To,JSON.stringify(msg)
);
response = JSON.parse(response);
if (request.getStatus() != 200) {
throw 'Response Status: ' + request.getStatus();
}
if (response.errcode !== 0) {
throw 'Response errcode: ' + response.errcode + '\n' + 'Response errmsg: ' + response.errmsg;
}
return JSON.stringify(response);
}catch (error) {
throw 'Sending failed: ' + error;
}
2.4、测试Webhook告警媒介
测试
。参数说明:
HTTPProxy
HTTP代理:留空Message
消息体输入:"测试内容、测试内容"Subject
标题体输入"# 测试标题"To
发送体输入:企微Webhook机器人完整链接
►点击下方测试,如无例外,在企微专用告警群里,你会收到机器人 小Z
发出的如下消息:
►假若告警媒介出现问题,JS脚本会自动抛出对应异常信息,如下图所示:
Sending failed: Response errcode: 93000 Response errmsg: invalid webhook url, hint: [1670835060365200618705084], from ip: x.x.x.x, more info at https://open.work.weixin.qq.com/devtool/query?e=93000
2.5、配置Zabbix告警动作
告警动作
、告警恢复动作
、告警更新动作
,来实现系统保障团队对告警的闭环处理。Admin(Zabbix Administrator)
、仅送到告警媒介 WXWork_Robot
。
告警动作,即当告警出现时,Zabbix将告警信息发送给哪些用户. 告警恢复动作,即当告警恢复时,Zabbix将告警信息发送给哪些用户。 告警恢复动作,即当告警信息变化时,Zabbix将变化发送给哪些用户。
2.6、配置Zabbix告警消息模板
告警动作->消息模板:问题 告警恢复动作->消息模板:问题恢复 告警更新动作->消息模板:问题更新
三、Zabbix6.2动作之更新操作通知
3.1、触发Zabbix告警消息
cpu_count=`cat /proc/cpuinfo | grep "physical id" | wc -l`;echo "当前节点核心数: ${cpu_count} 个";for i in `seq 1 ${cpu_count}`; do echo -e "--------\n正在拉满核心${i}"; dd if=/dev/zero of=/dev/null & sleep 5; done
当前节点核心数: 2 个
--------
正在拉满核心1
[1] 5802
--------
正在拉满核心2
[2] 5807
top -H
很快就能看到 CPU idel
值已接近或处于0,告警在即。
PS:结束上述命令可以使用 pkill -9 dd
3.2、接收Zabbix告警消息
►在企微专用告警群里,成功接收到告警信息,如下图所示:
3.3、处置Zabbix告警消息
►1)此时在告警群里,已看到一线服务台对Zabbix告警信息做出响应。
►2)当日值班二线或相关服务负责人收到告警后,立即对告警问题进行处置,如解决问题得到解决,对告警信息进行评价。
►3)Zabbix监控继续对问题项进行检索,如满足恢复条件,自动发送告警恢复信息。
►4)一线服务台接收到恢复告警后,确认并记录问题,最终完成整个告警问题的闭环处理。
四、小结
扫一扫|加入技术交流群
微信号|17502189550
备注“使用Zabbix年限+企业+姓名”
5000+用户已加入!