zabbix监控,实现指定的监控内容,进行钉钉告警推送。

流程:

  • 钉钉机器人获取webhook及zabbix告警字段
  • server上配置钉钉告警脚本
  • 管理项-添加告警媒介,并赋予给用户(用户添加报警媒介“钉钉告警”)
  • 配置项-添加动作(监控项状态通过钉钉发送告警)
  • 测试

第一步,钉钉机器人获取webhook及zabbix告警字段

关于创建钉钉机器人,我前面文章有写,或者自行百度也可以

第二步,server上配置钉钉告警脚本

python脚本,需安装python及requests模块

1
2
3
4
#安装epel源
yum -y install epel-release
#安装python及依赖模块
yum -y install python && yum -y install python-pip && pip install requests

查看zabbix-server脚本路径:

1
grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf

(我的查询:/usr/lib/zabbix/alertscripts)

在此目录下创建钉钉脚本:

1
vi /usr/lib/zabbix/alertscripts/dingding.py

脚本内容如下:

  • 注意:第1行,查看你的python路径是否一致
  • 注意:第5行,改为你的webhook路径
  • 注意:第18行,发消息是@所有人还是只@配置的消息发送人
  • 注意:dingding.log文件,需提前创建!或者改为自己的log路径
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
#!/usr/bin/python
#coding:utf-8
import requests,json,sys,os,datetime
# 机器人的Webhook地址
webhook="你的钉钉webhook"
user=sys.argv[1]
text=sys.argv[3]
data={
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
# 在web端用户绑定媒介中通过指定用户注册是的手机号,可以通知指定人员,否则只发消息,不艾特具体人
user
],
"isAtAll": 1
# 设置为1,则@所有人
# "isAtAll": 1
# 设置为0,则@一个人
# "isAtAll": 0
}
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/var/log/zabbix/dingding.log"):
f=open("/var/log/zabbix/dingding.log","a+")
else:
f=open("/var/log/zabbix/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()

创建dingding.log日志文件

1
2
3
4
#创建dingding.log
touch/var/log/zabbix/dingding.log
#授权给zabbix
chown zabbix:zabbix /var/log/zabbix/dingding.log

测试dingding.py

1
2
3
4
#添加执行权限
chmod +x /usr/lib/zabbix/alertscripts/dingding.py
#测试
/usr/lib/zabbix/alertscripts/dingding.py 《钉钉用户名或手机号》test "《带关键字的消息》"

脚本测试没问题,日志和钉钉都查看到消息,ok。

第三步:管理项-添加告警媒介,并赋予给用户

登录web管理,管理项添加钉钉告警媒介

添加报警媒介类型:

1
2
3
4
5
6
7
8
9
脚本参数:
#对应脚本中的,user=sys.argv[1](发给钉钉群中哪个用户)。
{ALERT.SENDTO}

#代表发送的信息的标题,在"报表"的"动作日志"中可以看到。
{ALERT.SUBJECT}

#对应脚本中的,text=sys.argv[3](发送的报警内容)。
{ALERT.MESSAGE}

添加消息模板:消息模板中加入你钉钉的“关键字”

通过web平台测试:钉钉媒介

用户并赋予钉钉告警媒介权限,选择默认管理员

第四步,配置项-添加动作

添加“操作”

实现效果:监控项发生改变将发送消息给admin赋值的媒介消息。

测试:

我这个教程中,监控项是nginx的存活状态

当监控的主机nginx停止和恢复时,钉钉收到的消息