上篇文章提到了钉钉机器人告警的内容,作为国内另外一个广泛应用的企业微信,当然不能缺席,所以趁热打铁,今天继续给大家带来企业微信机器人的告警的内容,下次带来告警内容的优化,和上篇一样,脚本在文末,自行拷贝。
正文
环境
- 系统版本:ubuntu 18.04
- python环境:3.6
- Zabbix版本:5.2.3
提前说明
企业微信的创建自行查找以往教程或者百度,这里不再说明。
创建微信机器人
找到一个群聊,右键该群聊,找到创建机器人




该地址一定要记住
Zabbix脚本部分操作
将脚本里api_url后面引号部分替换即可,如下图

替换url
脚本测试
效果如下图,但有注意的地方:
ubuntu默认自带的python版本为3.6,变量已经在系统里,但是CentOS系统稍微有点区别,7版本自带是python2,而8版本则需要装python2或者3,才有变量生成。
#####CentOS7#####
脚本第一行默认即可
#####CentOS8#####
dnf -y install python3
第一行改为/usr/bin/python3即可

测试正常
脚本存放至相关目录

查询脚本存放目录

Zabbix前端操作
1.告警媒介创建及测试
创建报警媒介类型,脚本名称与系统里的脚本名称一致即可,脚本参数为{ALERT.SENDTO}
{ALERT.SUBJECT},{ALERT.MESSAGE}(其实只需要1和3,subject可以不要,强迫症,谅解)。

添加相关参数(截图中参数错误)

信息模板一定要添加,否则首页会报错

填好信息测试

此处如果出现权限错误,请将脚本改为zabbix用户
创建动作
找到动作选项(如下图1),创建动作,选择条件,这里可以根据自身需求设置,不细展开讲,可以自行研究。

进入操作选项(如下图),操作类型为发送消息,可以选择通知到组,也可以通知到人,最后选择仅送到微信机器人(自定义的媒介名称)

最终效果

3.创建用户媒介权限,用户侧根据脚本定义,如果想通知到某人,需要写用户的ID或者用户的手机号码,这一步不添加会提示用户没有media。

4.模拟故障效果

附录
1.python3脚本通知指定人脚本(如果缺少requests库,就是用pip安装该库)
#!/usr/bin/python3
#_*_coding:utf-8 _*_
import json
import sys
import requests
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url="你的webhook地址"
def msg(text,user):
json_text= {
"msgtype": "text",
"text": {
"content": text,
"mentioned_list": [user]
}
}
print (requests.post(api_url,json.dumps(json_text),headers=headers).content)
if __name__ == '__main__':
text = sys.argv[3]
user = sys.argv[1]
msg(text,user)
2.python3脚本通知所有人脚本(如果去掉@all,就直接发消息)
#!/usr/bin/python3
#_*_coding:utf-8 _*_
import json
import sys
import requests
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url="你的webhook地址"
def msg(text,user):
json_text= {
"msgtype": "text",
"text": {
"content": text,
"mentioned_list": ["@all"]
}
}
print (requests.post(api_url,json.dumps(json_text),headers=headers).content)
if __name__ == '__main__':
text = sys.argv[3]
user = sys.argv[1]
msg(text,user)
3.python2脚本脚本,通知人员修改方式如上
#!/usr/bin/python2
#_*_coding:utf-8 _*_
import json
import sys
import requests
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url="你的webhook地址"
def msg(text,user):
json_text= {
"msgtype": "text",
"text": {
"content": text,
"mentioned_list": ["@all"]
}
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
text = sys.argv[3]
user = sys.argv[1]
msg(text,user)
总结
软件的告警到这里基本就结束了,企业里还有一种情况是机器无法访问外网,采用代理的方式,大家可以参考我之前的一篇文章,在结尾文末查看更多,不想找的朋友也可以找我要,机器人的部分其实还是不难的,难在做告警收敛,下期我会讲告警内容美化的文章,敬请期待!