Zabbix 监控触发器设置

 


简述

在生产环境中,有一台mysql的备份服务器,上面运行着三个数据库实例的从库,也在做日志的同步工作,为了实现对该备份服务器的监控,当出现从库实例不为3或者日志同步进程不为3的时候,产生告警通知,生产使用的是zabbix监控。就想着自己写一个监控的item,通过定时取值,然后设置触发器,当有告警的时候进行通知。

在设计的时候就没有想到什么比较厉害的方法,只是通过ps查看进程的方式,获取mysqld_safe的数量,因为运行了三个从库实例,自己写的多实例启动脚本,在脚本中就是通过该命令启动的数据库,所以在做的时候就是过滤这个关键字。

对于日志的同步,也是用的这种方式进行统计的。

过程

1.编写监控命令

在设计的时候,选择使用ps命令,过滤的命令和结果如下:

[root@mysqlbackup opt]# ps -ef|grep mysqld_safe|grep -v grep|wc -l
3
[root@mysqlbackup opt]# ps -ef|grep mysqlbinlog|grep -v grep|wc -l
3

上面就是直接过滤关键字,而获取到值,因为需求很简单,只有当着两个值,不为3的时候,就说明出现了mysql的同步异常,这个时候就需要发送告警通知给管理员来进行处理了。所以这两条命令就可以了。

为了写的高端一点,选择的是写脚本的方式,因为过滤的命令格式都是一样的,只有关键字是不同的,所以写个脚本case一下。脚本如下:

[root@mysqlbackup opt]# cat instance_count.sh 
#/bin/bash 
# monitor mysql instance and binlog instance 
function instance_count(){
    NAME=$1
    # /bin/ps -ef|grep $NAME|grep -v grep|wc -l
    case $NAME in
    1)
        /bin/ps -ef|grep mysqld_safe|grep -v grep|wc -l
        ;;
    2)
        /bin/ps -ef|grep mysqlbinlog|grep -v grep|wc -l
        ;;
    *)
        echo "Usage $0 {mysql|mysqlbinlog}"
    esac
}

main(){
    instance_count $1
}

main $1

实际上就是通过参数的形式,将要获取的值传入,然后返回,可以通过本地执行的方式,获取这些值。获取mysql实例数是参数1,获取mysqlbinlog日志同步的实例数是参数2,输入其他参数,直接报错。

2.编写item_key

基于之前的脚本,在zabbix-agentd.d目录下,编写一个conf文件,用来定义key,调用刚才创建的脚本进行传参。

[root@mysqlbackup opt]# cat /etc/zabbix/zabbix_agentd.d/mysql.conf 
#UserParameter=mysql.MysqlInstanceCount,ps -ef|grep mysqld_safe |grep -v grep|wc -l
#UserParameter=mysql.MysqlbinlogCount,ps -ef|grep mysqlbinlog |grep -v grep|wc -l
UserParameter=instance.count[*],/opt/instance_count.sh $1

脚本编写完成之后,需要重启zabbix-agent才能生效。

3.获取item

在zabbix-server上通过zabbix_get命令。获取指定的值。

[root@Zabbix-server zabbix]# zabbix_get -s 10.2.86.120 -p 10050 -k instance.count[2]
3
[root@Zabbix-server zabbix]# zabbix_get -s 10.2.86.120 -p 10050 -k instance.count[1]
3

在zabbix-server上能够通过命令成功获取这些值,表明该item已经可以使用,下面就可以开始在web页面上进行配置了。

4.item配置

在这里我选择的是创建一个模板,然后在模板中创建一个应用application,然后再创建两个item,name分别为MySQLInstanceCount和MySQLBinlogCount,对应的key值分别为instance.count[1]和instance.count[2],至于取数周期和保留期,可以选择默认,也可以适当调整。

配置完成后,就可以在最新数据中,获取这两个值。

5.触发器配置trigger

为了实现告警短信的通知,选择配置两个触发器,当出现值不为3的时候,就触发告警,开始选择用的是last方法,意思就是获取该item的最近的一个值。当该值不为3的时候,则产生告警,编辑的表达式如下所示:

{mysql:instance.count[1].last()}<>3

后来考虑到误报,或者是短时间的异常告警,所以修改了表达式,选择的是count,当最近的5次采集中,不为3的采集大于2次时,就产生告警。这样也就减少了告警的频次。

{mysql:instance.count[1].count(#5,3,ne,0)}>2

猜你喜欢

转载自www.cnblogs.com/bobo137950263/p/10779202.html
今日推荐