通过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 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
Python实现删除文件但保留指定文件
Jun 21 Python
python生成随机密码或随机字符串的方法
Jul 03 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
python匹配两个短语之间的字符实例
Dec 25 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
Django框架封装外部函数示例
May 28 Python
python装饰器常见使用方法分析
Jun 26 Python
python 执行终端/控制台命令的例子
Jul 12 Python
Python标准库itertools的使用方法
Jan 17 Python
浅谈Python 中的复数问题
May 19 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实现获取域名的方法小结
2014/11/05 PHP
常用PHP封装分页工具类
2017/01/14 PHP
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
python中map、any、all函数用法分析
2015/04/21 Python
简单解析Django框架中的表单验证
2015/07/17 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
Python tkinter三种布局实例详解
2020/01/06 Python
python实现图像外边界跟踪操作
2020/07/13 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
工业设计专业推荐信
2013/10/29 职场文书
支行行长竞聘报告
2014/11/06 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
致运动员的广播稿
2015/08/19 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android