如何使用zabbix监控mysql

文 / @WordPress主题

如何使用zabbix监控MySQL

MySQL作为目前最流行的数据库之一,在实际使用中需要进行监控,以防止出现异常情况。本文将介绍如何使用zabbix监控MySQL。

1. 监控规划

在创建监控项之前,要考虑要监控哪些内容,如何监控,监控数据如何存储,监控数据如何展现,如何处理报警等。在进行监控规划时,需要对zabbix很熟悉,并确保监控的需求得到满足。

需求一:监控MySQL的状态,当状态发生异常,发出报警。

需求二:监控MySQL的操作,并用图表展现。

2. 自定义脚本监控扩展Agent

zabbix server与agent之间的监控数据采集,主要是通过zabbix server主动向agent询问某个key的值,agent会根据key去调用相应的函数去获取这个值并返回给server端。但是,zabbix 2.4.7的agent没有内置MySQL的监控功能(但是,zabbix server提供了相应的Template配置),因此我们需要使用zabbix的UserParameters功能,为MySQL添加监控脚本。

3. 授权MySQL登录用户(agent端)

mysql>grant usage on *.* to zabbix@127.0.0.1 identified by '123456';
mysql>flush privileges;

在登录后进行复制。

4. agent端配置存活检测

利用UserParameter参数自定义AgentKey。对于需求一,我们采用mysqladmin这个工具来实现,命令如下:
#mysqladmin -h127.0.0.1 -uzabbix -p123456 ping
mysqldisalive

如果MySQL状态正常,将显示mysqldisalive,否则将提示无法连接。但是,服务器端可能无法理解mysqldisalive这样的句子,因此服务器端最好只接收1和0,其中1表示服务可用,0表示服务不可用。所以,我们需要进一步改进这个命令,如下所示:
#mysqladmin -h127.0.0.1 -uzabbix -p123456 ping | grep -c alive
1

要将用户名和密码放在命令中进行监控,在以后的维护过程中不方便,因此我们在/var/lib/zabbix/下创建一个包含MySQL用户名和密码的配置文件“.my.cnf”,内容如下:
user=zabbix
host=127.0.0.1
password='123456'

有了这个文件后,命令将变为:
HOME=/var/lib/zabbix mysqladmin ping | grep -c alive

完成这一步后,需要将这个监控命令添加到zabbix agent中,并与一个key对应。我们使用mysql.ping作为MySQL状态的key。首先,在/etc/zabbix/zabbix_agentd.conf中,去除“Include=/etc/zabbix_agentd.d/”这一行的注释符。其次,在/etc/zabbix/zabbix_agentd.d/目录下创建userparameter_mysql.conf文件,在文件中添加如下命令:
UserParameter=mysql.ping,HOM=/var/lib/zabbix/mysqladmin ping | grep -c alive

使用下面的命令测试是否正常工作:
#/usr/sbin/zabbix_agentd -t mysql.ping

5. 创建主机,关联模板,创建监控项

创建主机、关联模板和创建监控项都是在zabbix web端进行的。

6. 监控MySQL性能的脚本

创建监控MySQL性能的脚本,使用zabbix的UserParameters功能,在监控项中添加相应的key。示例代码如下:
UserParameter=mysql.status[*],/etc/zabbix/zabbix_agentd.d/check_mysql.sh $1
UserParameter=mysql.version,mysql -V

而check_mysql.sh的内容如下:

#!/bin/bash
#-------------------------------------------------------------------------------
# FileName: check_mysql.sh
# Revision: 1.0
#-------------------------------------------------------------------------------
# Copyright:
# License: GPL

# 用户名
MYSQL_USER='zabbix'

# 密码
MYSQL_PWD='zabbix@123'

# 主机地址/IP
MYSQL_HOST='ip'

# 端口
MYSQL_PORT='3306'

# 数据连接
MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"

# 参数是否正确
if [ $# -ne "1" ]; then
echo "arg error!"
fi

# 获取数据
case $1 in
Uptime)
result=`${MYSQL_CONN} status 2>/dev/null | cut -f2 -d":" | cut -f1 -d"T"`
echo $result
;;
Com_update)
result=`${MYSQL_CONN} extended-status 2>/dev/null | grep -w "Com_update" | cut -d"|" -f3`
echo $result
;;
Slow_queries)
result=`${MYSQL_CONN} status 2>/dev/null | cut -f5 -d":" | cut -f1 -d"O"`
echo $result
;;
Com_select)
result=`${MYSQL_CONN} extended-status 2>/dev/null | grep -w "Com_select" | cut -d"|" -f3`
echo $result
;;
Com_rollback)
result=`${MYSQL_CONN} extended-status 2>/dev/null | grep -w "Com_rollback" | cut -d"|" -f3`
echo $result
;;
Questions)
result=`${MYSQL_CONN} status 2>/dev/null | cut -f4 -d":" | cut -f1 -d"S"`
echo $result
;;
Com_insert)
result=`${MYSQL_CONN} extended-status 2>/dev/null | grep -w "Com_insert" | cut -d"|" -f3`
echo $result
;;
Com_delete)
result=`${MYSQL_CONN} extended

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。