Python+微信接口实现运维报警


Posted in Python onAugust 27, 2016

说到运维报警,我觉得都可以写个长篇历史来详细解释了报警的前世来生,比如最早报警都是用邮件,但邮件实时性不高,比如下班回家总不能人一直盯着邮箱吧,所以邮件这种报警方式不适合用来报紧急的故障,日常磁盘利用率监控什么的可以用它来报没问题,网站宕机不能访问这种故障,用它就明显不合适了,那对这种业务稳定性要求比较高的业务,后来就发展成了用短信,就是公司买个短信机,提供一个http接口,然后运维人员写脚本把收集到的异常数据写入文件,然后脚本实时检测如果这个文件不为空,就调用短信机接口把文件里的内容发送出去,这种短信的报警方式持续了几年,现在转眼到了移动端时代,随着微信的横空出世,这种短信的方式现在也在慢慢转变了,为啥呢?最简单的1条,因为这玩意有成本,用不是白用的,每月就要交短信费的,如果你说这短信费用能有多少,1条不就1毛吗,但你想想如果机器规模发展到上万台的公司,每台服务器按照按从底层硬件监控、系统层监控、应用层这三个维度去部署监控脚本,这里每项都又分为N个细小项,可想而知每天发的短信数会多么恐怖,当然了这惊人的数据里还有一部分是无效报警,但一样得付钱呀,每月领导批钱的时候都会被报警短信数量所震惊,然后感叹一下就回复了OK,所以说在没有更好的方法前,这种方式有成本但为了业务稳定也必须要投入,但现在微信来了,直接宣布利用我这个平台发消息免费,因为终端还是手机,及时性又没有降低,成本又没有,没有不用的道理,所以这篇咱们就来看看如何调微信接口来实现日常运维消息的报警。

首先,你要去注册一个微信企业号,地址是:https://qy.weixin.qq.com/cgi-bin/loginpage

注册过程如果是为企业使用要选择企业,然后上传企业的资质证明,如果是个人注册,选择团队,然后输入自己的身份证号即可完成注册,其它关键步骤在注册过程中已经提示的很清楚了,比如企业号的名字不能修改等。

注册完进入第二步,在应用中心新建一个应用,例如:运维报警,然后在设置?功能设置?权限管理中点击左边的运维报警应用,在右边会出现CorpID和Secret,这个要记好,脚本中会用到,然后“应用权限“”选择运维报警这个应用,“”通讯录权限“”选择可读,到这里企业号的在平台上的设置完毕,接下来进入代码步骤。

平台上都设置好了,怎么才能发信息呢,这就要使用python去调用发消息的接口了,要给微信企业号发消息,首先要获得一个token,这个是平台提供给的,获得了这个token后才能发消息,所以我们的脚本分2部分,第一要获取token,第二是发消息,代码如下:

#! /usr/bin/env python
 
import requests
import json
 
def get_token():
 
  url='https://qyapi.weixin.qq.com/cgi-bin/gettoken'
  values = {'corpid' : 'your corpid' ,
      'corpsecret':'your corpsecret',
       }
  req = requests.post(url, params=values)  
  data = json.loads(req.text)
  return data["access_token"]
 
def send_msg():
  url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+get_token()
  values = """{"touser" : "1" ,
      "toparty":"1",
      "msgtype":"text",
      "agentid":"1",
      "text":{
        "content": "%s"
      },
      "safe":"0"
      }""" %(str("10.1.1.8 is down"))
  
  data = json.loads(values) 
  req = requests.post(url, values)  
 
if __name__ == '__main__':
  send_msg()

脚本用到了第三方模块requests,  这个模块要比python标准模块urllib,urllib2,更为简洁,可以直接用get(), post(),put(), delete(), head() ,options(),方法对url操作,json模块就是来解析返回的json串,转成python可操作的数据类型,关于如何调用微信发消息这篇就写到这里,欢迎大家留言交流。

Python 相关文章推荐
Python下的Mysql模块MySQLdb安装详解
Apr 09 Python
从零学python系列之从文件读取和保存数据
May 23 Python
用Python写一个无界面的2048小游戏
May 24 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
Python 实现向word(docx)中输出
Feb 13 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
scrapy头部修改的方法详解
Dec 06 Python
python实现获取Ip归属地等信息
Aug 27 #Python
python简单实现获取当前时间
Aug 27 #Python
python使用psutil模块获取系统状态
Aug 27 #Python
Django Highcharts制作图表
Aug 27 #Python
Python连接DB2数据库
Aug 27 #Python
使用python绘制常用的图表
Aug 27 #Python
python实现实时监控文件的方法
Aug 26 #Python
You might like
PHP的FTP学习(四)
2006/10/09 PHP
php curl的深入解析
2013/06/02 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
php生成图片验证码的方法
2016/04/15 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
Node.js中的cluster模块深入解读
2018/06/11 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
详细介绍Python语言中的按位运算符
2013/11/26 Python
Python Tkinter简单布局实例教程
2014/09/03 Python
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
Python与Redis的连接教程
2015/04/22 Python
使用Python绘制图表大全总结
2017/02/11 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
商场消防演习方案
2014/02/12 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
利用Python+OpenCV三步去除水印
2021/05/28 Python
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
Sql Server之数据类型详解
2022/02/28 SQL Server