python&powershell&shell三种方式实现微信报警

运维中大家会碰到异常需要告警时,目前流行方式是微信告警,根据运维精简化需要(不安装不必要应用,一般应用服务器默认安装的脚本语言执行,省去过多安装过程),做了以下三种语言脚本供大家参考:
实现功能:给微信发短信,三个参数,第一个参数为群发(值为1)还是单独发送(值为2);第二个参数为用户ID,如群发,值为组id号,如网上交易组id为2,,如单独发送,值为账号,如道然id为daoran,无大小写区分。
1、python大家最熟悉的语言,跨平台,但需要安装包。
#!/usr/bin/python

-- coding: utf-8 --

import requests
import json
import sys
if sys.getdefaultencoding() != ‘utf-8‘:
reload(sys)
sys.setdefaultencoding(‘utf-8‘)

corpid = "**"
corpsecret = "****"
agentid = 1000002

def getToken():
url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s" % (corpid, corpsecret)
r = requests.get(url)
res = r.json()
return res.get("access_token")

def sendAlert(category, dest, alert):
token = getToken()
url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % token
message = {}

if str(category) == ‘1‘:
    message[‘toparty‘] = str(dest)
elif str(category) == ‘2‘:
    message[‘touser‘] = str(dest)

message[‘msgtype‘] = "text"
message[‘agentid‘] = agentid
text = {‘content‘: alert}
message[‘text‘] = text
message[‘safe‘] = 0
print (message)
payload = json.dumps(message)
r = requests.post(url, data=payload)
print(r.text)

def help():
help = """
此脚本用于发送微信告警,可选择发给某个组或个人
命令格式:wechat_alert.py [类别] [推送对象] [告警消息]
其中,类别参数为1则发送给组, 为2则发送给个人,
推送对象在类别为组时填组ID, 类别为个人时填个人ID
例如:发送告警消息给安全组成员 wechat_alert.py 1 2 "alert test"
"""
print (help)

def main():
if len(sys.argv) < 2:
help()
sys.exit(1)
else:
category = sys.argv[1]
dest = sys.argv[2]
alert = sys.argv[3]
sendAlert(category, dest, alert)

if name == ‘main‘:
main()

以上脚本保存为webchat_alert.py,在windows2012及centos6.9上运行命令python webchat_alert.py 2 liuyousheng “my name is liuyousheng”通过。
2、powershell,默认windows2012已经安装
function send-WeChat {
Param(
[String]$CateGory,
[String]$UserId,
[String]$Content
)

#微信基础参数配置
$corpid="****" #微信企业号的开发者ID
$pwd="**" #微信企业号的开发者密码
$AgentId="1000002" #代理ID

$auth_string = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid&corpsecret=$pwd"
$auth_values = Invoke-RestMethod $auth_string
$token = $auth_values.access_token
$leibie=[Int]$CateGory
$body = "{}"
if ($leibie -eq 1) {
$body="{
"toparty":"$UserId",
"agentid":"$AgentId",
"text":{
"content":"$content"
},
"msgtype":"text",
"safe":"0"
}"
}

elseif ($leibie -eq 2) {
$body="{
"touser":"$UserId",
"agentid":"$AgentId",
"text":{
"content":"$content"
},
"msgtype":"text",
"safe":"0"
}"
}
#$body
$To_CN=[System.Text.Encoding]::UTF8.GetBytes($body)
Invoke-RestMethod "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$token" -ContentType "application/json" -Method Post -Body $To_CN
}

##调用示例1,发给个人
#$CateGory="2" #类别1为组,2为个人
#$UserId="daoran" #用户组ID 当类别未1是,此出为组ID,当类别为2时,为用户名
#$content="my name is daoran" #发送的文本信息
#send-WeChat -CateGory $CateGory -UserId $UserId -Content $content

##调用示例2,发给组员
#$CateGory="1" #类别1为组,2为个人
#$UserId="2" #用户组ID 当类别未1是,此出为组ID,当类别为2时,为用户名
#$content="my name is wsjy" #发送的文本信息
#send-WeChat -CateGory $CateGory -UserId $UserId -Content $content
以上脚本保存为webchat-alert.ps1,在windows2012下测试通过。
3、shell脚本,linux下默默都有。
#!/bin/bash

-- coding: utf-8 --

