zabbix报警之企业微信报警

zabbix报警之企业微信报警

前言

zabbix支持多种报警方式  , 我们可以通过书写脚本的方式来调用各种报警应用的api来进行报警通知,本片博文介绍如何让zabbix通过企业微信进行报警

下载企业微信并注册

备注:

这里步骤很简单,网上也有很多例子.我就不贴图了.简单总结下步骤即可.

下载地址:https://qy.weixin.qq.com/ 

1.在电脑上安装企业微信

2.注册账号等相关信息

3.添加部门,并创建应用

最终效果如图所示:


微信脚本

  • 查看脚本所在路径

[root@zabbix alertscripts]# grep alert /etc/zabbix/zabbix_server.conf
# Number of pre-forked instances of alerters.
# Full path to location of custom alert scripts.
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts

  • 在该路径下创建wx.py脚本,内容如下

备注:

这里需要改的值已经用蓝色标记 .

参数说明:

corpid (企业id),和secret(密钥)用来获取access_token 

toparty(部门id) 和agentid(应用id)用来定义脚本发送的目的地


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( “utf-8” )

class WeChat(object):
__token_id = ”
# init attribute
def __init__(self,url):
self.__url = url.rstrip(‘/’)
self.__corpid = ‘ww7007892ada77953c’ #点击我的企业,获取企业id
self.__secret = ‘tNpcluIsYg6vOyXFxVwr-bAWu_vHDV3J-SahIlHnjVQ’ #应用里的secret

# Get TokenID
def authID(self):
params = {‘corpid’:self.__corpid, ‘corpsecret’:self.__secret}
data = urllib.urlencode(params)

content = self.getToken(data)

try:
self.__token_id = content[‘access_token’]
# print content[‘access_token’]
except KeyError:
raise KeyError

# Establish a connection
def getToken(self,data,url_prefix=’/’):
url = self.__url + url_prefix + ‘gettoken?’
try:
response = urllib2.Request(url + data)
except KeyError:
raise KeyError
result = urllib2.urlopen(response)
content = json.loads(result.read())
return content

# Get sendmessage url
def postData(self,data,url_prefix=’/’):
url = self.__url + url_prefix + ‘message/send?access_token=%s’ % self.__token_id
request = urllib2.Request(url,data)
try:
result = urllib2.urlopen(request)
except urllib2.HTTPError as e:
if hasattr(e,’reason’):
print ‘reason’,e.reason
elif hasattr(e,’code’):
print ‘code’,e.code
return 0
else:
content = json.loads(result.read())
result.close()
return content

# send message
def sendMessage(self,touser,message):

self.authID()

data = json.dumps({
‘touser’:touser,
‘toparty’:”2″, #部门id
msgtype’:”text”, #文本类型
‘agentid’:”1000003″, #应用id
‘text’:{
‘content’:message
},
‘safe’:”0″
},ensure_ascii=False)

response = self.postData(data)
print response

if __name__ == ‘__main__’:
a = WeChat(‘https://qyapi.weixin.qq.com/cgi-bin’)
a.sendMessage(sys.argv[1],sys.argv[3])


  • 脚本授权

chmod a+x ./wx.php

chown zabbix:zabbix ./wx.php

  • 手动测试脚本执行

[root@zabbix alertscripts]# ./wx.py 1000003 王庭威 王庭威
{u’invaliduser’: u’1000003′, u’errcode’: 0, u’errmsg’: u’ok’}

备注:

脚本必须需要三个参数

第一个为发送用户,这里就是我们的应用id号

第二个为发送主题

第三个为内容

  • zabbix用户报警媒介配置

一般来说可以直接再创建个报警用户,这里我就还是以admim用户来配置

  • 配置报警媒介

  • 创建动作

{TRIGGER.STATUS}: {TRIGGER.NAME}

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

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

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

  • 测试报警是否成功

修改触发器参数,故意让其报警,这里我修改的是avilable memeory 

  • 分析与总结

1.注册企业微信获取各种id数值(为脚本做准备)

2.书写脚本,把步骤1中的数值在脚本中填写(手动测试脚本发送情况)

3.在zabbix页面配置报警媒介(定义我们脚本名字和脚本的三个参数)

4.配置报警用户的报警媒介(定义收件人)

5.最后配置动作(定义消息模板,发送给admin用户,发送媒介)

  • 故障与排错

如果在手动执行脚本测试的过程中未收到消息?

1.需要检查那四个参数是否配置正确.

如果手动执行脚本可以发消息,但是通过zabbix调用不行?

1.查看脚本权限zabbix普通用户是否可以调用

2.查看脚本位置,是否在zabbix-server定义的报警脚本路径内

3.查看zabbix页面中报警媒介里的收件人是否填写了正确的应用id

4查看动作中发送的用户是否是已经和报警媒介关联的用户.

 

 

 

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Loading...