前面发过 Zabbix 5.2.3 实现邮件告警的文章,效果可以,缺点就是通知不具备及时性,今天利用企业微信的通知方式及时告警。不过需要Zabbix server有访问外网的能力,接收端也需要有访问互联网的能力。

当前环境

Zabbix版本为5.2.3,Python版本为3 CentOS 8

脚本内容

python3脚本里根据上面企业微信的操作替换几个地方,分别是toparty、agentid、corpid、corpsecret即可.

#!/usr/bin/python3
#_*_coding:utf-8 _*_
import urllib.request
import json
import sys

#reload(sys)
#sys.setdefaultencoding('utf-8')
def gettoken(corpid,corpsecret):
    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
    print  (gettoken_url)
    try:
        token_file = urllib.request.urlopen(gettoken_url)
    except urllib.error.HTTPError as e:
        print (e.code)
        print (e.read().decode("utf8"))
        sys.exit()
    token_data = token_file.read().decode('utf-8')
    token_json = json.loads(token_data)
    token_json.keys()
    token = token_json['access_token']
    return token

def senddata(access_token,user,subject,content):

    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
    send_values = {
        "touser":"$1",   
        "toparty":"1",        
        "msgtype":"text",     
        "agentid":"1000002",  
        "text":{
            "content":subject + '\n' + content
           },
        "safe":"0"
        }
#    send_data = json.dumps(send_values, ensure_ascii=False)
    send_data = json.dumps(send_values, ensure_ascii=False).encode('utf-8')
    send_request = urllib.request.Request(send_url, send_data)
    response = urllib.request.urlopen(send_request)
    msg = response.read()
    print ("returned value : " + str(msg))


if __name__ == '__main__':
    user = str(sys.argv[1])     
    subject = str(sys.argv[2])  
    content = str(sys.argv[3])  

    corpid =  'ww57e54667a11baae7'     
    corpsecret = 'stq8p8yVFRJRsFe43R44RWaU6ZYs0PuJ-_bYWQDnFzU'
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)

python2脚本内容

#!/usr/bin/python2
#_*_coding:utf-8 _*_
import urllib,urllib2
import json
import sys

reload(sys)
sys.setdefaultencoding('utf-8')
def gettoken(corpid,corpsecret):
    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
    print  gettoken_url
    try:
        token_file = urllib2.urlopen(gettoken_url)
    except urllib2.HTTPError as e:
        print e.code
        print e.read().decode("utf8")
        sys.exit()
    token_data = token_file.read().decode('utf-8')
    token_json = json.loads(token_data)
    token_json.keys()
    token = token_json['access_token']
    return token
def senddata(access_token,user,subject,content):
    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
    send_values = {
        "touser":"$1",   
        "toparty":"12",        
        "msgtype":"text",     
        "agentid":"1000011",  
        "text":{
            "content":subject + '\n' + content
           },
        "safe":"0"
        }
    send_data = json.dumps(send_values, ensure_ascii=False).encode('utf-8')
    send_request = urllib2.Request(send_url, send_data)
    response = json.loads(urllib2.urlopen(send_request).read())
    print str(response)

if __name__ == '__main__':
    user = str(sys.argv[1])     
    subject = str(sys.argv[2])  
    content = str(sys.argv[3])  

    corpid =  '修改成你的corpid'     
    corpsecret = '修改成你的corpsecret'
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)

并将脚本放在AlertScriptsPath目录下并修改权限及所属者。AlertScriptsPath目录可在Zabbix server配置文件里查看(或者通过命令:find / -name alertscripts 查找)。

修改文件所属用于
chown zabbix:zabbix wechat.py
添加执行权限
chmod +x wechat.py

脚本测试

./wechat.py 1 1 1 

企业微信

目前企业微信已经可以开放给个人申请了,进入企业微信官网,只需要完成以下几步即可。

Zabbix 5.2由浅入深系列之微信告警篇
Zabbix 5.2由浅入深系列之微信告警篇 

在应用管理里创建一个应用

Zabbix 5.2由浅入深系列之微信告警篇 

创建应用

Zabbix 5.2由浅入深系列之微信告警篇 

记住agentid和corpsecret

Zabbix 5.2由浅入深系列之微信告警篇

Zabbix Server调用脚本

1.创建告警媒介

Zabbix 5.2由浅入深系列之微信告警篇 

2.填入相关参数,脚本名称一定对应好,包括后缀,传递参数分别为{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE},填好确定即可。

Zabbix 5.2由浅入深系列之微信告警篇

3.测试脚本

Zabbix 5.2由浅入深系列之微信告警篇 

Zabbix 5.2由浅入深系列之微信告警篇

4.创建动作

动作可以针对主机、主机组、触发器等等。

Zabbix 5.2由浅入深系列之微信告警篇 

这里缺少了创建主机首页的图,忽略

Zabbix 5.2由浅入深系列之微信告警篇 

添加告警动作,选择自定义的告警内容

Zabbix 5.2由浅入深系列之微信告警篇 

恢复也是一样的

Zabbix 5.2由浅入深系列之微信告警篇 

更新

Zabbix 5.2由浅入深系列之微信告警篇

5.用户媒介定义

点击进入下图用户

Zabbix 5.2由浅入深系列之微信告警篇 

Zabbix 5.2由浅入深系列之微信告警篇 

媒介选择微信告警,用户随便填写

模拟故障

将监控的交换机的VLAN1进行shutdown操作

Zabbix 5.2由浅入深系列之微信告警篇 

shutdown操作

Zabbix 5.2由浅入深系列之微信告警篇 

告警

Zabbix 5.2由浅入深系列之微信告警篇 

恢复

如何使用微信公众号类型告警

当然有朋友会问,这还得需要手机上安装企业微信,太麻烦了,所以企业微信提供了一个解决方案,就是类似于公众号推送。

1.打开企业微信后台,用手机微信关注下图的二维码

Zabbix 5.2由浅入深系列之微信告警篇 

Zabbix 5.2由浅入深系列之微信告警篇 

Zabbix 5.2由浅入深系列之微信告警篇 

Zabbix 5.2由浅入深系列之微信告警篇 

Zabbix 5.2由浅入深系列之微信告警篇

发表评论

邮箱地址不会被公开。 必填项已用*标注