Zabbix 7.0 配置钉钉告警
配置钉钉告警
- 一、添加钉钉告警媒介
- 二、为用户添加创建的钉钉告警
- 三、创建自定义监控项
- 1. 创建自定义监控项
- 2. 创建模板组
- 3. 创建模板加入到模板组
- 4. 将创建的监控项加入到自定义模板
- 5. 将模板链接到主机
- 三、为监控项创建触发器
- 四、配置告警动作
- 五、创建钉钉webhook机器人
- 六、创建钉钉告警脚本
- 七、告警测试
一、添加钉钉告警媒介
添加告警类型如下:
名称:自定义
类型:脚本
脚本名称:dingding-webhook.py(下面会提供)
脚本参数(参数会传递给脚本):
{ALERT.SENDTO}:发送的的地址。
{ALERT.SUBJECT}:发送的主题消息。
{ALERT.MESSAGE}:发送的内容。
添加问题和问题恢复消息模板:
问题:
主题:Problem: {EVENT.NAME}
消息:
-=【告警】=-
告警组:{TRIGGER.HOSTGROUP.NAME}
告警主机:{HOSTNAME1}
告警主机别名:{HOST.NAME}
主机IP:{HOST.IP}
主机描述:{HOST.DESCRIPTION}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
警报类别:{TRIGGER.NAME}
当前状态:{ITEM.LASTVALUE}
告警平台:Zabbix_Server
问题恢复:
主题:Resolved in {EVENT.DURATION}: {EVENT.NAME}
消息:
-=【告警恢复】=-
告警组:{TRIGGER.HOSTGROUP.NAME}
告警主机:{HOSTNAME1}
告警主机别名:{HOST.NAME}
主机IP:{HOST.IP}
主机描述:{HOST.DESCRIPTION}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
警报类别:{TRIGGER.NAME}
当前状态:{ITEM.LASTVALUE}
告警平台:Zabbix_Server
二、为用户添加创建的钉钉告警
为用户添加告警媒介,选择我们刚创建的钉钉告警通知模板:
收件人可以谁便填。
三、创建自定义监控项
1. 创建自定义监控项
/etc/zabbix/zabbix_agent2.d/usercnt.conf
:
UserParameter=usercnt,sed -n '$=' /etc/passwd
测试,需要安装dnf -y install zabbix_get
:
zabbix_get -s 127.0.0.1 -k usercnt
24
2. 创建模板组
3. 创建模板加入到模板组
4. 将创建的监控项加入到自定义模板
自定义名称,键值就是已经创建的监控项:usercnt
5. 将模板链接到主机
在这里插入图片描述
三、为监控项创建触发器
在custom_Templates
模板立马已经创建的自定义监控项,在创建一个基于监控项的触发器。
名称自定义
严重性选择严重(或者自定义)
表达式使用创建的键的值与固定值对比,作为触发条件。
四、配置告警动作
触发告警后,发送消息。
名称自定义
条件自定义,我选的是触发器示警大于告警就触发动作
选择要发送都用户
使用的告警媒体
步骤1-0 表示一直触发动作
持续时间60s,表示每60s发送一次告警
告警恢复:
五、创建钉钉webhook机器人
机器人名称自定义
添加告警关键字,只有包含关键字才会触发告警
点击完成获取webhook地址;https://oapi.dingtalk.com/robot/send?access_token=16e4e5e81b42e2442c22735b1a1199c21541a04314e15d33b7649a72f7eb1444
六、创建钉钉告警脚本
目录固定在/usr/lib/zabbix/alertscripts/,使用创建的webhook替换脚本的webhook地址
/usr/lib/zabbix/alertscripts/dingding-webhook.py
:
#!/usr/bin/env python3
#coding:utf-8
#zabbix钉钉报警
import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=16e4e5e81b42e2442c22735b1a1199c21541a04314e15d33b7649a72f7eb1444"
user=sys.argv[1]
text=sys.argv[3]
data={"msgtype": "text","text": {"content": text},"at": {"atMobiles": [user],"isAtAll": False}
}headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)if os.path.exists("/var/log/zabbix/zabbix_dingtalk.log"):f=open("/var/log/zabbix/dingding_ceshi.log","a+")
else:f=open("/var/log/zabbix/dingding_ceshi.log","w+")
f.write("\n"+"--"*30)if x.json()["errcode"] == 0:f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text))f.close()
else:f.write("\n"+str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + "\n" + str(text))f.close()
七、告警测试
创建1个用户看看,是否会触发告警:
useradd a
可以看出告警正常,且每60s发送一次告警。