zabbix 釘釘報警

羣機器人是釘釘羣的高級擴展功能,羣機器人能夠將第三方服務的信息聚合到羣聊中,實現自動化的信息同步。例如:經過聚合GitHub,GitLab等源碼管理服務,實現源碼更新同步;經過聚合Trello,JIRA等項目協調服務,實現項目信息同步。不只如此,羣機器人支持Webhook協議的自定義接入,支持更多可能性. 好比咱們可將Zabbix運維報警提醒經過自定義機器人聚合到釘釘羣中,以實現釘釘告警。下面記錄下Zabbix經過釘釘告警的設置過程:python

一. 釘釘機器人建立
登陸釘釘客戶端,建立一個羣,把須要收到報警信息的人員都拉到這個羣內.而後點擊羣右上角的"羣機器人"->"添加機器人"->"自定義",記錄該機器人的webhook值!web

 

 

二. Zabbix設置json

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監控界面設置vim

1) 建立報警媒介.  api

三個參數分別是:bash

{ALERT.SENDTO}      服務器

{ALERT.SUBJECT}      app

{ALERT.MESSAGE}運維

2) 用戶添加報警媒介
收件人是釘釘上的手機號碼.這裏使用Admin管理員用戶,在Admin用戶的"報警媒介"裏添加收件人信息
特別注意:這裏只須要添加釘釘羣裏的任何一個成員的手機號碼便可,即添加一個收件人,這樣在機器人羣裏成員都能看到告警信息.
若是添加多個收件人,則機器人羣裏就會發送多個告警信息,一個收件人發一條信息. post

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日誌,看看告警信息發送狀況:

相關文章
相關標籤/搜索