配置mysql多实例
注释:自动发现:创建监控主机;低级自动发现:创建监控项
mysql单实例是直接yum安装,开启mysql多实例
准备配置文件
#mysql3307实例
cp /etc/my.cnf /etc/my3307.cnf
vim /etc/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#mysql3308实例
cp /etc/my3307.cnf /etc/my3308.cnf
sed -i 's#3307#3308#g' /etc/my3308.cnf#创建mysql实例路径
mkdir -p /data/{3307,3308}初始化数据库3307
mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf
启动数据
mysqld_safe --defaults-file=/etc/my3307.cnf &初始化数据库3308
mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf
启动数据
mysqld_safe --defaults-file=/etc/my3308.cnf &
检查多实例mysql状态正常,多实例mysql准备完成。
配置低级自动发现
创建一个键值,定义key就是mysql.discovery
vim /etc/zabbix/zabbix_agentd.d/mysql.discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql.discovery.sh
#创建脚本实现json格式的文件内容
vim /server/scripts/mysql.discovery.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'
执行脚本mysql.discovery.sh实现json格式内容,实现对应的mysql端口
测试取值成功,注意:默认情况下载,zabbix会以zabbix用户的身份执行刚才的discover.sh脚本, netstat -lntup需要root用户的权限,所以这里我们使用suid来解决这个问题
chmod u+s /usr/bin/netstat
zabbix界面上创建自动发现规则
规则创建完成,如果要给mysql.discovery该规则添加一个过滤器,则需要创建一个正则表达式
配置一个过滤器的正则表达式,结果为假,意思就是说,将3306该MySQL的端口去掉。
标签里面的宏值,就是上面执行脚本输出的json格式内容的{#MYSQLPORT}
配置监控原型
我这里调用原来配置文件:userparameter_mysql.conf里面的key就是mysql.status[*]
拿出一条对应参考,到命令行中执行测试,
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
测试取值成功
$1就是zabbix系统中模板对应的mysql的键值内容;
$$2就是防止出现与系统中的变量发生冲突。
home就是一个变量,没有实际意义
其他说明,命令行中直接获取数据库中信息,两个中方法:
#方法一:
echo "select version()" |mysql
#方法二:
mysql -e "select version()"
数据库中查看sock文件路径
#进入指定的数据库
mysql -h 127.0.0.1 -P 3307
#查看sock文件路径
show VARIABLES like '%sock%';
修改配置文件:userparameter_mysql.conf,加入指定的主机的地址和指定端口,端口使用$2进行传参即可。
重启zabbix-agent服务器
systemctl restart zabbix-agent.service
#测试取值3307和3308均有值
zabbix_get -s 127.0.0.1 -k mysql.status[Uptime,3307]
解释:根据配置文件中对应:mysql.status[*]定义一个key
Uptime(启动时间)传参$1
3307传参为$2
创建监控项原型名称不能一致,键值里面,启动时间一个,mysql端口是变量,因有过滤3306。所以每个uptime对应两个值。
添加一个应用集mysqls。然后点击添加
验证,查看监测-最新数据,选择对应主机和应用集,查看最新数据即可,对应两条监控项,包含3307和3308数据库。