添加自定义监控项目
需求:如果需要监控业务中一些比较复杂的数据,而zabbix不可能给提供这种监控项,那么就需要自己写出监控数据的脚本或者其他语言的程序来获取这个监控值,然后通过zabbix_agentd发送给zabbix_server端处理
编辑一个获取数据的命令或者脚本,比如获取并发的处理链接数,并给予脚本权限,让zabbix_agentd有权限去执行这个脚本获取数据
[root@localhost ~]# vim /usr/local/sbin/estab.sh
#!/bin/bash
netstat -ant |grep ':80' |grep -c ESTABLISHED
[root@localhost ~]# chmod 755 /usr/local/sbin/estab.sh
修改zabbix_agentd配置文件,打开自定义配置的参数,然后指定执行的脚本或程序的监控项、参数和脚本路径就可以了
[root@localhost ~]# vim /usr/local/zabbix_agentd/etc/zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=estab.count[*],/usr/local/sbin/estab.sh
在zabbix_server的web页面上添加该定义参数
将zabbix_agentd中定义好的脚本路径前的监控项名称填到这里,zabbix_agentd后的[*]
表示指定脚本的参数,如果没有参数可以省略不写。在添加过程中结合所监控的数值给予同样的数值类型,更新时间和数据保留时间也是可以由自己定义的
查看监控产生的数据,由于测试的没有访问流量,所以监控的这个请求状态ESTABLISHED会一直是0,但是这也并不是没有数据的
zabbix使用sendmail实现故障告警
配置邮件发送
配置sendmail,使用sendmail服务来发送邮件,在配置文件中写入smtp邮件服务器登入密码,这个密码是独立密码,并非是邮箱登录密码。需要在邮箱设置的pop3功能里开启
[root@localhost ~]# vim /etc/mail.rc
set from=*****@163.com smtp=smtp.163.com
set smtp-auth-user=*******@163.com smtp-auth-password=*****
set smtp-auth=login
配置接下来在zabbix上配置发送邮件
首先进入zabbix自定义脚本的存放目录下,创建发送邮件的脚本
[root@localhost ~]# cd /usr/local/zabbix/zabbix/share/zabbix/alertscripts/
[root@localhost alertscripts]# touch history.txt
[root@localhost alertscripts]# chmod 777 history.txt
[root@localhost alertscripts]# cat sendmail.sh
#!/bin/bash
export LANG=zh_CN.UTF-8
to=$1
subject=$2
body=$3
FILE=/usr/local/zabbix/share/zabbix/alertscripts/history.txt
echo "$3" >$FILE
echo `cat $FILE |tr '\r' '\n' |grep ^$ -v |tr '\r' '\n'` |mail -s "$2" $1
把脚本给予用户所属主和可执行权限,这样zabbix才能够去执行发送邮件的动作
[root@localhost ~]# chown zabbix:zabbix /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh
[root@localhost ~]# chmod +x /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh
在zabbix中加入报警方式,这里要填写发送报警邮件的脚本名和报警内容格式
{ALERT.SENDTO} <----第一项
{ALERT.SUBJECT} <----第二项
{ALERT.MESSAGE} <----第三项
设置收件人邮箱
配置给zabbix系统中的哪个用户或者用户组发送告警邮件,需要配置邮件接收人的邮箱地址
定义用户监控报警类型的媒介,并在配置中选择shell邮件发送告警信息以及添加收件人邮件地址
配置触发动作
完成收件人邮箱配置后,还需要定义报警出发的动作,有了这个动作才能在报警触发时发送告警邮件信息
添加告警触发值,到达或超过这个数值会启动发送告警邮件
定义发送邮件的内容和发送给哪些管理用户(用户配置了告警邮件地址的接收人信息)
报警邮件内容参考,可以应用到你的报警信息内容当中去,按照自己的报警项进行修改
异常{TRIGGER.STATUS},服务器:{HOSTNAME1}-: {TRIGGER.NAME}警告! <----------这是邮件标题
告警主机IP地址:{HOST.CONN} <----------这是邮件内容
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
服务器网络中断
配置完成后必须点击添加按钮才能成功保存,否则会无法保存并且会清空这些配置
恢复的邮件信息内容参考,可应用到自己的邮件告警中,按需修改
正常{TRIGGER.STATUS},服务器:{HOSTNAME1}-: {TRIGGER.NAME}恢复 <----------这是邮件标题
告警主机IP地址:{HOST.CONN} <----------这是邮件内容
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
服务器网络已恢复
测试邮件告警
首先在linux服务器中测试mail的发送邮件的功能
[root@localhost ~]# echo "ceshi" | mail -s "ceshi" [email protected]
查看监控主机的触发器,也可以自定义创建触发器应用,这里我直接关闭被监控主机,让监控有一些警告信息发生
这里在个别主机中的触发器里创建一个新的触发器
创建好触发器后让该触发器触发警告,然后启动执行邮件脚本发生告警
注意的是在配置动作的时候要指定发送给报警邮件的人(邮件地址),否则会造成无法发送邮件,详情见【配置触发动作】
这里我测试成功,使用收件人邮箱成功接收到邮件信息
解决邮件内容空的问题
首先进入脚本保存目录,创建脚本的输出内容文件并给予可读可写权限。在脚本文件中指定该文件的路径,让脚本读取该文件内容,读取内容以执行发送邮件。
这也在上面步骤中有提到,这里配置时容易遗漏
[root@localhost ~]# cd /usr/local/zabbix/zabbix/share/zabbix/alertscripts/
[root@localhost alertscripts]# touch history.txt
[root@localhost alertscripts]# chmod 777 history.txt
[root@localhost alertscripts]# cat sendmail.sh
#!/bin/bash
export LANG=zh_CN.UTF-8
to=$1
subject=$2
body=$3
FILE=/usr/local/zabbix/share/zabbix/alertscripts/history.txt
echo "$3" >$FILE
echo `cat $FILE |tr '\r' '\n' |grep ^$ -v |tr '\r' '\n'` |mail -s "$2" $1