系统工程 - 运维篇


第二章 Zabbix配置钉钉群聊告警机制

  • 系统工程 - 运维篇
  • 系列文章回顾
  • 下章内容
  • 前言
  • 实施步骤
  • Zabbix配置钉钉群聊告警机制
  • 新增监控主机,添加监控项,触发器
  • 导入自定义图标;新增拓扑图并添加图标;添加主机之间的链接关联
  • 新增钉钉告警的报警媒介类型;给用户分配报警媒介类型;新增动作并关联到触发器,触发后操作应用到钉钉告警的消息模板
  • 配置钉钉机器人
  • 编写钉钉告警的Python脚本
  • dingtalk.py
  • 测试Zabbix触发钉钉告警的有效性


前言

测试搭建Zabbix监控平台,配置Zabbix的钉钉告警功能,实现Zabbix监控告警实时推送到钉钉群聊机器人,使用Webhook的形式实现告警。




实施步骤

1. 新增 需要监控的主机 ;在‘Zabbix Server’主机里添加监控项(简单检查)、触发器。
2. 导入自定义图标;新增拓扑图并添加图标;添加主机之间的链接关联。
3. 新增钉钉告警的报警媒介类型;给用户分配报警媒介类型;新增动作并关联到触发器,触发后操作应用到钉钉告警的消息模板。
4. 编写钉钉告警的Python脚本;测试Zabbix触发钉钉告警的有效性。




Zabbix配置钉钉群聊告警机制

新增监控主机,添加监控项,触发器

shell zabbix钉钉告警 zabbix实现钉钉报警_运维

右上角创建主机,设置主机的相应参数

shell zabbix钉钉告警 zabbix实现钉钉报警_shell zabbix钉钉告警_02


shell zabbix钉钉告警 zabbix实现钉钉报警_shell zabbix钉钉告警_03

右上角创建监控项,类型设置 简单检查,键值使用ping丢包检测

shell zabbix钉钉告警 zabbix实现钉钉报警_运维_04


shell zabbix钉钉告警 zabbix实现钉钉报警_zabbix_05




shell zabbix钉钉告警 zabbix实现钉钉报警_触发器_06

右上角创建触发器,表达式从右边 [添加] 选择监控项并加入

shell zabbix钉钉告警 zabbix实现钉钉报警_zabbix_07


shell zabbix钉钉告警 zabbix实现钉钉报警_zabbix_08

结果选择 >= 10 ,即丢包率大于登录10%时就触发

shell zabbix钉钉告警 zabbix实现钉钉报警_服务器_09




导入自定义图标;新增拓扑图并添加图标;添加主机之间的链接关联

shell zabbix钉钉告警 zabbix实现钉钉报警_服务器_10


shell zabbix钉钉告警 zabbix实现钉钉报警_运维_11


右上角创建图标,上传png/jpg/bmp/jpeg/ico等图片


shell zabbix钉钉告警 zabbix实现钉钉报警_服务器_12


右上角创建拓扑图,设置好参数后,编辑拓扑图,添加地图元素,类型选择 主机,主机选择自定义主机,图标选择 自定义图片

(截图略)


Ctrl键连选2个图标,添加链接

shell zabbix钉钉告警 zabbix实现钉钉报警_触发器_13




新增钉钉告警的报警媒介类型;给用户分配报警媒介类型;新增动作并关联到触发器,触发后操作应用到钉钉告警的消息模板

shell zabbix钉钉告警 zabbix实现钉钉报警_运维_14


shell zabbix钉钉告警 zabbix实现钉钉报警_运维_15


shell zabbix钉钉告警 zabbix实现钉钉报警_shell zabbix钉钉告警_16


shell zabbix钉钉告警 zabbix实现钉钉报警_服务器_17


shell zabbix钉钉告警 zabbix实现钉钉报警_服务器_18


shell zabbix钉钉告警 zabbix实现钉钉报警_服务器_19


shell zabbix钉钉告警 zabbix实现钉钉报警_服务器_20


默认标题为:

服务器:{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}
}



操作框的设置为:

shell zabbix钉钉告警 zabbix实现钉钉报警_zabbix_21


shell zabbix钉钉告警 zabbix实现钉钉报警_运维_22


默认标题为:

服务器:{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}
}



操作框的设置为:

shell zabbix钉钉告警 zabbix实现钉钉报警_运维_23




配置钉钉机器人

shell zabbix钉钉告警 zabbix实现钉钉报警_shell zabbix钉钉告警_24


shell zabbix钉钉告警 zabbix实现钉钉报警_zabbix_25




编写钉钉告警的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触发钉钉告警的有效性

(略)