如何实现Zabbix监控MySQL数据库?

Zabbix

1 前言

Zabbix对于MySQL的监控官方教程好像还没有给出明确的配置方法,以下是我参阅一些资料整理出来的配置方法,现与各位博友分享。

2 理论部分

2.1 Key值的获取原理

2.1.1 Zabbix Server部分的Key定义

查看模板的Items

模板定义的Items如下:

以Items“MySQL uptime”为例Key的内容如下:

可见,关键部分是Key值mysql.status[Uptime]相当于变量名称

2.1.2 Zabbix Agens部分的Key传参定义

1)传参数的定义文件

less /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

2)传参的定义格式
可发现如下行:

UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'

定义以逗号分隔,可简化如下:
用户自定义参数名称,用户自定义参数取值(shell命令)
注意:
用户自定义参数名称:“*”代表Zabbix Server可传入任何具体的变量参数
用户自定义参数取值:“$1”代表Zabbix Server可传入的变量参数
3)如传入参数为“Uptime”则变为

UserParameter=mysql.status[Uptime],echo "show global status where Variable_name='Uptime';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'

4)用户自定义参数取值部分Shell指定可取得具体的数值(需先数据库授权和连接数据库授权配置)

所以指定结果是:

UserParameter=mysql.status[Uptime],165538

就这样,MySQL的值被送到Zabbix Server

3 实践部分

3.1 环境描述

Zabbix Server:
ipaddress=10.168.0.160
hostname=zabbix

Zabbix Agens:
ipaddress=10.168.0.99
hostname=mysqlSer
app=mysqld

Zabbix Server&Agens端的配置请参阅:
http://www.cmdschool.org/archives/435

3.2 使用户自定义参数生效

In Zabbix Agens:

vim /etc/zabbix/zabbix_agentd.conf

开启以下两个参数

Include=/etc/zabbix/zabbix_agentd.d/
UnsafeUserParameters=0

注:完成以上配置“userparameter_mysql.conf”里面的定义才生效

3.3 授予Zabbix Agens数据访问权限

In Zabbix Server:
MySQL权限配置

mysql -uroot -p
GRANT SELECT ON mysql.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix';
flush privileges;
show grants for zabbix@localhost;

3.4 配置Zabbix Agens数据库访问权限

In Zabbix Agens:

3.4.1 确定数据库连接文件的目录

用如下命令查看”HOME”目录所定义路径

cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf | egrep -v "(^#|^$)" | grep HOME

显示如下:

UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
UserParameter=mysql.size[*],echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema='$1'")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name='$2'");" | HOME=/var/lib/zabbix mysql -N
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive

注:以上表明数据库连接文件应当配置在“/var/lib/zabbix”

3.4.2 确定MySQL的PID文件路径

用如下命令查看MySQL的PID文件的路径

grep pid-file /etc/my.cnf

显示如下:

pid-file=/var/run/mysqld/mysqld.pid

3.4.3 配置数据库连接文件

根据前面获取到的路径创建数据库连接文件

vim /var/lib/zabbix/.my.cnf

输入如下内容:

[mysql]
host     = localhost
user     = zabbix
password = zabbix
socket   = /var/lib/mysql/mysql.sock
[mysqladmin]
host     = localhost
user     = zabbix
password = zabbix
socket   = /var/lib/mysql/mysql.sock

3.5 重启并使配置生效

In Zabbix Agens:
重启Agent服务

/etc/init.d/zabbix-agent restart

3.6 命令行确认自定义KEY

In Zabbix Agens:

echo "show global status where Variable_name='Uptime';" | HOME=/var/lib/zabbix mysql -N | awk '{print $2}'

In Zabbix Server:

zabbix_get -s 10.168.0.99 -k mysql.status[Uptime]
zabbix_get -s 10.168.0.99 -k mysql.version

3.7 添加主机的监控模板

In Zabbix的web控制台
Configuration->Hosts->单击“主机名称”->Templates->Select->Template App MySQL->Add->Update

3.8 确认监控结果

Monitoring->Graphs
Host选择具体的“主机名称”
Graph选择“MySQL bandwidth”或“MySQL operations”查看监控的图像

——————————————————
参阅文档:
http://blog.itpub.net/29733787/viewspace-1735709/
http://coolnull.com/3733.html
http://www.51itong.net/zabbix-mysql-12945.html

没有评论

发表回复

Zabbix
如何解决zabbix agent无法启动问题?

1 前言 笔者今天需要启动安装于RHEL 8的zabbix agent,结果死活起不来,于是笔者想到 …

Zabbix
如何部署Zabbix的Proxy服务器?

1 理论部分 Zabbix proxy适用于大规模分布式监控场景,采用的一种分担Server端压力的 …

Zabbix
如何部署企业监控Zabbix 2.4.7?

1 理论部分 zabbix(音同 zbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能 …