实验内容
创建一个监控项监控8080端口,当8080端口down了,第一步先重启nginx,如果问题还没解决,则进入第二步,利用Zabbix的Email报警,如果问题还没解决,进入第三步,使用自定义的脚本发送邮件报警,这样就实现了报警升级
创建监控项监控8080端口
然后添加,就可以了
至此检查8080端口是否被监听的item已经创建好了。
添加报警媒介
如果我们要报警,则需要设置报警的媒介,一般来说媒介常用的就是邮件,或者自定义脚本,如果有短信网关也可以使用发手机短信报警
这里设置2个报警媒介。
利用Email报警
自定义脚本报警
需要将自定义脚本放置在/usr/lib/zabbix/alertscripts/目录下
自定义脚本如下
[root@localhost ~]# cat /usr/lib/zabbix/alertscripts/mail_scripts
#!/bin/bash
contact=$1
subject=$2
body=$3
echo "$body" | mail -s "$subject" "$contact"
需要让脚本有执行权限
chmod +x /usr/lib/zabbix/alertscripts/mail_scripts
然后在网页端,配置自定义脚本报警媒介
设置好了报警媒介,接下来需要让用户可以使用这个媒介
设置触发器
触发器:条件满足时将会触发
格式:
{<server>:<key>.<function>(<parameter>)}<operator><constant>
server:主机名
key:主机上关系的监控项key
function:评估采集到的数据是否在合理范围内时所使用的函数,评估过程可以根据采集的数据,当前时间等其他因素进行,目前支持的函数有avg,count,change,date等
parameter:函数参数:大多数数值函数可以接受秒数为其参数,而如果在数值参数使用“#”前缀,则表示最近几次的取值。如sum(300)表示300秒内的所有取值之和,sum(#10)则表示最近十次的取值之和
例子:{www.ice.com:system.cpu.load[all,avg1].last(0)}>3
表示主机www.ice.com上所有的cpu的过去1分钟内的平均负载的最后一次取值大于3将触发状态
然后添加即可,这样触发器就设置好了,有了触发器还需要动作
配置Action
当触发器被触发,将会产生动作(Action),这里的Action可以是远程命令,或者报警
配置当什么状态执行动作,这里是当触发器被触发,则执行动作
接下来需要配置动作,远程执行命令,当执行命令还是不能解决问题再报警,
配置Action执行远程命令
remote command,在agent所在的主机上运行用户指定的命令或脚本尝试恢复故障,例如:重启服务,使用自定义脚本
类型:
- IPMI命令
- custom script 自定义脚本
- ssh 利用ssh连接过去执行命令
- telnet 利用telnet方式执行命令
- global script 全局脚本
当设置自定义脚本的时候,需要再agent进行配置允许执行命令,以及设置sudo权限
具体如下,先设置sudo权限,输入visudo,开始编辑文件,添加下面两行
# Defaults requiretty #这一行必须要注释掉,这一行表示需要终端执行命令,但是zabbix执行命令的时候没有tty终端,有可能会导致失败。所以需要注释掉,或者改写为Defaults !requiretty 也可以
zabbix ALL=NOPASSWD: ALL
接下来修改agent配置文件/etc/zabbix/zabbix_agentd.conf 允许执行远程命令
EnableRemoteCommands=1
修改完了需要重启一下agent服务
systemctl restart zabbix-agent
如果发现有时候zabbix显示执行成功命令,但是命令没有真正执行,可能是你的自定义脚本命令没有使用sudo 而是直接输入了命令这样由于权限问题也会导致命令看起来执行成功了实际上没有执行。
邮件报警
自定义脚本报警
然后动作就添加完成了,接下来可以测试一下
测试
起一个nginx打开8080端口
现在可以看到状态是ok,也就是8080端口正在监听,然后修改配置文件,让nginx监听1080端口,然后停止nginx,看触发器会不会执行重启nginx命令,重启之后可以看到它会监听在1080端口 ,这就可以判断是否命令执行成功了
修改就不赘述了,直接停止nginx
systemctl stop nginx
可以看到nginx监听再1080了,说明成功。
接下来就是等待了,等待收到信息
表示发送成功,接下来执行mail命令,看一下邮箱
收到了邮件成功