环境
MySQL主库:192.168.253.128
MySQL从库:192.168.253.140
Zabbix主机的ip:192.168.253.133
Zabbix版本:3.0
系统:CentOS7
第一步:安装Zabbix3.0
下载链接:https://www.zabbix.com/download?zabbix=3.0&os_distribution=centos&os_version=7&db=MySQL
官方文档: https://www.zabbix.com/documentation/3.0/manual
安装相关依赖包
yum install httpd php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml mariadb mariadb-server -y
安装zabbix agent和zabbix server
rpm -i https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-get -y
第二步:配置数据库
安装数据库
systemctl start mariadb #启动数据库
ln -sv /var/lib/mysql/mysql.sock /tmp/mysql.sock
mysql -uroot #进入mysql
创建数据库和授权用户
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
MariaDB [(none)]> quit;
导入表结构
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -ppassword zabbix
第三步:配置php时区
修改/etc/php.ini
date.timezone = Asia/Shanghai
第四步:修改Zabbix配置文件
修改/etc/zabbix/zabbix_server.conf
ListenPort=10051 ##监听的端口
LogType=file ##日志的记录的类型,这里表示记录在文件中
LogFile=/var/log/zabbix/zabbix_server.log #日志路径
LogFileSize=0 #日志大小,超过则会进行切割,0表示不切割
PidFile=/var/run/zabbix/zabbix_server.pid #pid文件路径
DBHost=localhost #数据库位置 必填
DBName=zabbix #数据库名称 必填
DBUser=zabbix #连接数据库的用户名 必填
DBPassword=password #连接数据库对应的密码 必填
DBSocket=/tmp/mysql.sock #socket文件路径
DBPort=3306 #数据库开放的端口 必填
第五步:启动zabbix server和httpd
systemctl start httpd
zabbix_server -c /etc/zabbix/zabbix_server.conf
访问http://192.168.253.133/zabbix
初始账号密码为Admin/zabbix
第六步:在MySQL上安装zabbix-agent
在主库与从库安装yum源和zabbix-agent
rpm -i https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum install zabbix-agent -y
修改配置文件/etc/zabbix/zabbix_agentd.conf
Server=192.168.253.133 #这里的ip是zabbix的Server端ip
Hostname=192.168.253.128 #这里是主机名,必须唯一所以用ip代替
从库也做对应的修改
启动zabbix-agent
systemctl start zabbix-agent
第八步:安装percona公司提供的监控模版
官方文档:https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html
下载地址: https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/
需要创建一个用户用于监控,只需要在主库创建就可以了,因为主从同步这样从库也会同步过去。
mysql> GRANT ALL ON *.* TO 'monitor'@'192.168.253.%' IDENTIFIED BY '123456';
由于获取MySQL数据的方式是通过PHP的,所以还需要下载相关的依赖
yum install php php-mysql -y
下载rpm包然后上传到MySQL主库和从库的虚拟机上
rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
安装完成后会多两个目录
/var/lib/zabbix/percona/scripts #这个目录是获取数据的脚本目录
/var/lib/zabbix/percona/templates #这个是存放模版和配置项的目录
设置配置文件
mkdir -p /etc/zabbix_agentd.conf.d/
cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix_agentd.conf.d/userparameter_percona_mysql.conf
修改主配置文件/etc/zabbix/zabbix_agentd.conf ,添加下面一行
Include=/etc/zabbix_agentd.conf.d/
修改文件/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
HOST=192.168.253.128 #需要改成监控的主机,从库则写从库的IP地址
修改文件/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'monitor'; #用于监控的用户
$mysql_pass = '123456'; #密码
测试是否能成功获取数据
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
获取到数据就表示成功
重启agent
systemctl restart zabbix-agent
从库也做对应的修改,即可
第九步:创建主机,导入模版文件
需要上传模版文件到主机
sz /var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
然后创建主机
再创建个从库的主机
导入模版
选择文件就选刚才上传的文件
导入的时候出现了一个问题
Invalid tag "/zabbix_export/date": "YYYY-MM-DDThh:mm:ssZ" is expected.
这是由于Percona公司的模版适用于Zabbix的2.x系列的,而我们这里用的是3.0版本所以不兼容,解决方法也很简单,把这个模版导入zabbix2.4然后再导出来就可以了。
从zabbix2.4导出的就可以再导入zabbix3.0了
这次就导入成功了
然后关联相关的模版
点击Update,然后在从库的主机也关联一下
发现有一些错误
原因:在获取数据的时候,会创建一个文件/tmp/192.168.253.140-mysql_cacti_stats.txt,在这个文件里存放数据,而这个文件的属主和属组是root
所以需要改一下权限就可以了
chown -R zabbix:zabbix /tmp/192.168.253.128-mysql_cacti_stats.txt
类似的也修改一下从库的文件权限
这样就可以了
第十步:自定义脚本监控主从状态
这部分只需要在从库的主机上做就可以了
脚本内容
#!/bin/bash
#连接数据库的密码需要放在/etc/my.cnf中,不然会连接失败
#表示连接的主机
DBHost=192.168.253.140
#脚本名称
prog=$(basename $0)
#用于获取主从延迟时间的函数
Seconds_Behind_Master(){
Num=$(mysql -h $DBHost -e "show slave status \G;"|grep "Seconds_Behind_Master:" | awk -F: '{print $2}')
echo $Num
}
#检查主从是否正常连接,如果正常返回50,如果连接失败错误,则返回100,后续可以根据这个值设置触发器
Master_Slave_Check(){
Num1=$(mysql -h $DBHost -e "show slave status\G;" | grep "Slave_IO_Running" | awk -F: '{print $2}' | sed 's/^[ \t]*//g')
Num2=$(mysql -h $DBHost -e "show slave status\G;" | grep "Slave_SQL_Running:" | awk -F: '{print $2}' | sed 's/^[ \t]*//g' )
if [[ $Num1 == "Yes" && $Num2 == "Yes" ]]
then
echo 50
else
echo 100
fi
}
#当用户输入错误,输出提示信息
usage() {
echo "Usage: $prog {Seconds_Behind_Master|Master_Slave_Check}"
}
main(){
case $1 in
Seconds_Behind_Master)
Seconds_Behind_Master;
;;
Master_Slave_Check)
Master_Slave_Check;
;;
*)
usage
exit 1
;;
esac
}
main $1
监控主从主要监控几个项
Slave_IO_Running: Yes #表示IO线程正在运行
Slave_SQL_Running: Yes #表示SQL线程正在运行
Seconds_Behind_Master: 0 #表示延迟了多久
然后就可以通过下面这个脚本进行监控了。使用的时候还需要注意一下,为了安全,把连接的账号密码放到了/etc/my.cnf文件中,添加下面几行
[client]
user=monitor
password=123456
测试脚本能否成功获取数据MySQL_Monitor.sh
需要给脚本加上执行权限
chmod +x MySQL_Monitor.sh
mkdir -p /etc/zabbix/zabbix_agentd_scripts/ #创建一个目录存放脚本
mv MySQL_Monitor.sh /etc/zabbix/zabbix_agentd_scripts/
创建配置文件,自定义键
[root@localhost scripts]# cat /etc/zabbix/zabbix_agentd.d/monitor.conf
UserParameter=mysql_monitor[*],/etc/zabbix/zabbix_agentd_scripts/MySQL_Monitor.sh "$1"
然后再重启zabbix-agent
systemctl restart zabbix-agent
在192.168.253.133上,获取键值测试一下
[root@localhost ~]# zabbix_get -s 192.168.253.140 -k "mysql_monitor[Master_Slave_Check]"
50
[root@localhost ~]# zabbix_get -s 192.168.253.140 -k "mysql_monitor[Seconds_Behind_Master]"
0
然后再zabbix中自定义键就行了
可以看到成功获取到数据了。