一. 钉钉机器人建立
登陆钉钉客户端,建立一个群,把须要收到报警信息的人员都拉到这个群内.而后点击群右上角的"群机器人"->"添加机器人"->"自定义",记录该机器人的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日志,看看告警信息发送状况: