通过shell+python实现企业微信预警


Posted in Python onMarch 07, 2019

一 注册企业微信

本文所有内容是基于2018年12月26日时的企业微信版本所做的教程。后面可能由于企业微信界面规则更改导致部分流程不一致。(大家看文章时请注意这一点)

注册企业微信必备条件

  • 微信号(实名认证了)
  • 手机号

之前我有个误区,就是以为注册企业微信就一定要有营业执照之类的证件才可以注册,实际是不需要也可以的,因为我们直接注册后,即使不绑定企业,我们也是可以正常使用的,未绑定实际企业的,有200人的数的上限(难道你们技术部有200人?不存在的,哈哈!)

注册

注册链接:企业微信

通过shell+python实现企业微信预警

企业名称可以随便填,建议填真实的啊,其他的你就按照实际情况填了。

二 创建消息

创建部门

首先我们需要创建一个部门,然后将成员添加到一个部门里面

通过shell+python实现企业微信预警

邀请成员加入

我们可以在首页点击进行邀请。

通过shell+python实现企业微信预警

也可以在选中要添加的部门后再选右边的添加成员或者微信邀请。

通过shell+python实现企业微信预警

创建应用

通过shell+python实现企业微信预警

创建的时候指定下可以接收的消息的部门

通过shell+python实现企业微信预警

关注微工作平台

在我的企业 ---》 微工作平台 ---》邀请关注

通过shell+python实现企业微信预警

三 实现预警

在完成的上面的所有准备工作后,我们还需要获取三个东西 :

1 企业ID

2 获取应用ID和Secret

获取企业ID

通过shell+python实现企业微信预警

获取应用ID和Secret

通过shell+python实现企业微信预警

通过shell 脚本实现监控预警

该shell 脚本实现的功能: 检测端口是否在监听状态,不在则进行微信预警。

#!/bin/bash
###############
#$Auth= djx
#$Function= monitoring service
#Date= 2018-12-26
###############
# 日志储存文件
log_file='/var/log/ljf_status.log'
# 主机名
hostname=`hostname`
# 监听的端口数组
check_port=("3306" "3329" "4567")
# 数组长度
num=${#check_port[*]}
# 报警消息
msg=""
echo "--------------------------$(date +%F_%T)-----------------" >>$log_file

for i in `seq 0 $num`
do
  netstat -tnlp|grep "${check_port[${i}]}" >>/dev/null
  if [ $? -ne 0 ]
  then
    msg="\\n${hostname}:The Port ${check_port[${i}]} is down \\n"${msg}
    echo "$(date +%F_%T) ${hostname}:The Port ${check_port[${i}]} is down">>$log_file
  fi
done
if [ "${msg}" != "" ]
then
  CropID=""  #填入企业ID值
  Secret=""  #填入认证密码
  GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" 
  # 获取token
  Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}') 
  PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" 
  body='{
  "touser": "@all",
  "msgtype": "text",
  "agentid": "1000002", #要更改为我们的应用ID
  "text":{
     "content":"
  故障:'$msg' "
       },
  "safe":0
  }'
  /usr/bin/curl --data-ascii "$body" $PURL >>$log_file 2>&1
fi

通过python 脚本实现监控预警

由于centos7和centos6 默认安装的都是python2版本,所以下面的脚本是基于python2写的,这样我们就可以直接拿到我们的服务器上使用了。

# -*- coding: utf-8 -*-
# @Time  : 2018/12/27 0021 11:58
# @Author : djx
# @Email  : 1120236774@qq.com
# @File  : 微信预警脚本.py
# @Software: PyCharm
import os
import time
import urllib2
import json


# 企业号ID
wxid = ""
# 应用ID
depid = ""
# 认证密码
secret = ""
# 获取主机的名称
hostname = os.popen("hostname").read()
# 日志储存文件
log_file = '/var/log/ljf_status.log'
# 监听的端口列表
check_port = (
  "8500",
  "3306")
# 发送的消息
msg = ""
# 获取当前的时间
date_time = time.strftime("%Y-%m-%d %X")
# 检查端口是否在监听
for i in check_port:
  shell = "netstat -nutlp |grep \"" + i + "\""
  recv = os.popen(shell).read()
  if recv == "":
    msg = msg + hostname + ": The Port " + i + "is down \n"
# 预警判断
if msg != "":
  url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + \
    wxid + "&corpsecret=" + secret
  request = urllib2.Request(url)
  response = urllib2.urlopen(request)
  recv_info = response.read()
  recv_info = eval(recv_info) 
  wx_token = recv_info['access_token']
  msg_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + wx_token
  send_msg = {
    "touser": "@all",
    "msgtype": "text",
    "agentid": depid,
    "text": {"content": msg},
    "safe": 0
  }
  send_msg_json = json.dumps(send_msg)
  request_post = urllib2.urlopen(msg_url,send_msg_json)
  recv_msg = request_post.read()
  with open(log_file,mode='a') as f:
    f.write(date_time)
    f.write("\n")
    f.write(msg)
    f.write(recv_msg)
    f.write("\n")

上面的脚本也可以应用在zabbix或者是Open-falcon。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
浅谈python多线程和队列管理shell程序
Aug 04 Python
python中的随机函数小结
Jan 27 Python
Python网络编程之TCP套接字简单用法示例
Apr 09 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
Python跑循环时内存泄露的解决方法
Jan 13 Python
django列表筛选功能的实现代码
Mar 27 Python
Django ModelForm操作及验证方式
Mar 30 Python
Python实现转换图片背景颜色代码
Apr 30 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 #Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 #Python
Python二叉树的镜像转换实现方法示例
Mar 06 #Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 #Python
Python中一般处理中文的几种方法
Mar 06 #Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 #Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 #Python
You might like
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
PHP 正则表达式小结
2015/02/12 PHP
PHP基于回溯算法解决n皇后问题的方法示例
2017/11/07 PHP
JavaScript 字符编码规则
2009/05/04 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
pandas.cut具体使用总结
2019/06/24 Python
python调用其他文件函数或类的示例
2019/07/16 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
Python如何对齐字符串
2020/07/30 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
2014年大班元旦活动方案
2014/02/26 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
优秀团员个人总结
2015/02/26 职场文书
关爱空巢老人感想
2015/08/11 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
php去除deprecated的实例方法
2021/11/17 PHP