Zabbix4.2.0使用Python连接企业微信报警
前置条件:
- 搭建Zabbix4.2.0(必须):Yum安装Zabbix4.2.0
- Zabbix4.2.0使用python邮件报警(非必需):Zabbix4.2.0基本配置和邮件报警
- 进入网站注册企业微信(必须):企业微信
1. 配置企业微信
2. 脚本配置
2.1 安装python依赖的库
# 安装pip(python2或3版本都行,这里使用默认的python2进行配置)
[root@server ~]# wget https://bootstrap.pypa.io/get-pip.py
[root@server ~]# python get-pip.py
[root@server ~]# pip install requests
2.2 编写脚本
将这个脚本写入到:vim /usr/lib/zabbix/alertscripts/wechat.py
,并赋予执行权限chmod +x /usr/lib/zabbix/alertscripts/wechat.py
,代码如下:
#! /usr/bin/python
# _*_ coding:utf-8 _*_
"""
Name : Liuhedong
Date : 2019/4/10 19:05
Mail : liuhedong135@163.com
Version : Python 3.7.0
IDE : Pycharm-community-2018.2.4
"""
# 若脚本失效,请联系博主。
import requests
import time
import json
import sys
class Wechat(object):
def __init__(self,overdue, tkpath, tktime, touser, toparty, corpid, corpsecret, agentid, content):
# 消息接收者
self.touser = touser
# 部门ID列表
self.toparty = toparty
# token路径(首先从文件读取token,如果没有就get_token)
self.tkpath = tkpath
# 上次请求Token的时间存放的路径(时间戳)
self.tktime = tktime
# Token过期时间,期间内获取的Token是一样的
self.overdue = overdue
# 当前时间戳
self.nowtime = int(time.time())
# 企业ID
self.corpid = corpid
# 管理组凭证
self.corpsecret = corpsecret
# 自建的程序管理ID
self.agentid = agentid
# 发送的内容
self.content = content
# 请求的AccessToken
self.token = self.read_token()
def read_token(self):
try:
self.token = str(open(self.tkpath,'r+').read()) # 读取token
self.times = int(float(open(self.tktime,"r+").read())) # 读取时间戳(需转换为整型)
self.times = self.nowtime - self.times # 时间差(当前时间-上次时间)
if self.times >= self.overdue: # 如果过期就重新请求Token(超过7200)
self.token = self.get_token() # 调用get_token方法重新获取
return self.token
else:
return self.token # 否则直接返回读取到token
except IOError:
self.token = self.get_token() # 如果读取失败证明没请求过(第一次请求)
return self.token
"""
该read_token方法的逻辑是:
(1)读取token文件和times文件。如果出错代表是第一次运行此脚本(或被误删)
1. 发起新的请求,获取token
2. 最后返回请求到的token
(2)读取token文件和time文件。没有错误就进行时间的相减
1. 企业微信API在7200内请求的token是相同的。
2. 企业微信API在1分钟内限制请求1000次。
3. 将上次发起时间与现在时间相减,如果没有超过7200s就将之前存入的token返回
4. 如果超过7200s则会发起新的请求,重新获取token
5. 最后返回请求到的token
注:在正常情况下,每次发送消息都会发起两次请求,获取token和发送消息到微信,所以此函数减少了获取token的频率。
"""
def get_token(self):
# 获取token的url
url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={}".format(self.corpid,self.corpsecret)
# 发送get请求,并获取返回的内容
token = requests.get(url).text
# 将返回的内容(json)转为python字典格式,并获取token
self.token = json.loads(token)['access_token']
# 将获取到的token写入到本地文件
with open(self.tkpath,'w+') as f:
f.write(str(self.token))
# 将当前时间的时间戳写入文件,以便下次计算过期时间
with open(self.tktime,'w+') as f:
f.write(str(time.time()))
# 最后返回获取到的token
return self.token
def msg_send(self,content):
# 发送消息的url
url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(self.token)
# 要发送的表单(需转换成json格式)
data = {
"touser": "|".join(self.touser),
"toparty": self.toparty,
"msgtype": "text",
"agentid": self.agentid,
"text": {
"content": content
},
"safe": 0
}
# 将python字典转化为json并指定编码utf-8(默认使用ascii编码)python3会出现编码问题,将#.encode('utf-8')的#注释删除掉即可。
data_json = json.dumps(data, ensure_ascii=False)#.encode('utf-8')
# 发送post请求,并发送表单,
response = requests.post(url, data=data_json).text
# 将返回的内容(json)转为python字典格式
ss = json.loads(response)
# 如果返回值不正确就打印发送失败,否则返回请求到的内容
if ss['errcode'] != 0 and ss['errmsg'] != "ok":
return "出现错误..."
else:
return response # 返回请求到的结果
if __name__ == '__main__':
# ======================用户配置信息区域==================================
# token过期时间(过期后发起新的token请求)
overdue = 7200
# token保存的路径(详见read_token方法描述)
tkpath = '/tmp/token'
# 记录token过期时间的路径(详见read_token方法描述)
tktime = '/tmp/tokentime'
# 消息的接收者,"@all"表示向关注该企业应用的全部成员发送,多个用户逗号分隔
# 注意:接收者必须在企业微信自建应用的可见范围内。否则消息接收不到!!!
touser = ("ZongCai","LiuHeDong")
# 部门ID列表,"@all"表示所有部门,多个部门|分隔,例如:1|2|3|4
toparty = 1
# 企业自建应用的ID(在zabbix中配置并传递过来)
agentid = sys.argv[1]
# 企业ID
corpid = "********"
# 自建应用的密钥
corpsecret = "********"
# 要发送的内容
# sys.argv[1]是zabbix传来的应用ID
# sys.argv[2]是zabbix传来的标题
# sys.argv[3]是zabbix传来的内容
# 若想修改为指定内容,修改content变量值即可
content = sys.argv[2] + '\n' + sys.argv[3]
#======================================================================
# 实例化微信类
w = Wechat(
overdue=overdue,
tkpath=tkpath,
tktime=tktime,
touser=touser,
toparty=toparty,
corpid=corpid,
corpsecret=corpsecret,
agentid=agentid,
content=content
)
# 调用微信实例中的发送消息方法
w.msg_send(content)
2. 搭建FTP
# 这里我直接在zabbix服务器安装ftp
[root@server ~]# yum install vsftpd
listen=YES # 修改为YES
listen_ipv6=YES # 删除这一条
[root@server ~]# systemctl start vsftpd
3. 配置Zabbix监控FTP
3.1 添加FTP模板
3.2 添加报警媒介
3.3 配置到用户
3.4 配置动作
# 问题操作的标题:
Problem:{TRIGGER.NAME}
# 恢复操作的标题:
Resolved: {TRIGGER.NAME}
# 消息内容:
Default subject:{TRIGGER.STATUS}: {TRIGGER.NAME}
Trigger host:{HOSTNAME}
Trigger ip:{HOST.IP}
Trigger time:{EVENT.DATE}:{EVENT.TIME}
Trigger: {TRIGGER.NAME}
Trigger status: {TRIGGER.STATUS}
Trigger severity: {TRIGGER.SEVERITY}
Trigger URL: {TRIGGER.URL}
Item values:
{ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
{ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
Original event ID: {EVENT.ID}
4. 模拟故障测试
4.1 停止FTP并查看
[root@server ~]# systemctl stop vsftpd
4.2 恢复FTP并查看
[root@server ~]# systemctl start vsftpd
Zabbix4.2.0使用Python连接企业微信报警的更多相关文章
- Prometheus(五):Prometheus+Alertmanager 配置企业微信报警
此处默认已安装Prometheus服务,服务地址:192.168.56.200 一.设置企业微信 1.1.企业微信注册(已有企业微信账号请跳过) 企业微信注册地址:https://work.weix ...
- Python 发送企业微信消息
1.获取企业微信信息 1)我的企业 --> 企业信息 --> 企业ID 2)创建一个应用,记录该应用的 AgentId.Secret 2.python代码 #!/usr/bin/env p ...
- 使用Python发送企业微信消息
准备工作: 到企业微信官网,注册一个企业:登录企业微信后台,创建一个“自建”应用, 获取企业ID.agentid.secret这3个必要的参数:在企业微信的通讯录中,创建多个测试账号:在手机端安装“企 ...
- 测试wss是否连接企业微信成功
企业微信考勤机有时候无法连接,可以使用下面代码来测试下网络情况 <html> <head> <title>测试wss</title> </hea ...
- Zabbix 3.0 配置企业微信报警(注册---测试)
一.申请企业微信 1.登录企业微信官网,点击企业注册 二.配置企业微信 1.邀请管理员使用企业微信,如果有多个人直接添加新成员 2.管理员收到邀请,下载手机版企业微信,使用微信号登陆即可 3.创建应用 ...
- Python接入企业微信 - 推送信息到内部群里
前言 之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录 其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现. 本 ...
- 配置zabbix通过微信报警企业微信报警
如今势态: 报警的方式可谓是八仙过海各显神通,如电话报警,短信报警,邮件报警,QQ报警,微信报警等等. 电话报警:一般都是使用别的平台的工具,平台给你提供一个接口供你使用,大多数为限量收费款 短信报警 ...
- zabbix企业微信报警实现
企业微信配置 # 注册 企业微信注册地址:https://work.weixin.qq.com 笔者注册的企业微信名称为 5iik # 配置 # 在主干5iik(企业名称)下添加子部门(监控组),并将 ...
- zabbix配置企业微信报警
+++++++++++++++++++++++++++++++++++++++++ 1. 工作中最长使用的就是微信,普及,开源,而且免费!!! 2. 在企业微信中要记录的值: · 部门id · 企业i ...
随机推荐
- Sublime Text3快捷键大全
选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数 ...
- node.js中使用socket.io + express进行实时消息推送
socket.io是一个websocket库,包含客户端的js和服务端的node.js,可以在不同浏览器和移动设备上构建实时应用. 一.安装 socket.io npm install socket. ...
- scrollIntoView()窗口滚动
1.某DIV窗口滚动到顶部: document.getElementById("某DIV的ID").scrollIntoView(true); 2.某DIV窗口滚动到底部: doc ...
- yii框架 隐藏index.php 以及美化URL(pathinfo模式访问)
首先我们分步骤来: 安装好 yii 以后 我们看到的url地址如下所示: http://www.3w.com/MyApp/backend/web/index.php?r=site%2Flogin 我 ...
- small_trick_on_IT/PC
1.浏览器下ctrl+F可实现文本查找 其余还有 2.将软件目录放到环境变量Path下,Ctrl+R输入.exe软件名即可调用. (tips:可把常用软件建立快捷方式,统一放在某一目录下噢!)
- cpp 区块链模拟示例(六) 交易
交易(transaction)是比特币的核心所在,而区块链的唯一目的,也正是为了能够安全可靠地存储交易.在区块链中,交易一旦被创建,就没有任何人能够再去修改或是删除它.在今天的文章中,我们会实现交易的 ...
- python中for循环的三种遍历方式
#!/usr/bin/env python# -*- coding: utf-8 -*-if __name__ == '__main__': list = ['A', 'B', 'C', 'D'] # ...
- Postman入门使用
Postman 是一个很强大的 API调试.Http请求的工具,方便易用,毋庸置疑. 1.Postman安装 a. 打开谷歌浏览器 b. 进入设置界面 c. 选择扩展程序 d. 选择chrome网上应 ...
- 完整的SOPC开发流程体验
课程目标:学习并掌握完整的SOPC开发流程. 开发环境:Quartus15.1 学习内容:1.使用QSYS工具建立能够运行流水灯项目的NIOS II处理器系统 2.在quartus ii中添加NIOS ...
- 18个分形图形的GIF动画演示
这里提供18个几何线段分形的GIF动画图像.图形颜色是白色,背景色为黑色,使用最基本的黑与白以表现分形图形. (1)科赫(Koch)雪花 (2)列维(levy)曲线 (3)龙形曲线(Drago ...