文章目录
zabbix 监控mysql 复制
一、使用percona 提供的插件监控
1.1 搭建主从复制环境
master:192.168.1.107
vim /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 0.0.0.0
server-id=107
log-bin=/data/mysql/master-log
grant replication slave ,replication client on *.* to rsync@'192.168.1.%' identified by '123456' ;
create database linux37 ;
mysqldump -A --single_transaction --flush-logs --master-data=1 > /opt/backup.sql
slave:192.168.1.105
server-id=105
CHANGE MASTER TO MASTER_HOST='192.168.1.107',MASTER_USER='rsync',MASTER_PASSWORD='123456', MASTER_LOG_FILE='master-log.000003', MASTER_LOG_POS=368;
start slave ;;
验证:
show slave status \G ;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
并且可以看到刚才创建的数据库
1.2 在slave 上安装procona
官方文档及下载地址:
插件下载地址:https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/
安装教程:https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html
wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/debian/artful/x86_64/percona-zabbix-templates_1.1.8-1.artful_all.deb
dpkg -i percona-zabbix-templates_1.1.8-1.artful_all.deb
root@z5:~# dpkg -c percona-zabbix-templates_1.1.8-1.artful_all.deb
drwxr-xr-x root/root 0 2018-01-10 22:46 ./
drwxr-xr-x root/root 0 2018-01-10 22:46 ./usr/
drwxr-xr-x root/root 0 2018-01-10 22:46 ./usr/share/
drwxr-xr-x root/root 0 2018-01-10 22:46 ./usr/share/doc/
drwxr-xr-x root/root 0 2018-01-10 22:46 ./usr/share/doc/percona-zabbix-templates/
-rw-r--r-- root/root 360 2018-01-10 22:46 ./usr/share/doc/percona-zabbix-templates/changelog.Debian.gz
-rw-r--r-- root/root 989 2018-01-10 22:46 ./usr/share/doc/percona-zabbix-templates/copyright
drwxr-xr-x root/root 0 2018-01-10 22:46 ./var/
drwxr-xr-x root/root 0 2018-01-10 22:46 ./var/lib/
drwxr-xr-x root/root 0 2018-01-10 22:46 ./var/lib/zabbix/
drwxr-xr-x root/root 0 2018-01-10 22:46 ./var/lib/zabbix/percona/
drwxr-xr-x root/root 0 2018-01-10 22:46 ./var/lib/zabbix/percona/scripts/
-rwxr-xr-x root/root 1251 2018-01-10 22:46 ./var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
-rw-r--r-- root/root 60679 2018-01-10 22:46 ./var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
drwxr-xr-x root/root 0 2018-01-10 22:46 ./var/lib/zabbix/percona/templates/
-rw-r--r-- root/root 18866 2018-01-10 22:46 ./var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
-rw-r--r-- root/root 269258 2018-01-10 22:46 ./var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
1.3 安装环境依赖
安装 zabbix-agent php-mysql php5.6 (7版本会使得监控项取的返回值类型有问题)
apt-get install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
apt-get update
apt-get install -y php5.6
apt-get install -y php5.6-mysql
1.4 配置并且调用percona 插件脚本
复制脚本自定义的参数
cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.conf.d/
确认agent.conf 有这项配置
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
配置 让php 能连接数据库
vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
<?php
$mysql_user = 'root';
$mysql_pass = '';
zabbix 调用shell ,而shell 脚本会调用php 的程序
root@z5:/var/lib/zabbix/percona/scripts# ll
total 76
drwxr-xr-x 2 root root 4096 Apr 16 13:47 ./
drwxr-xr-x 4 root root 4096 Apr 16 11:37 ../
-rwxr-xr-x 1 root root 1251 Jan 10 2018 get_mysql_stats_wrapper.sh*
-rw-r--r-- 1 root root 60679 Jan 10 2018 ss_get_mysql_stats.php
-rw-r--r-- 1 root root 46 Apr 16 13:32 ss_get_mysql_stats.php.cnf
测试脚本能否在本机agent取到值 , 0 也是有值
root@z5:/var/lib/zabbix/percona/scripts# bash get_mysql_stats_wrapper.sh gg
0
root@z5:/var/lib/zabbix/percona/scripts# bash get_mysql_stats_wrapper.sh gk
5
调用脚本的过程中,会产生一个临时文件。
root@z5:~# ll /tmp/localhost-mysql_cacti_stats.txt
-rw-r--r-- 1 root root 1240 Apr 16 13:53 /tmp/localhost-mysql_cacti_stats.txt
root@z5:~# chown zabbix.zabbix /tmp/localhost-mysql_cacti_stats.txt
重启agent, 在proxy 或 server 上测试
root@z2:~# zabbix_get -s 192.168.1.105 -p 10050 -k "MySQL.Key-read-requests"
0
root@z2:~# zabbix_get -s 192.168.1.105 -p 10050 -k "MySQL.history-list"
5
然后导入模板
cd /var/lib/zabbix/percona/templates/
sz zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
注意有些模板选项不支持(时间太久了),需要修改后再导入。
之后关联到主机就可以了
1.5 验证
1.6 可能遇到的坑
执行 bash -x get_mysql_stats_wrapper.sh gg 取不到值,可能是与脚本中的TIMEOUT值有关,因为缓存文件的存在
可以把 /tmp/localhost-mysql_cacti_stats.txt 删除了,把TIMEOUT=300 调成100 改小些,再试一下
TIMEFLM=`stat -c %Y /tmp/$HOST-mysql_cacti_stats.txt`
TIMENOW=`date +%s`
if [ `expr $TIMENOW - $TIMEFLM` -gt 10 ]; then
rm -f $CACHEFILE
$CMD 2>&1 > /dev/null
fi
二、 自己编写 脚本 监控
2.1 思路
主要是监控 Slave_IO_Running 和 Slave_SQL_Running 的值是否同时为yes, Seconds_Behind_Master 的值 取当从服务器 复制延的秒数
2.2 脚本内容
#!/bin/bash
host=127.0.0.1
Seconds_Behind_Master(){
NUM=`mysql -uroot -h$host -e "show slave status\G;" | grep "Seconds_Behind_Master:" | awk -F: '{print $2}'`
echo $NUM
}
master_slave_check(){
NUM1=`mysql -uroot -h$host -e "show slave status\G;" | grep "Slave_IO_Running" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM1
NUM2=`mysql -uroot -h$host -e "show slave status\G;" | grep "Slave_SQL_Running:" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM2
if test $NUM1 == "Yes" && test $NUM2 == "Yes";then
echo 50
else
echo 100
fi
}
main(){
case $1 in
Seconds_Behind_Master)
Seconds_Behind_Master;
;;
master_slave_check)
master_slave_check
;;
esac
}
main $1
使用locahost 虽然 在本机测试不报错,但是通过zabbix_get 调用时,总会报权限问题,所以我选择用127.0.0.1 登录
create user 'root'@'127.0.0.1' identified by '';
grant all on *.* to 'root'@'127.0.0.1'
skip-name-resolve
在监控Slave_IO_Running 和 Slave_SQL_Running 的值是否同时为yes 时,就可以设置触发>55 就报警
为啥不用50 ? 因为触发器的监控线 和 返回结果的线会重合
2.3 调用测试脚本
agent.conf
UserParameter=mysql[*],/etc/zabbix/zabbix_agentd.d/monitor_mysql.sh "$1"
在本机测
root@z5:/etc/zabbix/zabbix_agentd.d# bash monitor_mysql.sh master_slave_check
50
root@z5:/etc/zabbix/zabbix_agentd.d# bash monitor_mysql.sh Seconds_Behind_Master
0
在server 测
root@z2:~# zabbix_get -s 192.168.1.105 -p 10050 -k mysql[master_slave_check]
50
root@z2:~# zabbix_get -s 192.168.1.105 -p 10050 -k mysql[Seconds_Behind_Master]
0
2.4 创建模板、创建监控项、创建触发器、创建图形、关联模板
创建模板
创建监控项 主从同步检查
创建监控项 主从同步复制延迟
创建触发器
2.5 验证结果
stop slave;
微信报警已经收到结果