系统工程 - 运维篇
第二章 Zabbix配置钉钉群聊告警机制
- 系统工程 - 运维篇
- 系列文章回顾
- 下章内容
- 前言
- 实施步骤
- Zabbix配置钉钉群聊告警机制
- 新增监控主机,添加监控项,触发器
- 导入自定义图标;新增拓扑图并添加图标;添加主机之间的链接关联
- 新增钉钉告警的报警媒介类型;给用户分配报警媒介类型;新增动作并关联到触发器,触发后操作应用到钉钉告警的消息模板
- 配置钉钉机器人
- 编写钉钉告警的Python脚本
- dingtalk.py
- 测试Zabbix触发钉钉告警的有效性
前言
测试搭建Zabbix监控平台,配置Zabbix的钉钉告警功能,实现Zabbix监控告警实时推送到钉钉群聊机器人,使用Webhook的形式实现告警。
实施步骤
1. 新增 需要监控的主机 ;在‘Zabbix Server’主机里添加监控项(简单检查)、触发器。
2. 导入自定义图标;新增拓扑图并添加图标;添加主机之间的链接关联。
3. 新增钉钉告警的报警媒介类型;给用户分配报警媒介类型;新增动作并关联到触发器,触发后操作应用到钉钉告警的消息模板。
4. 编写钉钉告警的Python脚本;测试Zabbix触发钉钉告警的有效性。
Zabbix配置钉钉群聊告警机制
新增监控主机,添加监控项,触发器
右上角创建主机,设置主机的相应参数
右上角创建监控项,类型设置 简单检查,键值使用ping丢包检测
右上角创建触发器,表达式从右边 [添加] 选择监控项
并加入
结果选择 >=
10 ,即丢包率大于登录10%
时就触发
导入自定义图标;新增拓扑图并添加图标;添加主机之间的链接关联
右上角创建图标,上传png/jpg/bmp/jpeg/ico等图片
右上角创建拓扑图,设置好参数后,编辑拓扑图,添加地图元素
,类型选择 主机
,主机选择自定义主机
,图标选择 自定义图片
(截图略)
Ctrl键连选2个图标,添加链接
新增钉钉告警的报警媒介类型;给用户分配报警媒介类型;新增动作并关联到触发器,触发后操作应用到钉钉告警的消息模板
默认标题为:
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
消息内容为:
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
{
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
}
操作框的设置为:
默认标题为:
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
消息内容:
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
{
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
}
操作框的设置为:
配置钉钉机器人
编写钉钉告警的Python脚本
### ssh登录Zabbix,找到zabbix运行目录
whereis zabbix
which zabbix
### 进入zabbix的脚本执行目录
cd /usr/lib/zabbix
cd alertscripts
touch dingtalk.py # 新增dingtalk的告警脚本
chmod +x dingtalk.py # 给脚本添加执行权限
vim dingtalk.py # 编辑脚本内容
Python环境预装
/usr/bin/python3 -m pip install requests DingtalkChatbot urllib3
dingtalk.py
#!/usr/bin/python3
import json
import requests
import sys
import time
import hmac
import hashlib
import base64
import re
from dingtalkchatbot.chatbot import DingtalkChatbot
secret = "xxxxxxxxxxxxxxxx" # 钉钉机器人的加签字段内容
webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxx" # 钉钉机器人的Webhook字段内容
def dd_robot(msg):
dd = DingtalkChatbot(webhook=webhook, secret=secret)
dd.send_text(msg=msg, is_at_all=False, at_mobiles=[])
if __name__ == "__main__":
msg = str(sys.argv[1])
outputmsg = (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) + " 输出:" + msg)
with open("/var/log/zabbix/zabbix_dingtalk.log", "a") as f:
f.write(outputmsg + '\n')
dd_robot(msg)
测试Zabbix触发钉钉告警的有效性
(略)