Skip to content

Latest commit

 

History

History
153 lines (142 loc) · 10.9 KB

7.Zabbix4.0使用percona监控MySQL数据库.md

File metadata and controls

153 lines (142 loc) · 10.9 KB

@[toc]

1. 插件下载

插件下载地址:https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/ 在这里插入图片描述

2. 插件安装

接下来安装percona zabbix插件,这个插件是用来监控MySQL的。由于我的MySQL安装在了Zabbix Server(10.0.0.2),所以这里就把插件安装在Zabbix Server上。需要注意的是插件是与Zabbix Agent结合使用的,所以这台Zabbix Server也要安装Zabbix Agent,当然在这之前我们已经在Zabbix Server上安装过Zabbix Agent。

# 下载插件rpm包
[root@Zabbix-server ~]# wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm

# 安装插件
[root@Zabbix-server ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm 
警告:percona-zabbix-templates-1.1.8-1.noarch.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:percona-zabbix-templates-1.1.8-1 ################################# [100%]
   
Scripts are installed to /var/lib/zabbix/percona/scripts
Templates are installed to /var/lib/zabbix/percona/templates

# 跳转到模板目录下,需要将配置项文件复制到/etc/zabbix/zabbix_agentd.d/目录下
[root@agent zabbix_agentd.d]# cd /var/lib/zabbix/percona/templates/
[root@agent templates]# ls
userparameter_percona_mysql.conf  zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
[root@agent templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
3. 导入模板

将/var/lib/zabbix/percona/templates/下的模板文件zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml拷贝出来,通过导入的方式添加这个模板。但是由于/var/lib/zabbix/percona/templates/下的模板版本比较低,所以不能成功导入。所以这里需要下载新的模板,模板下载地址:zbx_percona_mysql_template.xml在这里插入图片描述 在这里插入图片描述

4. 模板不兼容的处理

处理方式1:安装一个低版本的Zabbix 2.2,然后再导入这个模板

处理方式2:升级Zabbix 2.2到4.0,然后导出模板

5. 测试取监控项的值

模板导入之后,要重启Zabbix Agent使模板生效。然后开始测试取MySQL监控的项的值。

# 模板导入之后,要重启Zabbix Agent使模板生效
[root@Zabbix-server ~]# systemctl  restart zabbix-agent
# 查看监控项
[root@Zabbix-server zabbix_agentd.d]# cat userparameter_percona_mysql.conf 
UserParameter=MySQL.Sort-scan,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh kt
UserParameter=MySQL.slave-stopped,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jh
UserParameter=MySQL.Com-replace,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jz
...
UserParameter=MySQL.running-slave,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
[root@Zabbix-server zabbix_agentd.d]# sh -x /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh op
...
# 使用调试模式执行取值的命令
[root@Zabbix-server zabbix_agentd.d]# sh -x /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ij
+ ITEM=
+ HOST=localhost
++ dirname /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
+ DIR=/var/lib/zabbix/percona/scripts
+ CMD='/usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg'
+ CACHEFILE=/tmp/localhost-mysql_cacti_stats.txt
...
# 执行这个php脚本取值
[root@Zabbix-server zabbix_agentd.d]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg
gg:0[root@Zabbix-server zabbix_agentd.d]#

# 如果报MySQL拒绝用户的错误,就需要修改连接MySQL的用户名密码等(如果是二进制安装的,一定要协商MySQL的socket路径)
[root@Zabbix-server zabbix_agentd.d]# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'zabbix';
$mysql_pass = '';
$mysql_port = 3306;
$mysql_socket = NULL;

# 这时候就可以取值了
[root@Zabbix-server zabbix_agentd.d]# sh /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ih
319916
[root@Zabbix-server zabbix_agentd.d]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items oj
oj:6[root@Zabbix-server zabbix_agentd.d]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items ih
ih:310965[root@Zabbix-server zabbix_agentd.d]# 

监控数据库不是每个监控项都要取一次值,而是监控一次生成缓存(文件),5分钟之后把这个缓存文件删除 再监控下一次。每一次 监控的间隔默认是300s,可以通过修改 /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh 脚本来修改这个值。

# 修改脚本,将取值的默认间隔设置为30s
[root@Zabbix-server zabbix_agentd.d]# vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh

# 缓存文件
[root@Zabbix-server zabbix_agentd.d]# ll /tmp/localhost-mysql_cacti_stats.txt 
-rw-r--r-- 1 root root 1393 6   1 11:48 /tmp/localhost-mysql_cacti_stats.txt

在这里插入图片描述

# 上面手动执行脚本取值生成的缓存文件的用户和用户组都是root,很容易出问题,提示权限拒绝,所以要删除。
[root@Zabbix-server zabbix_agentd.d]# rm -r /tmp/localhost-mysql_cacti_stats.txt 

# 使用zabbix_get来取值,这里要把key复制粘贴下来,不要使用gg什么的
[root@Zabbix-server zabbix_agentd.d]# zabbix_get -s 127.0.0.1 -k MySQL.Open-files
5
# 这时候临时的缓存文件属于zabbix用户和zabbix用户组
[root@Zabbix-server zabbix_agentd.d]#  ll /tmp/localhost-mysql_cacti_stats.txt 
-rw-rw-r-- 1 zabbix zabbix 1398 6   1 11:56 /tmp/localhost-mysql_cacti_stats.txt

zabbix在执行脚本的时候使用的用户是zabbix

6. 主机链接新模板

在这里插入图片描述 在这里插入图片描述 设置每页显示200行,默认是50行: 在这里插入图片描述 设置间隔,与服务器中的设置一致是30s: 在这里插入图片描述 查看最新数据: 在这里插入图片描述

7. 主从状态监控项

在这里插入图片描述 对于主库是没有MySQL同步进程的,所以主从状态监控项是取不到的,所以 需要禁用这个监控项。如果是从库,报帐号密码错误,可能是脚本的原因,get_mysql_stats_wrapper.sh:

ITEM=$1
HOST=localhost
DIR=`dirname $0`
CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg"
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"

if [ "$ITEM" = "running-slave" ]; then
    # Check for running slave
    RES=`HOME=~zabbix mysql -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
    if [ "$RES" = " Yes, Yes," ]; then
        echo 1
    else
        echo 0
    fi
    exit
elif [ -e $CACHEFILE ]; then
    # Check and run the script
    TIMEFLM=`stat -c %Y /tmp/$HOST-mysql_cacti_stats.txt`
    TIMENOW=`date +%s`
    if [ `expr $TIMENOW - $TIMEFLM` -gt 30 ]; then
        rm -f $CACHEFILE
        $CMD 2>&1 > /dev/null
    fi
else
    $CMD 2>&1 > /dev/null
fi

# Parse cache file
if [ -e $CACHEFILE ]; then
    cat $CACHEFILE | sed 's/ /\n/g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}'
else
    echo "ERROR: run the command manually to investigate the problem: $CMD"
fi

那就可以试试不要使用zabbix用户取值,使用其它用户,如root用户。所以,需要修改:

RES=`HOME=~zabbix mysql -uroot -p123456 -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '\n' ','`
# 这里在没有修改的情况下也是可以取到值的,不过这里是主库,取到的值是0
[root@Zabbix-server zabbix_agentd.d]# zabbix_get -s 127.0.0.1 -k MySQL.running-slave
0