CropID=‘****
Secret=‘*****
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F \" ‘{print $10}‘)
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
function body() {
local int AppID=1000002 # 企业号中的应用id
local PartyID=$1 # 部门id,定义了范围,组内成员都可接收到消息
local UserID=$2 # 部门成员id,zabbix中定义的微信接收者
local Msg=$3 # 过滤出zabbix中传递的第三个参数
printf ‘{\n‘
if [ $PartyID == ‘1‘ ]
then
printf ‘\t"toparty": "‘$UserID‘",\n‘
elif [ $PartyID == ‘2‘ ]
then
printf ‘\t"touser": "‘$UserID‘",\n‘
else
printf ‘‘
fi
printf ‘\t"msgtype": "text",\n‘
printf ‘\t"agentid": "‘$AppID‘",\n‘
printf ‘\t"text": {\n‘
printf ‘\t\t"content": "‘$Msg‘"\n‘
printf ‘\t},\n‘
printf ‘\t"safe":"0"\n‘
printf ‘}\n‘
}
curl --data-ascii "$(body $1 $2 $3)" $PURL
printf ‘\n‘
echo "over!"
以上脚本保存为webchat-alert.sh,在centos6.9下执行./webchat-alert.sh 2 daoran "my name is daoran"测试通过。

原文地址:https://blog.51cto.com/lysweb/2391238

时间: 2024-10-02 12:54:21

python&powershell&shell三种方式实现微信报警的相关文章

python定时执行任务的三种方式

#!/user/bin/env python # @Time :2018/6/7 16:31 # @Author :PGIDYSQ #@File :PerformTaskTimer.py #定时执行任务命令 #1.定时任务代码 import time,os,sched # schedule = sched.scheduler(time.time,time.sleep) # def perform_command(cmd,inc): # os.system(cmd) # print('task')

(转)Python 遍历List三种方式

转自: http://www.cnblogs.com/pizitai/archive/2017/02/14/6398276.html # 方法1 print '遍历列表方法1:' for i in list: print("序号:%s 值:%s" % (list.index(i) + 1, i)) print '\n遍历列表方法2:' # 方法2 for i in range(len(list)): print("序号:%s 值:%s" % (i + 1, list

python实现堆排序的三种方式

# -*- coding: utf-8 -*- """ Created on Fri May 16 14:57:50 2014 @author: lifeix """ import heapq #堆排序 #第一种实现 def Heapify(a, start, end): left = 0 right = 0 maxv = 0 left = start * 2 right = start * 2 + 1 while left <= end:

启动bash shell的三种方式下,检查的启动文件

启动bash shell的三种方式 1.登录时当做默认登录shell 2.作为非登录shell的交互式shell 3.作为运行脚本的非交互shell 一.登录shell 登录Linux系统时,bash shell会作为登录shell启动,登录shell会从4个不同的启动文件里读取命令,下面是bash shell处理这些文件的次序: 1./etc/profile 2.$HOME/.bash_profile 3.$HOME/.bash_login 4.$HOME/.profile 其中/etc/pr

Shell三种执行方式(简单参数说明)

Shell三种执行方式   (非原创,忘记了是谁的博客叻) 1: . 文件名 1.source命令用法:   source FileName    作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限"     注:该命令通常用命令"."来替代.     如:source bash_profile   . bash_profile两者等效.     source(或点)命令通常用于重新执行刚修改的初始化文档.    

shell脚本只提供整数算术运算(三种方式)—((表达式))、let &quot;表达式&quot;、value=`expr 表达式右边` (转载)

转自:http://blog.163.com/[email protected]/blog/static/132229655201131055455754/ 数值运算: 在bash中只提供了整数运算,一般shell通过let和expr这两个指令来实现. 使用格式为:   let  "x=$x+1"    或者    x=`expr  $x+1` 同时,在shell中,也可以通过((表达式)). 使用格式为:((x=$x+1)) 在上面的三种方式中,运算符还可以是: +.-.*./.% 

python实现单例模式的三种方式及相关知识解释

python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singleton实现的四种方法都是python的重要特征,反过来也刚好是几种特征的最佳实现.(比如你平常开发中很难遇到几个需要写元类的地方)如果不能随手写出某种实现,说明你对于那种实现的概念还没有完全掌握.最近场通过写装饰器模式的singleton来复习装饰器概念. 1. module实现 #模块实现 from

命令行运行Python脚本时传入参数的三种方式

三种常用的方式如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10python script.py -gpus=0,1,2 --batch-size=10python script.py -gpus=0,1,2 --batch_size=10123这三种格式对应不同的参数解析方式,分别为sys.argv, argparse, tf.app.run, 前两者是python自带的功能,后者是ten

python 中增加css样式的三种方式

增加css样式的三种方式: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <!--head中style是第一处写css样式的地方--> 7 <style> 8 .cl{ 9 /*背景色*/ 10 background-color