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 192.168.1.120 -p 10050 -k instance.count[2]
3
[root@Zabbix-server zabbix]# zabbix_get -s 192.168.1.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

主从状态监控

由于这台机器120是一个专门来做从库和备份的机器,上面运行了3个从库,同时还在做日志的备份,所以要对数据库的主从状态进行一下监控,在这里做的很简单,因为在数据库的主从中,有两个很关键的指标,也就是IO_STATUS和SQL_STATUS,只有当这两个值都为Yes的时候,就能说明主从状态是正常的。所以在做mysql主从监控的时候,也就只监控这两个指标就可以了。

选择的是通过远程登录mysql执行命令的方式,获取slave的状态信息,然后通过截取相关字段,最后计算Yes的个数,当个数位2的时候,表明主从状态是正常的。

下面写的一个简单的监控脚本,比较low。

#!/bin/bash
# monitor mysql slave status USER_SELECT=$1
COMMAND_SHOW="show slave status\G;"
case $USER_SELECT in
1)
MYSQL_SERVER=192.168.1.108
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD="password"
;;
2)
MYSQL_SERVER=192.168.1.120
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD="password"
;;
3)
MYSQL_SERVER=192.168.1.120
MYSQL_PORT=3307
MYSQL_USER=root
MYSQL_PASSWORD="password"
;;
4)
MYSQL_SERVER=192.168.1.120
MYSQL_PORT=3308
MYSQL_USER=root
MYSQL_PASSWORD="password"
;;
*)
echo "Usage $0 {108|120}"
esac /usr/local/mysql/bin/mysql -h$MYSQL_SERVER -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -e '$COMMAND_SHOW' 2>/dev/null|grep -E 'Slave_IO_Running|Slave_SQL_Running'|grep Yes

因为有4个实例,所以写了一个简单的case,不同的实例用不同的端口、地址、用户名和密码。然后还是通过命令去查询的 mysql -e 'show slave status\G;'获取slave的状态,由于是命令执行,密码直接输入的,会弹出提示,不安全的提示,所以做了一个简单粗暴的,将所有的错误信息,全部打入到/dev/null中,当系统出现其他告警的时候,也就看不见了,但是仅仅是为了监控这两个状态,所以可以忽略。

创建zabbix的监控item,编写一个key的定义。

[root@mysqlbackup ~]# cat /etc/zabbix/zabbix_agentd.d/mysql_slave.conf
UserParameter=mysql.slave.status[*],/opt/slave_status_all.sh $1

跟之前的脚本一样,输入1 2 3 4,监控不同的数据库实例的主从状态,在server上指定key进行查询。剩下的就跟正常的操作一样了。

在做触发器的时候,只是判断,最后的一次取值,不为2,就产生告警。

使用Zabbix监控mysql的主从同步的更多相关文章

  1. 监控MySQL服务器主从同步异常的脚本,出现异常,报警

    监控主从复制的指标有: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 (从服务器与主服务器延时多少秒) # ...

  2. zabbix监控mysql主从

    最近在公司搭建了zabbix监控系统,现在需要用zabbix来监控mysql的主从同步情况 现在说一下配置的详细步骤: 1.首先给mysql分配一个监控的账号: mysql> grant rep ...

  3. zabbix监控mysql主从同步和延迟

    https://blog.csdn.net/natmazz/article/details/90581490 https://www.cnblogs.com/01-single/p/10602610. ...

  4. zabbix 监控MySQL

    现在我来说一下我的监控环境 zabbix-3.0.3 MySQL-5.6.23 1.首先我们要登录MySQL,创建一个监控MySQL的用户 GRANT USAGE,PROCESS,SUPER,REPL ...

  5. Zabbix监控mysql配置及故障告警配置

    本文主要介绍zabbix监控mysql的配置,包含使用zabbix自带模板监控mysql相关信息及自定义key监控mysql同步情况.同时介绍了触发器的创建及zabbix通过邮件方式告警配置. 一.配 ...

  6. MySQL数据库主从同步延迟分析及解决方案

    一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 lo ...

  7. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  8. Zabbix监控mysql performance

    介绍 zabbix监控mysql性能,使用zabbix自带的mysql监控模板,可以监控以下内容OPS(增删改查).mysql慢查询数量.mysql请求\响应流量带宽 配置 新建mysql监控用户 G ...

  9. 分布式数据存储 - Zabbix监控MySQL性能

    Zabbix如何监控mysql性能,我们可以使用mysql自带的模板,可以监控如下内容:OPS(增删改查).mysql请求流量带宽,mysql响应流量带宽,最后会附上相应的监控图! 编写check_m ...

随机推荐

  1. zList一个块状链表算法可以申请和释放同种对象指针,对于大数据量比直接new少需要差不多一半内存

    zList是一个C++的块状内存链表,特点: 1.对于某种类别需要申请大量指针,zList是一个很好的帮手,它能比new少很多内存. 2.它对内存进行整体管理,可以将数据和文件快速互操作 3.和vec ...

  2. Android为TV端助力之Webview与JS双向交互

    package com.hhzt.iptv.adservice; import android.app.Activity;import android.graphics.Bitmap;import a ...

  3. Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块

    Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块 ...

  4. 获取用户IP

    public static string GetIP()        {            string ip;            if (System.Web.HttpContext.Cu ...

  5. 深入Node之初识

    0前言 陆续的用Node已经一年多了,已经用node写了几个的项目,也该是总结node学习的过程了 1.Node是啥? Node.js是一使用JavaScript作为开发语言,运行在服务器端的Web服 ...

  6. 最好用的jQuery-Ajax缓存插件

    AJAX-Cache    最好用的jQuery-Ajax缓存插件 介绍 AJAX-Cache是一款jQuery插件,基于localStorage/sessionStorage实现异步请求缓存功能,并 ...

  7. c文件操作整理

    <c陷阱与缺陷> FILE *fp; fp = fopen(file, "r+"); 编程者也许认为,程序一旦执行上述操作完毕,就可以自由地进行读取和写入的操作了.遗憾 ...

  8. Scala操作Hbase空指针异常java.lang.NullPointerException处理

    Hbase版本:Hortonworks Hbase 1.1.2 问题描述:使用Scala操作Hbase时,发生空指针异常(java.lang.RuntimeException: java.lang.N ...

  9. Linux 下查看字体

    1.查看所有字体 命令:fc-list 2.查看中文字体 命令:fc-list :lang=zh 3.查看更多字体 命令:fc-match -v "AR PL UKai CN"

  10. 隐写术之steghide的使用

    steghide不是一个软件,所以下载之后解压缩就可以在命令行中使用. win+R,cmd,回车->进入到steghide.exe所在的文件夹,使用隐藏或者解锁的相应命令,即可隐藏或者解锁. 这 ...