系统环境:centos7.3
zabbix_server: 3.0.3 3.0.6
问题描述
zabbix预警突然不能发送微信,需要修复
排查步骤
1. 检查微信企业平台应用的key是否过期,结果没过期正常使用
2. 检查zabbix日志,发现日志中压根就没有将执行的命令记录到日志中
3. 开启zabbix server日志模式问debug,观察日志,发现zabbix不会将执行脚本的步骤写入日志中。
4. 检查动作中设置是否出错,按照动作中配置信息执行脚本,发现信息是可以发送的。
5. 检查命令执行结果,发现不管对错最后返回值都为0。在不联网的情况下返回值也为0。
6. 定位到问题,修改微信接口脚本,脚本为网上复制的,太简单了懒得写。
#!/bin/bash CropID='aaaaaaaaaaaaa' Secret='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" #get acccess_token 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=xxx local UserID="@all" local PartyID=8 local Msg=$(echo "$@") 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' } /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
7. 配置完成后执行预警信息出现如下问题
发现执行脚本超时。测试在命令行执行时没问题的。最后断开网络执行,无法访问微信接口出现超时。定位到问题,由于zabbix执行脚本时,使用的环境变量并非系统登录时设置的环境变量。
在脚本中加入http代理。成功触发报警。
export http_proxy="http://xxxxxx/" export https_proxy=https://xxxxxx/
总结
1. 由于使用的是其他网友编译的脚本,并不知道执行步骤及脚本内容无法定位问题出现点。
2. zabbix在执行动作时,如动作是脚本不记录到日志中。
3. zabbix在触发执行脚本动作时,使用的环境变量并非是包含系统自定义环境变量,所需要的需要自行设置。