使用Zabbix监控mysql的主从同步
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的主从同步的更多相关文章
- 监控MySQL服务器主从同步异常的脚本,出现异常,报警
监控主从复制的指标有: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 (从服务器与主服务器延时多少秒) # ...
- zabbix监控mysql主从
最近在公司搭建了zabbix监控系统,现在需要用zabbix来监控mysql的主从同步情况 现在说一下配置的详细步骤: 1.首先给mysql分配一个监控的账号: mysql> grant rep ...
- zabbix监控mysql主从同步和延迟
https://blog.csdn.net/natmazz/article/details/90581490 https://www.cnblogs.com/01-single/p/10602610. ...
- zabbix 监控MySQL
现在我来说一下我的监控环境 zabbix-3.0.3 MySQL-5.6.23 1.首先我们要登录MySQL,创建一个监控MySQL的用户 GRANT USAGE,PROCESS,SUPER,REPL ...
- Zabbix监控mysql配置及故障告警配置
本文主要介绍zabbix监控mysql的配置,包含使用zabbix自带模板监控mysql相关信息及自定义key监控mysql同步情况.同时介绍了触发器的创建及zabbix通过邮件方式告警配置. 一.配 ...
- MySQL数据库主从同步延迟分析及解决方案
一.MySQL的数据库主从复制原理 MySQL主从复制实际上基于二进制日志,原理可以用一张图来表示: 分为四步走: 1. 主库对所有DDL和DML产生的日志写进binlog: 2. 主库生成一个 lo ...
- mysql数据库主从同步
环境: Mater: CentOS7.1 5.5.52-MariaDB 192.168.108.133 Slave: CentOS7.1 5.5.52-MariaDB 192.168. ...
- Zabbix监控mysql performance
介绍 zabbix监控mysql性能,使用zabbix自带的mysql监控模板,可以监控以下内容OPS(增删改查).mysql慢查询数量.mysql请求\响应流量带宽 配置 新建mysql监控用户 G ...
- 分布式数据存储 - Zabbix监控MySQL性能
Zabbix如何监控mysql性能,我们可以使用mysql自带的模板,可以监控如下内容:OPS(增删改查).mysql请求流量带宽,mysql响应流量带宽,最后会附上相应的监控图! 编写check_m ...
随机推荐
- vue路由懒加载 及import
- 获取元素CSS样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- DevExtreme App 开发记要
添加插件 除提供的标准插件外,可直接在config.xml中书写配置,然后编译模板,在后台能看到相关的插件了 无法显示百度地图 在IPHONE中正常加载地图,但在安卓中提示BM ...
- 服务器三:多线程epoll
#include <fcntl.h> #include <sys/socket.h> #include <netinet/in.h> #include <ar ...
- Android 设计模式之MVC模式
说到Android设计模式的MVC模式,估计很多人都是比较熟悉了,这里深入了解一下MVC到底是怎么回事,以ListView为例子讲解. 一.深入理解MVC概念 MVC即Model-View-Contr ...
- 如何修改Recovery的字符串资源
前言:在实际的ROM修改中,Recovery的修改还是会经常遇到的,这篇文章主要讲解如何修改Recovery字符串. 首先我们先了解下大概的流程. 1.screen_ui.cpp 中的Screen ...
- Spark MLlib FPGrowth关联规则算法
一.简介 FPGrowth算法是关联分析算法,它采取如下分治策略:将提供频繁项集的数据库压缩到一棵频繁模式树(FP-tree),但仍保留项集关联信息.在算法中使用了一种称为频繁模式树(Frequent ...
- js坚持不懈之15:修改html内容和属性的方法
1. 修改 HTML 内容 <!DOCTYPE html> <html> <body> <p id = "change">原始内容& ...
- 我的第一个python web开发框架(40)——后台日志与异常处理
后台权限和底层框架的改造终于完成了,小白也终于可以放下紧悬着的心,可以轻松一下了.这不他为了感谢老菜,又找老菜聊了起来. 小白:多谢老大的帮忙,系统终于改造完成了,可以好好放松一下了. 老菜:呵呵,对 ...
- python接口自动化-post请求2
一.headers 1.以禅道登录为例,模拟登陆,这里需添加请求头headers,可以用fiddler抓包 2.将请求头写成字典格式 h = { "Connection": &qu ...