Zabbix监控案例(八)MySQL监控
原本有一个数据库,现配置数据库主从复制。原本的数据库为主服务器,新装的数据库为从服务器。
- 从数据库上
- 在从服务器上安装数据库
ubuntu
apt update
apt install mysql-server-5.7 mysql-client-5.7
CentOS
yum install mariadb mariadb-server
- 主数据库上
- 主服务器上,数据库配置开启log-bin
server-id=10
log-bin
- 重启服务
systemctl restart mariadb
- 授权复制帐号
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456';
- 导出现有的数据库
mysql -uroot -hlocalhost -A > all.sql
- 从数据库上
- 从数据库设置server-id,
vim /etc/mysql/mysql.conf.d/mysql.cnf
server-id=10
- 重启服务,并导入数据
systemctl restart mysql
mysql -uroot < all.sql
- 进入数据库,配置主从
CHANGE MASTER TO MASTER_HOST='192.168.99.21',MASTER_USER='repluser',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=9525112;
start slave;
- 查看状态
show slave status \G;
-
下载监控插件
https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/
-
安装
dpkg -i percona-zabbix-templates_1.1.8-1.artful.all.deb
add-apt-repository ppa:ondrej/php
apt-get update
apt install php5.6 php-mysql
- 在从服务器上,安装zabbix-agent,准备监控从数据库
dpkg -i zabbix-release_4.0-3+bionic_all.deb
apt update
apt install zabbix-agent
- 配置agent
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.99.21
ServerActive=192.168.99.21
Hostname=192.168.99.24
- 复制监控的配置到agent配置目录下
cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
- 编辑配置文件
vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
<?php
...
$mysql_user='root';
$mysql_pass='123';
如果数据库没有设置密码就留空
- 重启服务
systemctl restart zabbix-agent
-
zabbix server端上添加主机
-
本地测试
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
这个脚本中主要执行的是这个命令(图中划线),–host后面跟的是数据库的ip.
这个脚本执行结果会返回一个数字,如果没有则检查数据库能否连通
- zabbix服务端测试
zabbix_get -s 192.168.99.24 -p 10050 -k "MySQL.Key-read-requests"
- 导入模板(下载模板)
-
关联模板
-
稍等一会,查看数据
-
有数据了
如何解决这些问题
cannot convert value to numeric type
#
Value "sudo: no tty present and no askpass program specified0" of type "string" is not suitable for value type "Numeric (float)"
#
Value "rm: cannot remove '/tmp/127.0.0.1-mysql_cacti_stats.txt': Operation not permitted0" of type "string" is not suitable for value type "Numeric (float)"
授权给zabbix用户root权限
# vim /etc/sudoers
zabbix ALL =(ALL) NOPASSWD: ALL
修改脚本,在31行的rm前加sudo
vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
再看看监控项是否启用
监控主从复制状态
- 准备脚本
touch mysql_monitor.sh
chmod +x mysql_monitor.sh
vim mysql_monitor.sh
#!/bin/bash
DBHOST="127.0.0.1"
DBUser="root"
DBPass="123"
Seconds_Behind_Master(){
NUM=`mysql -u${DBUser} -p${DBPass} -h${DBHOST} -e "show slave status\G;" 2> /dev/null | grep "Seconds_Behind_Master:" | awk -F: '{print $2}'`
echo $NUM
}
master_slave_check(){
NUM1=`mysql -u${DBUser} -p${DBPass} -h${DBHOST} -e "show slave status\G;" 2> /dev/null | grep "Slave_IO_Running" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM1
NUM2=`mysql -u${DBUser} -p${DBPass} -h${DBHOST} -e "show slave status\G;" 2> /dev/null | grep "Slave_SQL_Running:" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
#echo $NUM2
if test $NUM1 == "Yes" && test $NUM2 == "Yes";then
echo 1
else
echo 0
fi
}
main(){
case $1 in
Seconds_Behind_Master)
Seconds_Behind_Master;
;;
master_slave_check)
master_slave_check
;;
esac
}
main $1
注意修改你的数据库连接的信息
- 添加配置,也可以在主配置文件里
# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql_monitor[*],/etc/zabbix/zabbix_agentd.d/mysql_monitor.sh "$1"
- 重启agent
systemctl restart zabbix-agent.service
- server端测试
zabbix_get -s 192.168.99.24 -p 10050 -k "mysql_monitor[master_slave_check]"
Warning忽略即可
-
在主机添加监控项
-
验证数据