«

Zabbix添加企业微信告警通知

发布于 阅读:56 教程


企业微信部分

登录企业微信后台获取企业ID

在应用管理菜单选择创建应用

创建完成后,可以查看AgentId,Secret 需要登录客户端或者移动客户端查看

获取部门ID

那么自此我们应该得到的有四个信息
corpid
corpsecret
agentid
部门 ID

代码部分

根据上述的部分我们需要修改脚本四个信息

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

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":"修改成您的部门 ID",        
        "msgtype":"text",     
        "agentid":"修改成您的 agentid",  
        "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 =  '修改为你的corpid'     
    corpsecret = '修改成你的corpsecret'
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)

测试脚本

先给执行权限,随后执行脚本查看状态

chmod +x wechat.py
./wechat.py 1 1 1 

Zabbix部分

查询告警脚本目录

默认配置该目录是注释的(如下图),建议将注释取消掉,然后重启 Zabbix Server 服务。

cat /etc/zabbix/zabbix_server.conf | grep AlertScriptsPath

移动脚本到指定目录

mv wechat.py /usr/lib/zabbix/alertscripts

Zabbix 前端部分

创建告警媒介路径为 告警 –> 媒介 –> 创建报警媒介类型

报警媒介配置

首先类型选择脚本,名称自己定义,脚本名称为放入指定目录的脚本名称,一定要对应,脚本参数和 python 里的顺序一一对应,python 里有三个参数 分别是 user <–> {ALERT.SENDTO}, subject <–> {ALERT.SUBJECT},content <–> {ALERT.MESSAGE},后面的宏为固定值。前端的变量与后端脚本有紧密联系,如果 Python 脚本传参部分(sys.argv[])只有两个,就只需要写两个即可。

测试脚本可用性

进入告警媒介类型选项,找到刚刚创建的企业微信小程序,点击测试


当出现下图结果即为正常

模拟告警流程测试

用户部分授权
路径为 用户 –> 用户 –> 点击 Admin 用户 –> 报警媒介 –> 添加
选择类型为刚才创建的告警类型媒介,收件人填写all,启用和告警级别根据自身情况填写。

找到报警媒介,点击添加,类型找到之前告警媒介类型里的企业微信告警通知,收件人all,这步骤不做告警产生的时候会报错,提示无用户定义,告警发送失败

创建动作

路径为 告警 –> 动作 –> 触发器动作 –> 创建动作

故障通知模板

标题:

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

消息:

告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

恢复通知模板

标题:

恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!

消息

告警主机:{HOSTNAME1}
恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

故障更新模板

标题:

服务器:{HOST.NAME}: 报警确认

消息

确认人:{USER.FULLNAME}
时间:{ACK.DATE} {ACK.TIME}
确认信息如下:
"{ACK.MESSAGE}"
问题服务器IP:{HOSTNAME1}
问题ID:{EVENT.ID}
当前的问题是: {TRIGGER.NAME}

zabbix