您的位置:首页 > 其它

zabbix3.0实现钉钉告警

websocket 2020-07-18 15:14 113 查看 https://blog.51cto.com/crfsz/2

一、申请钉钉账号,登录账号。
二、创建一个告警群组,添加一个自定义机器人

三,监控脚本配置(首先找到alertscripts目录)
在/usr/local/zabbix/share/zabbix/alertscripts目录下面创建脚本,名称为zabbix_dingding.py

脚本的内容如下:
!/usr/bin/env python
coding:utf-8

import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=" #说明:这里改为自己创建的机器人的webhook的值

user=sys.argv[1]
text=sys.argv[3]
data={
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
xxxxxx #指定@某人
],
"isAtAll": False #True @所有人
}
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/tmp/dingding.log"):
f=open("/tmp/dingding.log","a+")
else:
f=open("/tmp/dingding.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()

四、执行测试:
chmod +x zabbix_dingding.py # 加执行权限
python zabbix_dingding.py a b "测试"

五、zabbix配置
zabbix配置告警机制三步骤:添加告警媒介,添加用户,添加动作
(1)配置报警媒介类型:
配置---> 报警媒介类型,脚本参数如下:
名称:zabbix_dingding
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

2)配置动作
配置--->动作--->创建动作,把dingding告警或者邮件告警的“操作”和恢复操作内容拷贝过来即可。
操作:
默认接收人:告警等级:{TRIGGER.SEVERITY} 主机:{HOSTNAME1} {TRIGGER.NAME}

默认信息:
告警主机:{HOSTNAME1}
告警信息:{TRIGGER.NAME}
告警等级:{TRIGGER.SEVERITY}
告警项目:{ITEM.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
当前状态:故障 值={ITEM.VALUE1}
故障已持续{EVENT.AGE},请尽快处理
事件ID:{EVENT.ID}
error ----------》此为钉钉自定义关键词,匹配不到这个是不会发送告警信息

恢复:
默认接收人:告警等级:故障恢复 主机:{HOSTNAME1} {TRIGGER.NAME} 默认信息:告警主机:{HOSTNAME1}

默认信息:
告警主机:{HOSTNAME1}
告警信息:{TRIGGER.NAME}
告警项目:{ITEM.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE}_{EVENT.RECOVERY.TIME}
当前状态:{TRIGGER.STATUS} 值={ITEM.VALUE1}
故障共持续{EVENT.AGE}
事件ID:{EVENT.ID}
error ----------》此为钉钉自定义关键词,匹配不到这个是不会发送告警信息

更新操作:
服务器:{HOST.NAME}: 报警确认

{
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
确认人:{USER.FULLNAME}
时间:{ACK.DATE} {ACK.TIME}
确认信息如下:
"{ACK.MESSAGE}"
问题服务器IP:{HOSTNAME1}
问题ID:{EVENT.ID}
当前的问题是: {TRIGGER.NAME}
}
error ----------》此为钉钉自定义关键词,匹配不到这个是不会发送告警信息

3)最后配置用户
配置--->用户---> 报警媒介,把钉钉加进来即可。 其中收件人要写自己的电话号码。

4)验证zabbix告警输出到钉钉群

邮件告警
1、安装邮件发送工具mailx yum install mailx
2、配置Zabbix服务端外部邮箱,打开文件vim /etc/mail.rc 如果mail.rc文件没有,就手动创建,然后添加如下内容:
set sendcharsets=iso-8859-1,utf-8
set from=xxx@163.com
set smtp=smtp.163.com #163邮箱要开启smtp授权
set smtp-auth-user=xxx@163.com #认证用户
set smtp-auth-password=xxx #认证密码(非登录密码,属单独的授权密码)
3、测试邮件发送
[root@zabbix~]# echo "zabbix test mail" | mail -s "zabbix" xxx@163.com
4、编写发送邮件脚本
#!/bin/bash
message=$3
subject=$2
echo "$message"|mail -s "$subject" $1

5、给脚本添加权限,要不发生告警的时候邮件无法正常发送出去
chmod 755 mail.sh
6、管理-报警媒介类型-创建媒体类型
添加以下3个参数,分别对应sendmail.sh脚本需要的3个参数:收件人地址、主题、详细内容
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
如果在3.0中不添加这三个参数会报错,因为在3.0以后zabbix允许自定义参数了,所以不会默认传递参数,在2.0的时候会默认传递三个参数,所以在3.0如果不写这三个参数会报错
7、给用户添加报警媒介
8、设置告警条件:配置-动作-创建动作
操作:
故障告警:{TRIGGER.STATUS}: {TRIGGER.NAME}
告警主机:{HOST.NAME}
主机地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
事件代码:{EVENT.ID}

解释:默认的步骤是1-1,也即是从1开始到1结束。一旦故障发生,就是执行sendEmail.sh脚本发生报警邮件给Admin用户和zabbix administrator组。假如故障持续了1个小时,它也只发送一次。如果改成1-0,0是表示不限制.无限发送 间隔就是默认持续时间60秒。那么一个小时,就会发送60封邮件。

恢复:
故障解除:{TRIGGER.STATUS}: {TRIGGER.NAME}
恢复主机:{HOST.NAME}
主机地址:{HOST.IP}
恢复时间:{EVENT.DATE} {EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
事件代码:{EVENT.ID}

9、用户设置媒介

9、测试邮件告警
如果发送邮件有问题就重启服务端和zabbix-server 和httpd服务,客户端重启zabbix-agent服务

总结:
新版本新特性,涉及到钉钉机器人的content更新,以及python版本不同导致语法不同 等等细节要注意
多看开发手册
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

https://www.zabbix.com/documentation/3.0/manual/config/notifications/media/script

标签: