运维中大家会碰到异常需要告警时,目前流行方式是微信告警,根据运维精简化需要(不安装不必要应用,一般应用服务器默认安装的脚本语言执行,省去过多安装过程),做了以下三种语言脚本供大家参考: 实现功能:给微信发短信,三个参数,第一个参数为群发(值为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"测试通过。