如何使用zabbix监控mysql
如何使用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

-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql怎么查询临时表 2023-05-14 07:00:02