zabbix如何配置微信报警

zabbix支持多种报警机制,比如:邮件、短信、微信等等。下面就介绍如何使用微信报警。
使用微信报警必须得有企业微信账号,个人微信账号不行。

申请企业微信

注册地址:https://work.weixin.qq.com/
注册企业微信,根据提示填写自己的信息就行,注册完成后会有提示进入管理后台。根据自己需要设置即可。


需要记住的几个信息。
成员账号:添加的成员账号。
组织部门ID:可以在通讯录中部门名称右侧竖着的三个点处查看。
Agentid:企业应用中选中对应的应用点击进去后就可以看到。
Secret:跟Agentid在一起。
CorpID:我的企业里面可以查看。

zabbix配置

修改zabbix-server配置文件,指定报警脚本的位置,我的在/usr/lib/zabbix/alertscripts目录下。

# grep alertscripts /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

脚本配置

安装simplejson

# yum install python-simplejson -y

上传脚本,并根据注释修改成自己的信息。

#!/usr/bin/python
#_*_coding:utf-8 _*_


import urllib,urllib2
import json
import sys
import simplejson

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":"XXX",      #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
        "toparty":"X",            #企业号中的部门id。
        "msgtype":"text",      #消息类型。
        "agentid":"1000005",    #企业号中的应用id。
        "text":{
            "content":subject + '

' + content
           },
        "safe":"0"
        }
#    send_data = json.dumps(send_values, ensure_ascii=False)
    send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
    send_request = urllib2.Request(send_url, send_data)
    response = simplejson.loads(urllib2.urlopen(send_request).read())
    print str(response)


if __name__ == '__main__':
    user = str(sys.argv[1])     #zabbix传过来的第一个参数
    subject = str(sys.argv[2])  #zabbix传过来的第二个参数
    content = str(sys.argv[3])  #zabbix传过来的第三个参数

    corpid =  '1111111111111111'   #CorpID是企业号的标识
    corpsecret = '111111111111111111111111'  #corpsecretSecret是管理组凭证密钥
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)

修改脚本权限:

# cd /usr/lib/zabbix/alertscripts/
# chmod +x wechat.py && chown zabbix:zabbix wechat.py

可以做测试,看看能否发出信息

# python wechat_alert.py test test test
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wwe302dd7e2757ca1c&corpsecret=o5W2pH9Bo4nOtJBi8yNzPeQ2j-T7KypPcRJ8Hu_E0HU
{'invalidparty': '2', 'invaliduser': u'', 'errcode': 0, 'errmsg': 'ok'}


证明能够收到消息。

zabbix web界面配置

创建报警媒介。



Script parameters对应脚本内的三个参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

创建报警用户

可以创建新的用户,也可以使用admin 账户,我是直接使用admin账户的。



sent to对应部门id。

设置报警动作

使用邮件报警动作就行,在此不再过多介绍了。
报警标题:
故障: {TRIGGER.STATUS},服务器: {HOSTNAME1} 发生: {TRIGGER.NAME} 故障!
报警信息:
告警主机: {HOST.NAME}
主机地址: {HOST.IP}
告警时间: {EVENT.DATE} {EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY1}
告警详情: {ITEM.NAME}: {ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件代码: {EVENT.ID}

恢复标题:
恢复: {TRIGGER.STATUS},服务器: {HOSTNAME1} 发生: {TRIGGER.NAME} 恢复!
恢复信息:
恢复主机: {HOST.NAME}
主机地址: {HOST.IP}
恢复时间: {EVENT.DATE} {EVENT.TIME}
恢复等级: {TRIGGER.SEVERITY}
恢复信息: {TRIGGER.NAME}
恢复项目: {TRIGGER.KEY1}
恢复详情: {ITEM.NAME}: {ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件代码: {EVENT.ID}

测试:停止一个服务查看是否能收到报警信息。
在服务器上停止grafana服务查看。

# systemctl stop grafana-server


遇到的问题

web界面Action log显示已成功发送,但是收不到消息,经过查询是wechat_alert.py属主属组不是zabbix,也没有执行权限,修改后能够正常接收信息。

原文地址:https://www.cnblogs.com/ebay/p/8963500.html