zabbix低级自动发现之mysql多实例
本文除了指名在zabbix-server操作,其他均在zabbix-agent上操作
前提:先完成单实例的监控
这里我的mysql单实例是直接yum安装的
开启mysql多实例
准备配置文件
[root@agent ~]# cp /etc/my.cnf /etc/my3307.cnf
[root@agent ~]# vim /etc/my3307.cnf
my3307.cnf内容如下
[mysqld]
datadir=/data/3307/
socket=/data/3307/mysql.sock
port=3307
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/data/3307/mysqld.log
pid-file=/data/3307/mysqld.pid
[root@agent ~]# cp /etc/my3307.cnf /etc/my3308.cnf
[root@agent ~]# sed -i 's#3307#3308#g' /etc/my3308.cnf
初始化数据库3307
[root@agent ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf
[root@agent ~]# mysqld_safe --defaults-file=/etc/my3307.cnf &
初始化数据库3308
[root@agent ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf
[root@agent ~]# mysqld_safe --defaults-file=/etc/my3308.cnf &
检查多实例是否正常
[root@agent ~]# mkdir /data/3306
[root@agent ~]# ln -s /var/lib/mysql/mysql.sock /data/3306/
检查
[root@agent ~]# find /data -name "*.sock"
/data/3306/mysql.sock
/data/3308/mysql.sock
/data/3307/mysql.sock
[root@agent ~]# chmod 755 /data/*
[root@agent ~]# ll /data/* -d
drwxr-xr-x 2 root root 4096 Nov 23 01:45 /data/3306
drwxr-xr-x 4 mysql root 4096 Nov 23 01:39 /data/3307
drwxr-xr-x 4 mysql root 4096 Nov 23 01:40 /data/3308
[root@agent ~]# netstat -lntp|awk -F "[ :]+" '/mysqld/{print$5}'
3306
3307
3308
[root@agent ~]# mkdir /etc/zabbix/scripts
[root@agent ~]# vi /etc/zabbix/scripts/discover.sh
#!/bin/bash
#mysql low-level discovery
res=`netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$5}'`
port=($res)
printf '{'
printf '"data":['
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"},"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}"
fi
done
printf ']'
printf '}\n'
测试脚本
[root@agent ~]# sh /etc/zabbix/scripts/discover.sh
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}
sed -i '98a zabbix\tALL=(ALL)\tNOPASSWD: /bin/netstat' /etc/sudoers
sed -i 's@^Defaults requiretty@#Defaults requiretty@g' /etc/sudoers
[root@agent ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@agent zabbix_agentd.d]# vi mysql.conf
内容如下:
UserParameter=mysql.discovery,sh /etc/zabbix/scripts/discover.sh
[root@agent zabbix_agentd.d]# service zabbix-agent restart
Shutting down Zabbix agent: [ OK ]
Starting Zabbix agent: [ OK ]
默认情况下载,zabbix会以zabbix用户的身份执行刚才的discover.sh脚本, netstat -lntup需要root用户的权限,所以这里我们使用suid来解决这个问题
chmod u+s /usr/bin/netstat
在zabbix-server上测试
[root@zabbix-server ~]# zabbix_get -s 192.168.56.23 -k mysql.discovery
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}
[root@agent zabbix_agentd.d]# cd /etc/zabbix/zabbix_agentd.d
[root@agent zabbix_agentd.d]# vi mysql.conf
修改后的内容为
UserParameter=mysql.discovery,sh /etc/zabbix/scripts/discover.sh
UserParameter=mysql-status[*],echo "show global status where Variable_name='$2';" |mysql -S /data/$1/mysql.sock -N | awk '{print $$2}'
UserParameter=mysql-ping[*],mysqladmin -S /data/$1/mysql.sock ping | grep -c alive
UserParameter=mysql-version,mysql -V
[root@agent zabbix_agentd.d]# service zabbix-agent restart
Shutting down Zabbix agent: [ OK ]
Starting Zabbix agent: [ OK ]
在zabbix-server上分别进行如下测试
[root@zabbix-server ~]# zabbix_get -s 192.168.56.23 -k mysql-ping[3306]
1
[root@zabbix-server ~]# zabbix_get -s 192.168.56.23 -k mysql-ping[3307]
1
[root@zabbix-server ~]# zabbix_get -s 192.168.56.23 -k mysql-ping[3308]
1
导入我制作好的模板mysql_LLD_templates.xml文件
评论已关闭