zabbix微信告警HTML,用Python实现Zabbix微信报警

Zabbix是一款开源的基于Web的分布式系统/网络监控平台,能够实时的监控网络,系统状态。具体能够查看设备CPU,内存,网络利用率,系统异常报错等信息。

3d69fbadcd9f7e159b7b1e6387262ab5.png

Zabbix默认能将这些报警信息通过SMTP服务器,发Email通知相应的系统管理员;也可以通过串口连接SMS发射器进行短信通知。但是鉴于管理员可能无法24小时查看邮件和短信太单一以及费用问题,是否能进行其他更有效率的报警方式呢?比如说微信?

答案是肯定的,Zabbix可以在报警时间产生的时候调用Python脚本,只要这个Python脚本能够触发微信API进行信息发送即可,下面是具体实施过程。

首先,微信有3种账号:订阅号、服务号、企业号。但是鉴于前两者有每天发1条和每个月发4条的限制,可行的方案只能是使用企业号,具体三种账号的区别可以看这里。另外企业号有3次,每次30天的试用时间,试用时间都使用完了,才需要付费的。

微信API调用

使用Python调用微信API可以先查阅一下官方文档,主要看“建立连接”和“发送信息”即可。大致的通过自己企业号的CorpID和Secret来换取AccessToken,然后通过AccessToken和发送的内容(JSON)格式来发送信息。

以下是具体的代码(以更改掉敏感信息):

#! /usr/bin/python

# -*- coding:utf-8 -*-

#Created on 2015/07/17

#By Tea Shaw

#This script is to send the system alarm from Zabix monitoring server to Wechat Enterprise Account

import urllib2

import json

import requests

#import sys

def __init__():

corpid = "wxff829ea084f77755"

corpsecret = "JlpYQ5WVMz6HvcQLSCz0sQoRGpDtn_21tiIyBA7dqYBt2lCg7EJ1wL31ieExyiTh"

variable ={}

variable["corpid"] = corpid

variable["corpsecret"] = corpsecret

return variable

def init_text(content):

send_content ={

"touser": "@all",

"toparty": "",

"totag": "",

"msgtype": "text",

"agentid": "9",

"text": {

"content": "Hi Morning"

},

"safe":"0"

}

#content = raw_input("Please input the content you want to send:\n")

#content = "Hello Morning!"

content = content

send_content["text"]["content"] = content

return send_content

def get_access_token():

variable = __init__()

r = requests.get('https://qyapi.weixin.qq.com/cgi-bin/gettoken?', params=variable)

print "Accessing %s" %r.url

return r.json()

if __name__ == "__main__":

text = init_text(sys.argv[3])

#text = init_text()

js = get_access_token()

if "errcode" not in js:

access_token = js["access_token"]

expires_in = js["expires_in"]

else:

print "Can not get the access_token"

print js

quit()

r = requests.post('https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' %access_token,json=text)

result = r.json()

if result["errcode"] == 0:

print "Sent successfully"

else:

print result["errmsg"]

Zabbix服务器设置

在Zabbix服务器设置文件/etc/zabbix/zabbix_server.conf内,更改AlertScriptsPath参数指向存放脚本的路径,默认路径为/usr/lib/zabbix/alertscripts,然后将Python脚本放在这个目录中,并且重启Zabbix服务。

改进

本文的代码仅仅能发送简单的文字报警到微信的企业号中所有的联系人,当然也可以发送相应的图片信息、语音信息,可以做到针对某设备仅发送给某系统管理员,等等。作为邮件报警和短信报警的补充,微信报警可能是一种比较新比较有效的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值