一、模板
模板是监控项、触发器的集合。
1、创建一个模板
添加模板,就像添加主机一样
2、创建监控项
主要的选项为类型、键值和数据刷新间隔,类型选择zabbix客户端或者其他,键值即监控项的表达式,刷新间隔一般默认即可。快速的方式为克隆。
3、创建触发器
主要的选项为严重性和表达式,严重性在报警时可选择是否报警(在配置-用户-报警媒介中选择,见下面的说明),表达式则是触发时的表达式。快速的方式为克隆。
二、配置报警媒介-微信报警
1、申请微信企业号
申请服务号,并添加子应用,添加通讯录成员
2、在server端服务器上操作
mkdir -p /home/zabbix/alertscripts
rz weixin.sh
*******************脚本内容如下*******************************
#!/bin/bash
CropID='xxxxxxxxx' ###这里输入微信企业号应用的CropID
Secret='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' ###这里输入微信企业号的Secret
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(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="xxxxxxxxx" ###这里输入agentdid
local UserID=$1
local PartyID=""
local TagID=""
local Msg=$(echo "$@" | cut -d" " -f3-)
printf '{\n'
printf '\t"touser": "'"@all"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"totag": "'"$TagID"\"",\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'
}
curl --data-ascii "$(body $1 $2 $3)" $PURL
printf '\n'
********************************************************************************************************
vim /usr/local/zabbix/etc/zabbix_server.conf,找到AlertScripts=,修改为脚本所在路径的地址,例如“AlertScriptsPath=/home/zabbix/alertscripts ”,然后重启zabbix-server
测试脚本可用性,使用./weixin.sh 1 1 test,若输出为{"errcode":0,"errmsg":"ok","invaliduser":""},且微信可以接受到消息,则说明微信企业号及脚本配置成功;
PS:重启zabbix-server的方式
启动:/usr/local/zabbix/sbin/zabbix-server
停止:/etc/init.d/zabbix_server stop
3、在web上配置
(1)管理-报警媒介类型-创建媒体类型
添加weixin报警,并添加三个参数:{ALERT.SENDTO} {ALERT.SUBJECT}{ALERT.MESSAGE},其实对于微信来讲,只有最后一个参数是有用的
(2)配置-动作-创建动作
2-1动作
动作名称:weixin
条件:维护状态 非在 维护
2-2操作
默认接受人:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
默认信息:告警主机:{HOSTNAME1}
告警IP:{IPADDRESS}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
时间ID:{EVENT.ID}
操作:选择“发送消息”给用户及用户群组,媒体类型为“微信”;
2-3恢复操作
默认接收人:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
默认信息:告警主机:{HOSTNAME1}
告警IP:{IPADDRESS}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
时间ID:{EVENT.ID}
操作:选择“发送消息”给用户及用户群组,媒体类型为“微信”;
(3)管理-用户-报警媒介
在添加完一个用户之后,若使用的为weixin报警媒介,则不需要在此添加“报警媒介”也能接收到报警信息(相反,邮件报警则必须添加,否则接收不到,原理见下面第2点),因为用户只要关注了微信即能接受到微信发送的消息,因此这里无需再配置。有两点说明如下:
微信报警的原理为:触发器触发报警---动作中触发报警媒介(weixin)----通过“配置-报警媒介”中找到weixin.sh脚本----执行weixin.sh脚本----向微信企业号通讯录中存在的人发送消息;由此可见,不需要在“管理---用户---报警媒介”中添加“报警媒介”了;
但是,若不添加报警媒介,此时去"检测中---触发器"中,点击“触发器---问题”可查看到会显示“动作”为“失败”,报错为“No media defined for user "Zabbix Administrator (Admin)"”,配置之后会消失。
三、配置zabbix-server自检
对zabbix自检的配置其实是在zabbix-server模板中加一个监控项、触发器
添加zbbix客户端类型的监控项,键值为data.status,在zabbix-server端所在的服务器上,vim /etc/zabbix/zabbix_agentd.conf,配置如下
UnsafeUserParameters=1
UserParameter=date.status,date +%H%M
然后再配置触发器,触发器表达式为{Zabbix server:date.status.prev()}=0930,即每天9点30分触发报警;
然后在配置-动作中新增动作,条件为“维护状态 非在 维护;触发器 = zabbix-server监控模板: check itself”,配置操作的默认信息为“金惠通金融云zabbix自检测,正常!”。
PS:需要把另外一个常规触发动作,增加一个条件为“触发器 <> zabbix-server监控模板: check itself”,即排除这里的自检测报警。
四、其他问题
1、报警两次的问题
每次报警和恢复报警均发送两次消息,经过调试后确认问题,即在“动作”的条件中设置的两个条件应为“和”,默认为“与/或”则会造成两次报警。