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