新时代,新事物,前两年大伙还在想着怎么用短信告警比较合理的时候,这回微信告警已经悄悄进入人们视线,邮件报警就变得落后了,甚至有些大牛公司,微信告警还能做成图形告警,把监控图形也发上去,想当NB的架构.
添加微信告警配置:
微信告警的原理其实是利用微信企业号接口,把告警信息发送到微信企业号发布内容,然后关注这个企业号的微信用户就能收到微信信息了,达到了微信告警的结果.
所以我们要做的事情是:
第一,创建一个微信公众号
第二,写一个调用微信公众号接口的脚本
第三,在zabbix_web配置相关信息
看起来和邮件告警是差不多的,下面来一步步看看
第一步,申请创建一个微信公众号,申请地址如下:
申请要填什么就不说了,关键是下图这个地方,要选择企业号,听说一个身份证能申请两个企业号,各位自己看情况了
然后后面选择团队,其实你能理解字面意思吧,
申请完之后,就登录进去吧,登录需要扫码,关键登录完是有一点记得要做,去设置里面,上传新的logo,原因听说会报错,其实我没试过,不过换一个也没坏,个性一点嘛.
上面的二维码就是这个企业号的二维码了,让收告警的人扫这个二维码来注册吧,不过你手动添加也可以.
虽然企业号创建完成,但是并不代表完事,还要获取接口相关的信息,下面来看.
创建调用接口用的CorpID和Secret:
首先要新增一个成员,因为下一步的新建权限管理不能选择管理员本身,点击<通信录>-<新增成员>填完信息,然后新增的成员还需要在微信上关注企业号来确认,这样就可以了.
创建完之后,还要记下<部门ID>,因为脚本要用,虽然一般来说是递增,但是最起码你要知道在哪里看.
点击<标签>-<新建标签>-把默认的部门添加进去,然后点开它,就看到<部门ID>了,这里是1.
然后返回到<设置>,点中间顶上的<权限管理>-然后下面的<新建>
然后就弹出一个框(这个不贴图了),
<名称>:就随意吧,不会有显示的地方的
<管理员>:就是刚才新增的那个成员,如果你尝试下,就会提示你不能选择管理者,比较操蛋,
<父管理组>:这个不用管了,直接下一步就行了.
然后点击一下你刚才创建的权限管理,我们要的就是红框里面的<CorpID>和<Secret>,默认的<应用权限>是<企业小助手>,可以点击右边的<修改>来查看和添加修改.
然后,还有一个地方要记下来,就是<应用ID>,脚本会用到,
点击<应用中心>-刚才选择的应用权限<企业小助手>,
能看到<应用管理组>就是刚才我们创建的名称,然后记下<应用ID>,这里是0
到这里,企业号和要准备的东西都创建好了,下面来看脚本.
第二步,调用接口的脚本,这里是用的python脚本,如下所示:
首先特别感谢脚本提供者,虽然我也不知道是谁,但是总感觉不说感谢不行.
#先安装一个python运行插件,不然会报错 yum install -y python-simplejson.x86_64 #查看脚本,还记得之前说的存放脚本的位置吗? vim /usr/local/zabbix/share/zabbix/alertscripts/wechat.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":"aaa", #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。 "toparty":"1", #企业号中的部门id。 "msgtype":"text", #消息类型。 "agentid":"0", #企业号中的应用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 = ‘bbb‘ #CorpID是企业号的标识 corpsecret = ‘ccc‘ #corpsecretSecret是管理组凭证密钥 accesstoken = gettoken(corpid,corpsecret) senddata(accesstoken,user,subject,content)
下面来讲解要改什么地方:
#企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
"touser":"aaa",
#企业号中的部门id,刚才是1
"toparty":"1",
#消息类型,这个可以随便。
"msgtype":"text",
#企业号中的应用id,刚才是0。
"agentid":"0",
#CorpID是企业号的标识,也就是上面的CorpID
corpid = ‘bbb‘
#corpsecretSecret是管理组凭证密钥,也就是上面的Secret
corpsecret = ‘ccc‘
配置完然后测试一下
python wechat.py test-m test hi
微信能收到信息就正常了
附赠一个bash shell的脚本,我还没用过,各位有空就自己测试
#!/bin/bash # Functions: send messages to wechat app # set variables #上面的CorpID CropID=‘xxxxxx‘ #上面的Secret Secret=‘xxxxxxxxxxxxxxxxxx‘ GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" #get acccess_token Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" ‘{print $4}‘) PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" # function body() { #企业号中的应用id local int AppID=0 #部门成员id,zabbix中定义的微信接收者 local UserID="aaa" #部门id,定义了范围,组内成员都可接收到消息 local PartyID=1 #过滤出zabbix传递的第三个参数 local Msg=$(echo "$@" | cut -d" " -f3-) printf ‘{\n‘ printf ‘\t"touser": "‘"$UserID"\"",\n" printf ‘\t"toparty": "‘"$PartyID"\"",\n" printf ‘\t"msgtype": "text",\n‘ printf ‘\t"agentid": "‘" $AppID "\"",\n" printf ‘\t"text": {\n‘ printf ‘\t\t"content": "‘"$Msg"\""\n" printf ‘\t},\n‘ printf ‘\t"safe":"0"\n‘ printf ‘}\n‘ } /usr/bin/curl --data-ascii "$(body $! $2 $3)" $PURL #测试 bash wechat.sh test hello.world!
第三步,在zabbix_web创建报警媒介
和创建邮件报警媒介其实是一样的方式,我就用文字粗略说说就算了,
<管理>-<报警媒介类型>-<创建媒体类型>,这个和邮件的设置一样,类型名字和脚本名字改好就可以
<管理>-<用户>-点击用户<admin>-<报警媒介>-<添加>,这里<类型>就选刚创建的那个报警媒介类型,而<收件人>填的是<应用ID>,也就是0,其他一致.
<配置>-<动作>-<创建动作>-<操作>和<恢复操作>,大体和邮件报警的设置一致,就是<仅送到>那里要选择刚才建立的报警媒介类型名字就可以了.
然后,测试一下吧,能收到微信就可以用起来了,其他什么功能,大家慢慢研究.