Linux | Zabbix 配置企业微信告警(脚本)

本文主要写脚本编写方面,企业微信配置过程可查看zabbix 4.0配置微信报警

因为企业微信应用获取的token有效期是7200秒,但官方文档里说有可能提前失效所以要保证token有效就设置了一个30分钟定时获取,其实可以在最终脚本直接编写token的获取,每次发生告警时才获取token,但如果告警太多就会发生短时间内重复获取token的情况,怕被封了,所以弄了一个定时版的

各个文件作用说明

getTOKEN.sh 获取accessTOKEN并生成最终执行文件
send.txt 固定模板
wechat.sh Zabbix最终执行脚本

配置定时获取accessToken

crontab -e

# 每30分钟获取一次accessTOKEN
*/30 * * * * /usr/lib/zabbix/alertscripts/getTOKEN.sh

获取accessTOKEN脚本

vim /usr/lib/zabbix/alertscripts/getTOKEN.sh

#!/bin/bash
CropID='xxxxxx' #企业微信号ID
Secret='xxxxxx' #应用密钥
GETURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
access_token=$(/usr/bin/curl -s -G $GETURL |awk -F\": '{print $4}'|awk -F\" '{print $2}')
# 将解释器写到第一行
echo -e '#!/bin/bash' > /usr/lib/zabbix/alertscripts/wechat.sh
# 获取到的token写到第二行并赋值给一个变量
echo "access_token=$access_token" >> /usr/lib/zabbix/alertscripts/wechat.sh
# 最后把格式模板写到后面
/usr/bin/cat /usr/lib/zabbix/alertscripts/send.txt >> /usr/lib/zabbix/alertscripts/wechat.sh

格式模板

vim /usr/lib/zabbix/alertscripts/send.txt

POSTURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$access_token"
UserID=$1 #用户ID
PartyID=2 #部门ID
agentid=1000002 #应用ID
#Msg=`echo "$@" | cut -f 3`
if [ `whoami` != 'root' ];then #root测试脚本时不传参数
        echo -e "$1\n$2\n$3" > /tmp/content.txt
fi
Msg=`cat /tmp/content.txt` #root测试脚本时保证里面有内容
message(){
echo -e '{\n'
echo -e '\t"touser": "'"$UserID"\"",\n"
echo -e '\t"toparty": "'"$PartyID"\"",\n"
echo -e '\t"msgtype": "text",\n'
echo -e '\t"agentid": "'"$agentid"\"",\n"
echo -e '\t"text": {\n'
echo -e '\t\t"content": "'"$Msg"\""\n"
echo -e '\t},\n'
echo -e '\t"safe":"0"\n'
echo -e '}\n'
}
/usr/bin/curl --data-ascii "$(message)" $POSTURL

log_date=`date +"%F"`

if [ `whoami` != 'root' ];then #root测试脚本时不写进日志
        echo "$log_date\t$3\t$2" > /tmp/logtest.txt
        sed 's/\\n/\\t/g' /tmp/logtest.txt > /tmp/logtest2.txt
        log=`cat /tmp/logtest2.txt`
        echo -e $log >>/var/log/zabbix/zabbix_wechat.log
fi

最终执行脚本

vim /usr/lib/zabbix/alertscripts/wechat.sh

#!/bin/bash
access_token=xxxxxx
POSTURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$access_token"
UserID=$1 #用户ID
PartyID=2 #部门ID
agentid=1000002 #应用ID
#Msg=`echo "$@" | cut -f 3`
if [ `whoami` != 'root' ];then
        echo -e "$1\n$2\n$3" > /tmp/content.txt
fi
Msg=`cat /tmp/content.txt`
message(){
echo -e '{\n'
echo -e '\t"touser": "'"$UserID"\"",\n"
echo -e '\t"toparty": "'"$PartyID"\"",\n"
echo -e '\t"msgtype": "text",\n'
echo -e '\t"agentid": "'"$agentid"\"",\n"
echo -e '\t"text": {\n'
echo -e '\t\t"content": "'"$Msg"\""\n"
echo -e '\t},\n'
echo -e '\t"safe":"0"\n'
echo -e '}\n'
}
/usr/bin/curl --data-ascii "$(message)" $POSTURL

log_date=`date +"%F"`

if [ `whoami` != 'root' ];then #测试脚本时不写进日志
        echo "$log_date\t$3\t$2" > /tmp/logtest.txt
        sed 's/\\n/\\t/g' /tmp/logtest.txt > /tmp/logtest2.txt
        log=`cat /tmp/logtest2.txt`
        echo -e $log >>/var/log/zabbix/zabbix_wechat.log
fi

本文链接:

https://blog.zhigu34.cn/archives/424.html
1 + 8 =
1 评论
    linuxChrome 76Windows 10
    9月26日 回复

    echo $pwd | passwd --stdin $user >& /dev/null