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模版关联以后需要等待一个小时后所有数据才可以完全同步。

../../../_images/zabbix-monitor-mysql001.png ../../../_images/zabbix-monitor-mysql002.png ../../../_images/zabbix-monitor-mysql003.png ../../../_images/zabbix-monitor-mysql004.png ../../../_images/zabbix-monitor-mysql005.png

10.9.2. zabbix监控MySQL服务(低级自动发现多实例)

zabbix配置低级自动发现MySQL步骤:
  1. MySQL多实例服务器创建监控需要的脚本;

  2. MySQL多实例服务器配置MySQL监控项及参数,并用zabbix服务器使用 zabbix_get 命令测试

  3. zabbix服务器创建MySQL多实例监控的模版,并创建自动发现规则,然后创建自动发现规则对应的动作。

  4. 添加MySQL多实例服务器关联到上面创建的模版,查看zabbix监控是否自动添加了MySQL不同实例的监控。

10.9.2.1. MySQL服务器脚本配置(提取端口并输出json格式)

MySQL多实例安装参考:

MySQL多实例安装

MySQL多实例服务器需要安装zabbix-agent客户端软件,安装参考:

zabbix不同系统客户端安装配置

提取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

  1. 根据zabbix默认的MySQL模版,克隆一个新的MySQL模版,然后名字改成多实例的即可。

../../../_images/zabbix-lowlevel-decovery001.png ../../../_images/zabbix-lowlevel-decovery002.png ../../../_images/zabbix-lowlevel-decovery003.png ../../../_images/zabbix-lowlevel-decovery004.png ../../../_images/zabbix-lowlevel-decovery005.png ../../../_images/zabbix-lowlevel-decovery006.png ../../../_images/zabbix-lowlevel-decovery007.png ../../../_images/zabbix-lowlevel-decovery008.png ../../../_images/zabbix-lowlevel-decovery009.png ../../../_images/zabbix-lowlevel-decovery010.png ../../../_images/zabbix-lowlevel-decovery011.png ../../../_images/zabbix-lowlevel-decovery012.png ../../../_images/zabbix-lowlevel-decovery013.png ../../../_images/zabbix-lowlevel-decovery014.png ../../../_images/zabbix-lowlevel-decovery015.png

10.9.2.4. 添加被监控多实例MySQL测试

../../../_images/zabbix-lowlevel-decovery016.png ../../../_images/zabbix-lowlevel-decovery017.png ../../../_images/zabbix-lowlevel-decovery018.png ../../../_images/zabbix-lowlevel-decovery019.png ../../../_images/zabbix-lowlevel-decovery020.png ../../../_images/zabbix-lowlevel-decovery021.png ../../../_images/zabbix-lowlevel-decovery022.png