码迷,mamicode.com
首页 > 其他好文 > 详细

Zabbix报警到钉钉群

时间:2020-09-17 19:52:33      阅读:34      评论:0      收藏:0      [点我收藏+]

标签:--   脚本   odi   gty   subject   info   pts   分享   color   

Zabbix 监控服务端、客户端都已经部署完成,被监控主机已经添加,Zabbix 监控运行正常。那么接下来我们就要考虑如果出现故障的时候报警机制了

选择做为报警的第三方有很多,比如钉钉、邮件、企业微信、QQ群等等...

在Zabbix服务端设置报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报警到指定第三方报警软件

钉钉群机器人是钉钉群的高级扩展功能,钉钉群机器人支持Webhook协议的自定义接入,支持更多可能性. 比如我们可将Zabbix运维报警提醒通过自定义机器人到钉钉群中,以实现钉钉告警

本文就记录一下Zabbix报警到钉钉群的过程:

 

创建钉钉机器人

打开电脑登录钉钉客户端,创建一个zabbix报警群,把需要收到报警信息的人员都拉到这个群内.然后点击群右上角的  群机器人>添加机器人>自定义, 记录该机器人的webhook值!

技术图片

 这是已经添加好的机器人,添加的时候会让你设置图上的 Webhook 保存好就行

 

Zabbix脚本设置

开启zabbix脚本路径:
[root@Mike_Node-1 /application/zabbix/etc]#
[root@Mike_Node-1 /application/zabbix/etc]# cat /application/zabbix/etc/zabbix_server.conf|grep AlertScriptsPath
### Option: AlertScriptsPath
AlertScriptsPath=/application/zabbix/share/zabbix/alertscripts                     ####开启报警脚本路径
[root@Mike_Node-1 /application/zabbix/etc]#
[root@Mike_Node-1 /application/zabbix/etc]#

编写报警python脚本:
[root@Mike_Node-1 /application/zabbix/etc]# 
[root@Mike_Node-1 /application/zabbix/etc]# cd /application/zabbix/share/zabbix/alertscripts/
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# vim dingding.py

#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=566221303300d1eb8c861151"               ###钉钉群机器人webhook
#user=sys.argv[1]
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("/application/zabbix/logs/dingding.log"):
    f=open("/application/zabbix/logs/dingding.log","a+")
else:
    f=open("/application/zabbix/logs/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()


[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]#
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]#

创建脚本日志和赋予权限:
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# touch /application/zabbix/logs/dingding.log  
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# chown zabbix.zabbix /application/zabbix/logs/dingding.log                
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# chown zabbox.zabbix dingding.py && chmod 755 dingding.py
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]#


手动测试脚本发信息是否正常  ## 1854151165 这个是你在钉钉群里联系人的手机号码:
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]#
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# ./dingding.py test 1854151165 "zabbix报警"      
 
===========================================================
注意:该脚本要求至少python2.6.6版本,且具有requests模块.

否则会报错:
Traceback (most recent call last):
  File "./dingding.py", line 4, in <module>
    import requests,json,sys,os,datetime
ImportError: No module named requests


解决办法:
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# yum install python-pip
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# pip -v
[root@Mike_Node-1 /application/zabbix/share/zabbix/alertscripts]# pip install requests 

 

钉钉报警群查看测试通知:

技术图片

如果收到这条信息证明这个脚本已经可以连通到你的钉钉群了,如果还是不通再重头检查一下配置

 

zabbix监控界面设置

1.创建报警媒介

登录到界面然后依次点开  管理>报警媒介类型>创建媒体类型  其他配置如下

技术图片

脚本名称和脚本参数一定不要写错,不然可能会导致触发不了报警

脚本名称:dingding.py

脚本参数:参数 {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}

 

2.添加用户报警媒介

收件人是钉钉上的手机号码.这里使用Admin管理员用户,在Admin用户的"报警媒介"里添加收件人信息 特别注意:这里只需要添加钉钉群里的任何一个成员的手机号码即可,即添加一个收件人,这样在机器人群里成员都能看到告警信息. 如果添加多个收件人,则机器人群里就会发送多个告警信息,一个收件人发一条信息

登录到界面然后依次点开  管理>用户>Admin>报警媒介>添加

技术图片

添加完就好了,收件人这里可以写多个但是一定是在钉钉群里的群员

 

3.创建动作

动作里的报警信息和恢复信息都发送给Admin用户

登录到界面然后依次点开  配置>动作>创建动作

 技术图片

 我这里的条件是选择 阿里云机器 主机群组出现问题才触发,你们可以看情况修改

 

技术图片

技术图片

这是操作和恢复操作的一些格式

#####操作信息
默认接收人:服务器:{HOST.NAME}发生故障
默认信息:
服务器:{HOST.NAME}发生故障!
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE}{EVENT.TIME}
事件ID:{EVENT.ID}


#####恢复操作信息
默认接收人:服务器:{HOST.NAME}已恢复
默认信息:
服务器:{HOST.NAME}已恢复
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE}{EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE}{EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
事件ID:{EVENT.ID}

 

  

4.设置钉钉机器人关键词

因为钉钉关键词一定要设置才可以使用,这里我用到了自定义关键词、里面的关键词和我动作里的操作信息和恢复信息有关联就可以报警了

你也可以使用加签和IP段,看官方文档结合就可以

打开钉钉群>点击机器人>机器人设置>安全设置

技术图片

我这里的关键词都和动作里的操作信息有关联,每次报警都会有~所以才会触发,要是报警信息里没这些关键词钉钉机器人是不会发送到群里的哦~切记 !!!

5.测试报警是否生效

把监控主机的一台服务器上的端口关闭查看是否报警到钉钉群里,我测试的如下:

技术图片

 

6.查看日志

我们也可以在Linux上查看日志到底有没有发送或者脚本执行的结果

[root@Mike_Node-1 /application/zabbix/logs]# 
[root@Mike_Node-1 /application/zabbix/logs]# cat dingding.log

------------------------------------------------------------
2020-09-07 20:03:58.215649    1854151165    发送成功
服务器:测试服务器-51.51.45.884已恢复
告警主机:测试服务器-51.51.45.884
告警地址:51.51.45.884
告警等级:Disaster
当前状态:OK
告警信息:8080端口停止
告警时间:2020.09.07 20:03:25
恢复时间:2020.09.07 20:03:55
持续时间:0m
事件ID:6408 

[root@Mike_Node-1 /application/zabbix/logs]#

 

好了最终钉钉报警已经完成,这样Zabbix出现故障就会报警通知到钉钉群里,相关人员就会第一时间发现,减少生产线上的损失

本文分享完毕,感谢支持点赞~~

 

Zabbix报警到钉钉群

标签:--   脚本   odi   gty   subject   info   pts   分享   color   

原文地址:https://www.cnblogs.com/mike666/p/13639782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!