zabbix企业微信报警实现

企业微信配置

# 注册

企业微信注册地址:https://work.weixin.qq.com

笔者注册的企业微信名称为 5iik

# 配置

# 在主干5iik(企业名称)下添加子部门(监控组),并将自己加入到组中;

# 依次点击 应用管理 > 创建应用,将可见范围选择 "监控组";

# 笔者创建的应用名称为 "监控示警"

# 至此,企业微信配置完毕,需要收集的信息如下:

1)成员账号

2)组织部门ID

3)Agentld和Secret

4)企业ID

zabbix服务端配置

# 安装Python模块

# pip install simplejson

# zabbix server配置

# 默认zabbix调用的脚本目录为 /usr/lib/zabbix/alertscripts

# 配置监控监本

[root@kazihuo ~]# cat /usr/lib/zabbix/alertscripts/wechat.py

  1 #!/usr/bin/python
  2 
  3 #_*_coding:utf-8 _*_
  4 
  5  
  6 
  7 import urllib,urllib2
  8 
  9 import json
 10 
 11 import sys
 12 
 13 import simplejson
 14 
 15  
 16 
 17 reload(sys)
 18 
 19 sys.setdefaultencoding('utf-8')
 20 
 21  
 22 
 23  
 24 
 25 def gettoken(corpid,corpsecret):
 26 
 27 gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
 28 
 29 print gettoken_url
 30 
 31 try:
 32 
 33 token_file = urllib2.urlopen(gettoken_url)
 34 
 35 except urllib2.HTTPError as e:
 36 
 37 print e.code
 38 
 39 print e.read().decode("utf8")
 40 
 41 sys.exit()
 42 
 43 token_data = token_file.read().decode('utf-8')
 44 
 45 token_json = json.loads(token_data)
 46 
 47 token_json.keys()
 48 
 49 token = token_json['access_token']
 50 
 51 return token
 52 
 53  
 54 
 55 def senddata(access_token,user,subject,content):
 56 
 57 send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
 58 
 59 send_values = {
 60 
 61 "touser":"LuoMuRui", #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
 62 
 63 "toparty":"2", #企业号中的部门id。
 64 
 65 "msgtype":"text", #消息类型。
 66 
 67 "agentid":"1000002", #企业号中的应用id。
 68 
 69 "text":{
 70 
 71 "content":subject + '\n' + content
 72 
 73 },
 74 
 75 "safe":"0"
 76 
 77 }
 78 
 79 # send_data = json.dumps(send_values, ensure_ascii=False)
 80 
 81 send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
 82 
 83 send_request = urllib2.Request(send_url, send_data)
 84 
 85 response = json.loads(urllib2.urlopen(send_request).read())
 86 
 87 print str(response)
 88 
 89  
 90 
 91  
 92 
 93 if __name__ == '__main__':
 94 
 95 user = str(sys.argv[1]) #zabbix传过来的第一个参数
 96 
 97 subject = str(sys.argv[2]) #zabbix传过来的第二个参数
 98 
 99 content = str(sys.argv[3]) #zabbix传过来的第三个参数
100 
101  
102 
103 corpid = 'ww15a76b039cce012c' #企业号标识
104 
105 corpsecret = '5aKnj_gPRp6haFmWvly7RxMXy97S8nUEzDTsiQmB9e0' #Secret是管理组凭证密钥
106 
107 accesstoken = gettoken(corpid,corpsecret)
108 
109 senddata(accesstoken,user,subject,content)

# 报警测试

[root@kazihuo ~]# python /usr/lib/zabbix/alertscripts/wechat.py LuoMuRui TEST "It's a test."

https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ww15a76b039cce012c&corpsecret=5aKnj_gPRp6haFmWvly7RxMXy97S8nUEzDTsiQmB9e0

{u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}

# 执行脚本后将收到企业微信发来的消息,如下:

zabbix界面配置

# 报警思路

    先创建微信脚本报警媒介,然后创建报警用户,并关联报警媒介,再创建动作。当监控项的监控指标异常,并达到指定的报警级别后,会触发动作进行相应的操作(给指定的报警用户发送信息),指定用户收到报警信息后,通过报警媒介发出微信告警消息!

# 页面操作

# 创建报警媒介

# 依次点击 Administration > Media types > Create media type;

方便复制:

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

# 创建用户(wc)

# 依次点击 Administrator > User > Create user;

# 配置 Media;

# 创建动作

# 依次点击Configuration > Actions > Create action;

方便复制:

[[ 告警信息 ]]

{TRIGGER.NAME}

告警主机: {HOSTNAME1}

告警时间: {EVENT.DATE} {EVENT.TIME}

告警等级: {TRIGGER.SEVERITY}

告警项目: {TRIGGER.KEY1}

问题详情: {ITEM.NAME}:{ITEM.VALUE}

事件ID: {EVENT.ID}

方便复制:

[[ 恢复信息 ]]

{TRIGGER.NAME}

恢复主机: {HOSTNAME1}

恢复时间: {EVENT.DATE} {EVENT.TIME}

恢复项目: {TRIGGER.KEY1}

事件ID: {EVENT.ID}

告警功能验证

# 在zabbix server服务器上将zabbix_agent服务停掉,几分钟后可在zabbix面板看到故障信息;

[root@kazihuo ~]# systemctl stop zabbix-agent

# 过几分钟后启动agent服务,整个过程收到的微信告警如下:

重点说明

1、当监控告警收件人需要增加时,只需将其微信加入企业微信中对应的 "监控组" 即可;

2、当微信用户登录了企业微信后,企业微信发送的报警信息就只能在企业微信中接收,若需要在微信中也能收到告警信息,需要找企业微信管理员索要"微工作台"的二维码并关注。然后在企业微信app中依次点击 "我" > "设置" > "新消息通知",然后关闭 "仅在企业微信中接收消息"即可!

猜你喜欢

转载自www.cnblogs.com/kazihuo/p/11264292.html