yanghongjun 发表于 2019-1-25 09:40:43

zabbix通过微信告警

  zabbix version:3.0.3
  

  先申请一个微信企业号:https://qy.weixin.qq.com
  申请步骤略
http://s3.运维网.com/wyfs02/M01/85/27/wKiom1ebDiiTrKJIAAEgF2MZ8NU653.png
  

  新增成员,添加成员后,会生成一个二维码,扫描关注
  http://s3.运维网.com/wyfs02/M02/85/27/wKioL1ebDl_wmF1EAACi5AaYjRY685.png
  

  创建应用(消息型应用),并给部门设置管理员(设置---权限管理--新建管理组):
  http://s4.运维网.com/wyfs02/M00/85/27/wKiom1ebDoaRej7KAAIuYOOe-Ys168.pnghttp://s5.运维网.com/wyfs02/M02/85/27/wKiom1ebDp2x-xT-AAJ4XwAeRAs197.png
  要确认管理员能读取通讯录,可以使用应用发送消息
  注意:这时需要管理员的CorpID和Secret
  

我们要准备这些东西:

[*]一个微信企业号
[*]企业号已经被部门成员关注
[*]企业号里有一个可以发消息的应用
[*]一个授权管理员,可以使用该应用给成员发消息
  

我们要取到这些信息:

[*]成员账号
[*]组织部门ID
[*]应用ID
[*]CropID
[*]Secret
  

  调用微信接口:
  调用微信接口需要一个调用接口的凭证:access_token
  通过 :CropID 、Secret才能获取到access_token,但是获取到的token有效期为两分钟
  http://qydev.weixin.qq.com/debug
  http://s2.运维网.com/wyfs02/M02/85/27/wKioL1ebDrvSnjOtAAC0_lERkdA914.png
  Shell脚本
  curl -s -Gurl       获取 AccessToken
  curl --dataurl   传送凭证调用企业号接口
  zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容
  

  把脚本放到zabbix告警脚本目录下:
# grep -i '^AlertScriptsPath' zabbix_server.conf
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
# cd /usr/local/zabbix/share/zabbix/alertscripts
# chmod 755 weixin.sh
# chown zabbix:zabbix weixin.sh  

  登录zabbix webGUI:管理--报警媒介类型--创建媒介类型
  http://s1.运维网.com/wyfs02/M00/85/27/wKiom1ebDtzCNt6aAABQL4azQjE544.png
  
  {ALERT.SENDTO}
  {ALERT.SUBJECT}
  {ALERT.MESSAGE}
  这三个参数在zabbix3.0上必须加上,否则无法发送消息
  

  管理--用户--admin--报警媒介--添加:
  http://s5.运维网.com/wyfs02/M00/85/27/wKioL1ebDv3A7jFUAAA3iI2ImDY962.png

  

  创建Trigger和Action(略),发送选择微信
  http://s1.运维网.com/wyfs02/M01/85/27/wKiom1ebDxny5RrvAABHy2RoMAk793.png
  然后触发Action,然后调用微信发送消息:
  http://s5.运维网.com/wyfs02/M00/85/27/wKioL1ebD_7AWkDNAAG76W9DP98301.png
  
  

  默认信息:
  【恢复】 http请求返回值正确
  告警主机:{HOST.NAME}
  主机IP:{HOST.IP}
  告警时间:{EVENT.DATE}{EVENT.TIME}
  告警等级:{TRIGGER.SEVERITY}
  告警信息:{TRIGGER.NAME}
  问题详情:{ITEM.NAME}:{ITEM.VALUE}
  事件ID:{EVENT.ID}
  触发器URL: {TRIGGER.URL}
  Item values:
  1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
  2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
  3. {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): {ITEM.VALUE3}
  

  微信脚本:
#!/bin/bash
###SCRIPT_NAME:weixin.sh###
###send message from weixin for zabbix monitor###
###wuhf###
###V1-2015-08-25###
CropID='wx6df0114cc6117cf0'
Secret='uLmErUwbzGqfWkG-pyILzo3h4p3teJZdQeMD4MITN6LoBl3ORUVpPnd9Q174mXP7'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
function body() {
      local int AppID=1                        企业号中的应用id
      local UserID=$1                        部门成员id,zabbix中定义的微信接收者
      local PartyID=3                        部门id,定义了范围,组内成员都可接收到消息
      local Msg=$(echo "$@" | cut -d" " -f3-)过滤出zabbix中传递的第三个参数
      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": "'"$Msg"\""\n"
      printf '\t},\n'
      printf '\t"safe":"0"\n'
      printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL  

  




页: [1]
查看完整版本: zabbix通过微信告警