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)传参数的定义文件
1
|
less
/etc/zabbix/zabbix_agentd
.d
/userparameter_mysql
.conf
|
2)传参的定义格式
可发现如下行:
1
|
UserParameter=mysql.status[*],
echo
"show global status where Variable_name='$1';"
| HOME=
/var/lib/zabbix
mysql -N |
awk
'{print $$2}'
|
定义以逗号分隔,可简化如下:
1
|
用户自定义参数名称,用户自定义参数取值(shell命令)
|
注意:
用户自定义参数名称:“*”代表Zabbix Server可传入任何具体的变量参数
用户自定义参数取值:“$1”代表Zabbix Server可传入的变量参数
3)如传入参数为“Uptime”则变为
1
|
UserParameter=mysql.status[Uptime],
echo
"show global status where Variable_name='Uptime';"
| HOME=
/var/lib/zabbix
mysql -N |
awk
'{print $$2}'
|
4)用户自定义参数取值部分Shell指定可取得具体的数值(需先数据库授权和连接数据库授权配置)
所以指定结果是:
1
|
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
3.2 使用户自定义参数生效
In Zabbix Agens:
vim编辑/etc/zabbix/zabbix_agentd.conf开启以下两个参数
1
2
|
Include=
/etc/zabbix/zabbix_agentd
.d/
UnsafeUserParameters=0
|
注:完成以上配置“userparameter_mysql.conf”里面的定义才生效
3.3 授予Zabbix Agens数据访问权限
In Zabbix Server:
MySQL权限配置
1
2
3
4
|
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"目录所定义路径
1
|
cat
/etc/zabbix/zabbix_agentd
.d
/userparameter_mysql
.conf |
egrep
-
v
"(^#|^$)"
|
grep
HOME
|
显示如下:
1
2
3
|
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文件的路径
1
|
grep
pid-
file
/etc/my
.cnf
|
显示如下:
1
|
pid-
file
=
/var/run/mysqld/mysqld
.pid
|
3.4.3 配置数据库连接文件
根据前面获取到的路径创建数据库连接文件
vim编辑/var/lib/zabbix/.my.cnf输入如下内容:
1
2
3
4
5
6
7
8
9
10
|
[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服务
1
|
/etc/init
.d
/zabbix-agent
restart
|
3.6 命令行确认自定义KEY
In Zabbix Agens:
1
|
echo
"show global status where Variable_name='Uptime';"
| HOME=
/var/lib/zabbix
mysql -N |
awk
'{print $2}'
|
In Zabbix Server:
1
2
|
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”查看监控的图像
一些Zabbix相关教程集合: