zabbix企业微信告警中特殊字符【%】【”】处理

zabbix调用企业微信发送告警,网上相关贴子,很多就不再详述了,比如参考如下链接。

https://blog.csdn.net/wojiuwangla/article/details/106104276?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

但是实际生产中遇到一个问题:就是告警内容中包含特殊字符【%】【“】时,导致告警内容显示中断。

通过分析发现是发送告警信息的shell脚本中的printf对字符串中特殊字符的转义处理导致的。

具体的解决办法就:

1:把【%】替换为【%%】,printf在处理时就可以【%%】把转义为单个【%】。

 local WXMsg=${Msg//%/%%}

2:把【“】删除,因为我在生产环境中只有web监控会产生【”】的告警信息,我就把告警内容中的【”】删除了,也不影响阅读,也可以进行转义处理。

 local WXMsg1=${WXMsg//\"/}

修改完脚本后,直接测试:./wechat.sh "wxid" "zabbix" "12345%%6"

------------------------------------------------------------------------------------------------------------------------------------------

#!/bin/bash
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
 local UserID=$1
 #local PartyID=3
 local Msg=$(echo "$@" | cut -d" " -f3-)

 local WXMsg=${Msg//%/%%}
 local WXMsg1=${WXMsg//\"/}

 printf '{\n'
 printf '\t"touser": "'"$User"\"",\n"
 #printf '\t"toparty": "'"$PartyID"\"",\n"
 printf '\t"msgtype": "text",\n'
 printf '\t"agentid": "'" $AppID "\"",\n"
 printf '\t"text": {\n'
 printf '\t\t"content": "'"$WXMsg1"\""\n"
 printf '\t},\n'
 printf '\t"safe":"0"\n'
 printf '}\n'
 }
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL

------------------------------------------------------------------------------------------------------------------------------------------

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值