shell脚本实现微信告警——WGCLOUD
本文是在linux系统用shell方式实现微信告警,windows系统实现微信告警点击此处
1、首先我们要去注册企业微信了,然后创建一个应用,记得以下图片中的标红信息,企业ID,应用ID,应用Secret
2、新建一个/home/weixin.sh文件,此处目录和文件名称是为测试方便,自己可以根据实际场景自定义,内容如下
#!/bin/bash # -*- coding: utf-8 -*- ###SCRIPT_NAME:weixin.sh### ###send message from weixin for monitoring### ###leo### content=$1 content=${content//\ /} time3=$(date "+%H:%M:%S") content="$time3,$content" #content=${content//\,/\\n} #告警信息若需要换行显示,去掉此行注释 echo "告警信息 : $content" #echo "warn content is : $content" >> ./warn.log CropID='微信企业ID' Secret='微信企业应用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=XXXXX # 企业号中的应用id local UserID='XXXXXXX' # 部门成员id,微信接收者,多个接收者用竖杠|隔开 #local PartyID=$2 # 部门id,定义了范围,组内成员都可接收到消息 local Msg="WGCLOUD告警:$1" Msg=${Msg//\"/} printf '{\n' printf '\t"touser": "'$UserID'",\n' #printf '\t"toparty": "$PartyID",\n' 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' } #body $content curl --data-ascii "$(body $content)" $PURL printf '\n' echo "over!"
部门成员ID查看方式如下图,鼠标放在成员名字上即可看到账号,即是成员ID
3、cli 测试
记得先给weixin.sh添加可执行权限
chmod +x weixin.sh
然后测试下微信能否收到测试消息
/home/weixin.sh 测试
4、测试完成,修改/server/config/application.yml
#告警脚本文件完整路径,注意是完整的路径,可以为空,参考:/server/template/sendMsg.sh warnScript: /home/weixin.sh
注意告警脚本文件需要填写完整的路径
5、好了,重启server,这样就可以在微信收到告警消息了
6、注意windows编辑shell脚本后,上传到linux下执行可能出现\r错误
因为Windows系统中的换行符是**\n\r**,Linux系统中的换行符是**\n**,因此需要将**\r**替换为空白。
运行如下命令即可
sed -i 's/\r$//' /home/weixin.sh
7、关于告警内容没有空格的说明(有空格后内容被截断的情况)
因为微信发送的消息,如果有空格,空格后的内容会截断,导致内容显示不完整显示,因此将空格替换为空,shell脚本中的content=${content//\ /}就是将空格替换为空,
如果想显示空格或解决空格后内容被截断的情况,可以将shell脚本中的content=${content//\ /}这行注释掉,然后修改server/config/application.yml文件中的配置项warnToUnicode改为yes,如下
#是否将告警内容转为unicode,yes是,no否,在windows执行告警脚本时,一般需要转码,否则接受到会是乱码
warnToUnicode: yes
修改完后,重启下server即可