挨踢茶馆

  • 首页
  • AWS
  • 网络技术
    • 思科语音
    • 路由交换
  • 给我留言
  • 关于我
挨踢茶馆
专注于网络技术、云计算的技术博客
  1. 首页
  2. 运维/管理
  3. 正文

用Python实现Zabbix微信报警

2015 年 10 月 22 日 19899点热度 0人点赞 0条评论

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

zabbix-display

  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服务。

  剩下的具体操作可以参照这篇文章http://www.sxt.cn/u/756/blog/3197

改进

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

标签: python zabbix 微信 报警
最后更新:2015 年 10 月 22 日

挨踢小茶

网络工程师/云计算架构师/云步道师/摄影爱好者

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

挨踢小茶

网络工程师/云计算架构师/云步道师/摄影爱好者

最新 热点 随机
最新 热点 随机
Web3 Social 2023 @深圳 AIGC Prompt 的艺术和模型调优 UWA Day 2022 - 如何通过云计算构架高性能、高可靠、智能化的游戏 一文看懂 Amazon EKS 中的网络规划 利用 Direct Connect Gateway 和 Transit Gateway 打造跨国企业网络环境 SD-WAN 和专线混合组网中的高可用设计 为了加速Wordpress网站我踩过了哪些坑?含泪告诉你 利用 SD-WAN 和专线混合组网,加速境内外企业 IDC 和多云数据中心 运行7年之后博客更新主题 立业不读架构书,阅尽诗书也枉然
使用树莓派(Raspberry Pi)实现智能家居(2/4) 概念性透明移动搜索设备 Chrome15成为了世界上最流行的浏览器(以版本计算) [译]如何优化Hyper-V动态迁移 网络嗅探工具Wireshark(Ethereal)1.6.5 亚马逊云AWS搭建多站点的Cisco DMVPN架构 独立磁盘冗余数组 保护Wifi安全 如何在Windows 7上取消IPv6 自学Python
链接表
  • FROYO's Blog
  • Pop's blog
  • TC的博客
  • 今天毕业
  • 挨踢茶馆在线教程
  • 月与灯依旧
  • 月小升博客
  • 泪雪博客
  • 海纳百川
  • 筑楼
  • 网络茶馆
  • 蓝卡
  • 郑晓个人博客
  • 陆鉴鑫的博客

COPYRIGHT © 2012-2023

Theme Kratos Made By Seaton Jiang

粤ICP备12007665号-1