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 Web服务器Tornado使用小结
May 06 Python
Python的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
Python温度转换实例分析
Jan 17 Python
python开启摄像头以及深度学习实现目标检测方法
Aug 03 Python
kafka-python批量发送数据的实例
Dec 27 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
使用Python操作ArangoDB的方法步骤
Feb 02 Python
Python单链表原理与实现方法详解
Feb 22 Python
谈谈python垃圾回收机制
Sep 27 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
Python中threading库实现线程锁与释放锁
May 17 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
最贵的咖啡是怎么产生的,它的风味怎么样?
2021/03/04 新手入门
在JavaScript中调用php程序
2009/03/09 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
python中函数传参详解
2016/07/03 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python 爬虫图片简单实现
2017/06/01 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
文员个人求职自荐信
2013/09/21 职场文书
迷你西餐厅创业计划书范文
2013/12/31 职场文书
快递业务员岗位职责
2014/01/06 职场文书
光盘行动倡议书
2014/02/02 职场文书
党员对照检查材料
2014/09/22 职场文书
感谢信范文大全
2015/01/23 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP