zabbix 钉钉报警

群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。例如:通过聚合GitHub,GitLab等源码管理服务,实现源码更新同步;通过聚合Trello,JIRA等项目协调服务,实现项目信息同步。不仅如此,群机器人支持Webhook协议的自定义接入,支持更多可能性. 比如我们可将Zabbix运维报警提醒通过自定义机器人聚合到钉钉群中,以实现钉钉告警。下面记录下Zabbix通过钉钉告警的设置过程:

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

 

二. Zabbix设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
vim /usr/local/zabbix/etc/zabbix_server.conf
 
AlertScriptsPath= /usr/local/zabbix/alertscripts
 
登录到 /usr/local/zabbix/alertscripts 下编写dingding.py脚本(脚本中包含钉钉机器人的webhook值):
cd /usr/local/zabbix/alerscripts/
 
vim dingding.py
 
#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import  requests,json,sys,os,datetime
webhook= "https://oapi.dingtalk.com/robot/send?**********************************************"
user=sys.argv[1]
text=sys.argv[2]
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( "/usr/local/zabbix/logs/dingding.log" ):
     f= open ( "/usr/local/zabbix/logs/dingding.log" , "a+" )
else :
     f= open ( "/usr/local/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()
 
 
创建上面脚本中的日志路径:
 touch /usr/local/zabbix/logs/dingding.log
 chown zabbix:zabbix dingding.py
 chmod 777 dingding.py
 chown zabbix:zabbix /usr/local/zabbix/logs/dingding.log
 
 
手动测试脚本发信是否正常:
这是条文档记录的测试信息,忽略
 ./dingding.py test 13611027803 "这是条测试信息,忽略"         
 
===========================================================
注意:该脚本要求至少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
 
 
解决办法:
 yum -y install python-pip
 pip -v
 pip install requests
 
===========================================================

三. Zabbix监控界面设置

1) 创建报警媒介.  

三个参数分别是:

{ALERT.SENDTO}      

{ALERT.SUBJECT}      

扫描二维码关注公众号,回复: 7756528 查看本文章

{ALERT.MESSAGE}

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

3) 添加动作
动作里的报警信息和恢复信息都发送给Admin用户.

操作:

默认标题:

  服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!

消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
当前状态:{TRIGGER.STATUS}

恢复操作:

默认标题:

  服务器:{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}
  当前的问题是: {TRIGGER.NAME}

 

 

 

 

然后进行测试,比如关闭一台被监控机器的vsftpd服务,过一会儿,查看下钉钉上的报警信息。

还可以查看dingding.log日志,看看告警信息发送情况:

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

 

二. Zabbix设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
vim /usr/local/zabbix/etc/zabbix_server.conf
 
AlertScriptsPath= /usr/local/zabbix/alertscripts
 
登录到 /usr/local/zabbix/alertscripts 下编写dingding.py脚本(脚本中包含钉钉机器人的webhook值):
cd /usr/local/zabbix/alerscripts/
 
vim dingding.py
 
#!/usr/bin/env python
#coding:utf-8
#zabbix钉钉报警
import  requests,json,sys,os,datetime
webhook= "https://oapi.dingtalk.com/robot/send?**********************************************"
user=sys.argv[1]
text=sys.argv[2]
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( "/usr/local/zabbix/logs/dingding.log" ):
     f= open ( "/usr/local/zabbix/logs/dingding.log" , "a+" )
else :
     f= open ( "/usr/local/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()
 
 
创建上面脚本中的日志路径:
 touch /usr/local/zabbix/logs/dingding.log
 chown zabbix:zabbix dingding.py
 chmod 777 dingding.py
 chown zabbix:zabbix /usr/local/zabbix/logs/dingding.log
 
 
手动测试脚本发信是否正常:
这是条文档记录的测试信息,忽略
 ./dingding.py test 13611027803 "这是条测试信息,忽略"         
 
===========================================================
注意:该脚本要求至少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
 
 
解决办法:
 yum -y install python-pip
 pip -v
 pip install requests
 
===========================================================

三. Zabbix监控界面设置

1) 创建报警媒介.  

三个参数分别是:

{ALERT.SENDTO}      

{ALERT.SUBJECT}      

{ALERT.MESSAGE}

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

3) 添加动作
动作里的报警信息和恢复信息都发送给Admin用户.

操作:

默认标题:

  服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!

消息内容:
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
当前状态:{TRIGGER.STATUS}

恢复操作:

默认标题:

  服务器:{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}
  当前的问题是: {TRIGGER.NAME}

 

 

 

 

然后进行测试,比如关闭一台被监控机器的vsftpd服务,过一会儿,查看下钉钉上的报警信息。

还可以查看dingding.log日志,看看告警信息发送情况:

猜你喜欢

转载自www.cnblogs.com/2567xl/p/11794914.html