10.9. zabbix监控MySQL服务
10.9.1. zabbix监控MySQL服务(单实例)
10.9.1.1. zabbix客户端配置
注意
如果没有文件 /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
可以在目录/usr/share/doc/zabbix-agent-XXX/目录下查找。
备份zabbix客户端的默认mysql监控项配置文件:
1cp /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf.`date "+%F"`
用vi编辑默认的配置文件
1vi /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
上面vi不推出,输入下面,然后替换:
1:1,$ s#/var/lib/#/etc/#g
MySQL服务器授权监控使用的用户:
1mysql -uroot -p
2
3use mysql;
4grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
5grant all privileges on zabbix.* to zabbix@192.168.161.132 identified by 'password';
6flush privileges;
7exit
添加登陆的配置文件:
1vi /etc/zabbix/.my.conf
上面配置文件内容如下:
1[mysql]
2host=localhost
3user=zabbix
4password=password
5socket=/var/lib/mysql/mysql.sock
6[mysqladmin]
7host=localhost
8user=zabbix
9password=password
10socket=/var/lib/mysql/mysql.sock
zabbix服务器测试获取MySQL监控数据:
1[root@localhost ~]# zabbix_get -s '192.168.161.134' -k 'mysql.status[Uptime]'
21582
10.9.1.2. 图形监控配置
注意
zabbix监控服务器默认的MySQL监控项的更新周期是1小时,所以被监控服务器和MySQL模版关联以后需要等待一个小时后所有数据才可以完全同步。
10.9.2. zabbix监控MySQL服务(低级自动发现多实例)
- zabbix配置低级自动发现MySQL步骤:
MySQL多实例服务器创建监控需要的脚本;
MySQL多实例服务器配置MySQL监控项及参数,并用zabbix服务器使用
zabbix_get命令测试zabbix服务器创建MySQL多实例监控的模版,并创建自动发现规则,然后创建自动发现规则对应的动作。
添加MySQL多实例服务器关联到上面创建的模版,查看zabbix监控是否自动添加了MySQL不同实例的监控。
10.9.2.1. MySQL服务器脚本配置(提取端口并输出json格式)
- MySQL多实例安装参考:
- MySQL多实例服务器需要安装zabbix-agent客户端软件,安装参考:
提取MySQL服务端口并输出json格式的脚本:
1[root@mysql_001 ~]# mkdir /etc/zabbix/scripts
2[root@mysql_001 ~]# vi /etc/zabbix/scripts/discovery_mysql.sh
脚本内容如下:
1#!/bin/bash
2#mysql low-level discovery
3
4#res=`ss -lntup|awk -F "[ :\t]" '/mysqld/{print$5}'`
5res=`ss -lntup|grep mysqld|awk -F "[ :\t]+" '{print$6}'`
6port=($res)
7printf '{'
8printf '"data":['
9for key in ${!port[@]}
10do
11 if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
12 printf '{'
13 printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"},"
14 else [[ "${key}" -eq "((${#port[@]}-1))" ]]
15 printf '{'
16 printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}"
17 fi
18done
19printf ']'
20printf '}\n'
测试输出的格式是否符合json:
1[root@mysql_001 ~]# /etc/init.d/zabbix-agent status
2zabbix_agentd (pid 46516) is running...
3[root@mysql_001 ~]# zabbix_agentd -p|grep discovery
4vfs.fs.discovery [s|{"data":[{"{#FSNAME}":"/","{#FSTYPE}":"rootfs"},{"{#FSNAME}":"/proc","{#FSTYPE}":"proc"},{"{#FSNAME}":"/sys","{#FSTYPE}":"sysfs"},{"{#FSNAME}":"/dev","{#FSTYPE}":"devtmpfs"},{"{#FSNAME}":"/dev/pts","{#FSTYPE}":"devpts"},{"{#FSNAME}":"/dev/shm","{#FSTYPE}":"tmpfs"},{"{#FSNAME}":"/","{#FSTYPE}":"ext4"},{"{#FSNAME}":"/proc/bus/usb","{#FSTYPE}":"usbfs"},{"{#FSNAME}":"/boot","{#FSTYPE}":"ext4"},{"{#FSNAME}":"/data","{#FSTYPE}":"ext4"},{"{#FSNAME}":"/proc/sys/fs/binfmt_misc","{#FSTYPE}":"binfmt_misc"}]}]
5net.if.discovery [s|{"data":[{"{#IFNAME}":"lo"},{"{#IFNAME}":"eth0"},{"{#IFNAME}":"eth1"}]}]
6system.cpu.discovery [m|ZBX_NOTSUPPORTED] [Collector is not started.]
7[root@mysql_001 ~]#
8[root@mysql_001 ~]# sh discovery_mysql.sh
9{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"}]}
10[root@mysql_001 ~]# sh discovery_mysql.sh|python -m json.tool
11{
12 "data": [
13 {
14 "{#MYSQLPORT}": "3306"
15 },
16 {
17 "{#MYSQLPORT}": "3307"
18 }
19 ]
20}
10.9.2.2. MySQL服务器添加多实例监控项并测试
添加监控项:
1[root@mysql_001 ~]# vim /etc/zabbix/zabbix_agentd.d/discovery_mysql.conf
2
3UserParameter=discovery_mysql,sh /etc/zabbix/scripts/discovery_mysql.sh
为提取端口的命令 ss 设置粘贴位,否则zabbix客户端的运行的用户是zabbix,没有执行 ss 命令的权限,会获取不到端口信息。
1[root@mysql_001 zabbix]# chmod u+s `which ss`
2[root@mysql_001 zabbix]# ll `which ss`
3-rwsr-xr-x 1 root root 74840 May 29 2014 /usr/sbin/ss
测试获取信息:
1[root@zabbix_001 ~]# zabbix_get -s 192.168.1.152 -k "discovery_mysql"
2{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"}]}
如果不设置ss命令的权限或者其他设置。直接测试获取数据会有下面展示:
1[root@zabbix_001 ~]# zabbix_get -s 192.168.1.152 -k "discovery_mysql"
2{"data":[]}
修改默认的MySQL的配置:
1vi /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
2
3#UserParameter=mysql.status[*],echo "show global status where Variable_name='$2';" | HOME=/var/lib/zabbix mysql -uroot -p123 -h 127.0.0.1 -P $1 -N | awk '{print $$2}'
4UserParameter=mysql.status[*],echo "show global status where Variable_name='$2';" | HOME=/var/lib/zabbix mysql -uroot -h 127.0.0.1 -P $1 -N| awk '{print $$2}'
5
6[root@zabbix_001 ~]# zabbix_get -s 192.168.1.152 -k "mysql.status[3306,Slow_queries]"
70
8[root@zabbix_001 ~]# zabbix_get -s 192.168.1.152 -k "mysql.status[3307,Slow_queries]"
90
10
11[root@zabbix_001 ~]# zabbix_get -s 192.168.1.152 -k mysql.status[3306,Bytes_received]
123898
13[root@zabbix_001 ~]# zabbix_get -s 192.168.1.152 -k mysql.status[3306,Bytes_received]
144064
10.9.2.3. zabbix服务器低级自动发现模版配置
- 本示例只添加两个低级自动发现监控项:
Bytes_received
Bytes_sent
根据zabbix默认的MySQL模版,克隆一个新的MySQL模版,然后名字改成多实例的即可。
10.9.2.4. 添加被监控多实例MySQL测试