zabbix钉钉告警
zabbix使用钉钉告警需要准备脚本:
脚本示例(注意,使用脚本要在脚本同一级目录下创建目录log来存放日志文件):
#! /usr/local/bin/python3
# -*- coding: utf-8 -*-
# @Author : liuguixiang
# @Date : 2022/4/11 14:53
# Software : PyCharm
# version : Python 3.10
# @File : dingtalk.py
import sys
import requests
import json
import datetime
def dingtalk(message_title="null", message_content="null"):
try:
webhook = "https://oapi.dingtalk.com/robot/send?access_token=dsafas"
headers = {'Content-Type': 'application/json'}
data = {
"at": {},
"msgtype": "text",
"text": {
"content": f"{message_title} \n 信息: \n {message_content}\n"
},
}
re = requests.post(url=webhook, data=json.dumps(data), headers=headers)
if re.json()["errcode"] != 0:
with open("./log/dingtalk.log", mode="a") as f:
f.write(
datetime.datetime.now().strftime(
"%Y-%m-%d %H:%M:%S") + " " + "ERROR: " + f"{re.json()['errmsg']} \n")
except Exception as err:
with open("./log/dingtalk.log", mode="a") as file:
file.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + " " + f"脚本错误: {err} \n")
message_title = sys.argv[2]
message_content = sys.argv[3]
dingtalk(message_title, message_content)
脚本放在/usr/lib/zabbix/alertscripts/目录下,zabbix默认查找此目录。
接下来配置zabbix,需要提前创建好监控项和触发器。
-
添加报警媒介类型
-
填写参数,脚本名称必须和在服务器上的脚本名称相同,参数分别表示发送人、标题、内容。
-
用户添加报警媒介
-
填写参数
-
新建动作
-
填写名称和条件,条件可以选择某个具体的触发器,或者报警等级
-
添加操作
-
选择发送人,发送方式、消息内容
主题模板:
故障{TRIGGER.STATUS}, 服务器:{HOST.NAME}发生:{TRIGGER.NAME}故障
消息模板:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
- 添加恢复操作,和上面类似。
主题模板:
服务器:{HOST.NAME}:{TRIGGER.NAME}恢复
消息模板:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}
当前状态:{TRIGGER.STATUS}
- 添加更新操作,同上
主题模板:
标题:服务器:{HOST.NAME}报警确认
消息模板:
确认人:{USER.FULLNAME}
时间:{ACK.DATE} {ACK.TIME}
确认信息如下:"{ACK.MESSAGE}"
问题服务器IP:{HOSTNAME1}
问题ID:{EVENT.ID}
接下来就可以触发警告来发送消息了。