zabbix 监控多个mysql_zabbix低级自动发现之mysql多实例

本文除了指名在zabbix-server操作,其他均在zabbix-agent上操作

前提:先完成单实例的监控

53e4b7a067c95490860787cf5c86ed0f.png

这里我的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 &

检查多实例是否正常

1b9decc1ccfb49cef0458326170bfba0.png

[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

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

82a7b0d41519b09c5677f27b608d0f72.png

bb056ddcb8a45ccf5731b52f71574bc3.png

af5bfa92f28f1dc3bad6cabe8f1b51ed.png

55dc90a34f148a8f3e08f61b2008f5bb.png

cb422896468dc06a6307b36b4cea15fd.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值