Zabbix5.0.6(LTS)版本,实现shell脚本发送企业微信报警功能
#!/bin/bash
#duanwt
#zabbix 报警信息发送企业微信脚本
#send_weixin.sh
#脚本逻辑:1. get方法获取access_token
# 2. 判断access_token是否在有效期内(频繁获取会被限制使用)
# 3. 构建JSON数据块
# 4. 根据JSON数据块,用POST方法发送信息到企业微信中的特定联系人
#企业ID(替换为自己的)
CORPID=XXXXXXXX
#应用管理-Secret (替换为自己的)
CORPSECRET=YYYYYYYYYYY
#应用管理-AgentId (替换为自己的)
AgentID=1111
#保存access_token值,用于后续计算有效期
Token_file=/tmp/access_token
#获取系统当前时间
Curren_Time=`date +%s`
#报警信息接收人,zabbix传入
Touser="$1"
#报警信息主题,zabbix传入
Subject="$2"
#报警信息正文内容,zabbix传入
Body="$3"
#获取token 值,并计算是否在有效期内
if [ -f $Token_file ]
then
Extime=`sed -n '4p' $Token_file | awk -F: '{print $2}'`
Time=`sed -n '5p' $Token_file`
Curren_Time=`date +%s`
extimes=`expr $Time + $Extime`
if [ $Curren_Time -gt $extimes ]
then
rm -fr $Token_file
Token_uri="/cgi-bin/gettoken?corpid=$CORPID&corpsecret=$CORPSECRET"
curl -s --get "$Token_uri" | awk -F, '{print $1"\n",$2"\n",$3"\n",$4}' | sed 's/{//g' | sed 's/}//g' | sed 's/^[ \t]*//g' > $Token_file
echo $Curren_Time >> $Token_file
fi
else
Token_uri="/cgi-bin/gettoken?corpid=$CORPID&corpsecret=$CORPSECRET"
curl -s --get "$Token_uri" | awk -F, '{print $1"\n",$2"\n",$3"\n",$4}' | sed 's/{//g' | sed 's/}//g' | sed 's/^[ \t]*//g' > $Token_file
echo $Curren_Time >> $Token_file
fi
#构建json发送正文主体格式
JSON_BODY(){
printf '{\n'
printf '\t"touser": "'"$Touser"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'"$AgentID"\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Subject\n\n$Body"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
Access_Token=`cat $Token_file | sed -n '3p' | awk -F: '{print $2}' | sed 's/"//g'`
POSTURI="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Access_Token"
curl -s -H "Content-Type: application/json" -X POST -d "$(JSON_BODY $1 $2 $3)" $POSTURI