admin
不忘初心,方得始终
级别: 管理员
只看楼主 | | | 0楼 发表于:2017-12-01 11:04

Zabbix使用微信公众号监控服务状态配置

  zabbix可以结合企业微信的方式,及时有效的把告警信息推送到接收人。
  需要注意的是:支持自定义脚本参数的zabbix版本必须3.0及其以上的版本。
  1.https://qy.weixin.qq.com/去申请微信组织类型的公众号。
   2.配置微信公众号。
   通讯录--创建子部门--运维部。
  3.创建微信发送消息的应用:
    微信企业应用--创建应用--选择部门和成员。
  4.准备的信息:
   微信企业公众号 ,微信公众号已经被部门成员关注。企业微信公众号有一个可以发送消息的应用,一个授权管理员,可以使用应用给成员发送消息。
  需要得到的信息:
  成员账号:LuXu
  组织部门ID:2
  应用ID:1000002
  CorpID:ww498028afbec50345
  Secret:8zf-N679AU-aTSV7FwSe9Ih3Tx2XskPlTDoVQKifb9I
  5.修改zabbix的脚本存放位置:
  grep alertscripts /etc/zabbix/zabbix_server.conf
  值为:
  AlertScriptsPath=/usr/lib/zabbix/alertscripts
  6.设置Python脚本:
  安装simplejson:
  #wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
  #tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
  #python setup.py build
  #python setup.py install
  下载wechat.py脚本:
  # yum install git -y
  #git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
  #cp -p Zabbix-Alert-WeChat/wechat.py /usr/lib/zabbix/alertscripts
  #cd /usr/lib/zabbix/alertscripts
  #chmod 755 wechat.py
  #chown zabbix:zabbix wechat.py
  #mv wechat.py weixin.py
  修改weixin.py脚本:
  cat weixin.py:
 #!/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":"LuXu",    #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
        "toparty":"2",    #企业号中的部门id。
        "msgtype":"text", #消息类型。
        "agentid":"1000002",    #企业号中的应用id。
        "text":{
            "content":subject + '\n' + 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 = json.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 = 'ww498028afbec50345'   #CorpID是企业号的标识
    corpsecret = '8zf-N679AU-aTSV7FwSe9Ih3Tx2XskPlTDoVQKifb9I'  #corpsecretSecret是管理组凭证密钥
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)
  7.创建报警媒介:
   管理--报警媒介类型--创建报警媒介类型。
  名称:wechat
  类型:脚本
  脚本名称:wechat.py
  脚本参数:
  {ALERT.SENDTO}
  {ALERT.SUBJECT}
  {ALERT.MESSAGE}
  勾选“已启用”对勾。
  8.添加告警用户:
  管理--用户--创建用户:
  群组:Zabbix Administrators
  报警媒介的类型:wechat   收件人:LuXu   权限:超级管理员。
  勾选“已启用”的对勾。
  9.创建告警的动作:
  配置--动作--创建动作:
  动作名称:weixin告警  触发器条件:无  勾选“已启用”对勾。
  操作:60秒
  默认接收人:故障{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}
操作:步骤1 -3    步骤持续时间:60秒
  发送到用户群组:Zabbix Administrators
  发送到用户:wechat
  10.恢复操作:
  默认接收人:恢复{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}
  更新动作。
  11.测试。
  停掉一个系统中的zabbix agent服务,查看是否企业微信收到服务器的告警信息。