zabbix5.0企业微信机器人告警 (zabbix如何实现微信机器人报警)

上篇文章提到了钉钉机器人告警的内容,作为国内另外一个广泛应用的企业微信,当然不能缺席,所以趁热打铁,今天继续给大家带来企业微信机器人的告警的内容,下次带来告警内容的优化,和上篇一样,脚本在文末,自行拷贝。

正文

环境

  • 系统版本:ubuntu 18.04
  • python环境:3.6
  • Zabbix版本:5.2.3

提前说明

企业微信的创建自行查找以往教程或者百度,这里不再说明。

创建微信机器人

找到一个群聊,右键该群聊,找到创建机器人

zabbix6.0配置企业微信通知,zabbix智能告警

zabbix6.0配置企业微信通知,zabbix智能告警

zabbix6.0配置企业微信通知,zabbix智能告警

zabbix6.0配置企业微信通知,zabbix智能告警

该地址一定要记住

Zabbix脚本部分操作

将脚本里api_url后面引号部分替换即可,如下图

zabbix6.0配置企业微信通知,zabbix智能告警

替换url

脚本测试

效果如下图,但有注意的地方:

ubuntu默认自带的python版本为3.6,变量已经在系统里,但是CentOS系统稍微有点区别,7版本自带是python2,而8版本则需要装python2或者3,才有变量生成。

#####CentOS7#####
脚本第一行默认即可
#####CentOS8#####
dnf -y install python3
第一行改为/usr/bin/python3即可

zabbix6.0配置企业微信通知,zabbix智能告警

测试正常

脚本存放至相关目录

zabbix6.0配置企业微信通知,zabbix智能告警

查询脚本存放目录

zabbix6.0配置企业微信通知,zabbix智能告警

Zabbix前端操作

1.告警媒介创建及测试

创建报警媒介类型,脚本名称与系统里的脚本名称一致即可,脚本参数为{ALERT.SENDTO}

{ALERT.SUBJECT},{ALERT.MESSAGE}(其实只需要1和3,subject可以不要,强迫症,谅解)。

zabbix6.0配置企业微信通知,zabbix智能告警

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

zabbix6.0配置企业微信通知,zabbix智能告警

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

zabbix6.0配置企业微信通知,zabbix智能告警

填好信息测试

zabbix6.0配置企业微信通知,zabbix智能告警

此处如果出现权限错误,请将脚本改为zabbix用户

创建动作

找到动作选项(如下图1),创建动作,选择条件,这里可以根据自身需求设置,不细展开讲,可以自行研究。

zabbix6.0配置企业微信通知,zabbix智能告警

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

zabbix6.0配置企业微信通知,zabbix智能告警

最终效果

zabbix6.0配置企业微信通知,zabbix智能告警

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

zabbix6.0配置企业微信通知,zabbix智能告警

4.模拟故障效果

zabbix6.0配置企业微信通知,zabbix智能告警

附录

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)

总结

软件的告警到这里基本就结束了,企业里还有一种情况是机器无法访问外网,采用代理的方式,大家可以参考我之前的一篇文章,在结尾文末查看更多,不想找的朋友也可以找我要,机器人的部分其实还是不难的,难在做告警收敛,下期我会讲告警内容美化的文章,敬请期待!