Zabbix自带的MySQL监控功能有限,所以很少采用,业界一般使用Percona Monitoring Plugins 监控 MySQL
Percona 为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提升。该版本提升了在高负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。
具体安装配置参见:https://blog.csdn.net/mchdba/article/details/51447750
虽然Percona监控插件功能非常强大,但实际工作中仍不免遇到一些特殊的监控需求不在Percona现有版本之列,本文就主要讲解如何修改Zabbix Percona监控插件模板,新增自定义的监控项目?
一.Percona监控插件的大概原理
Percona监控插件安装过程中有类似如下提示:
…
Scripts are installed to /var/lib/zabbix/percona/scripts
Templates are installed to /var/lib/zabbix/percona/templates
…
/var/lib/zabbix/percona/scripts/这里面的两个文件,get_mysql_stats_wrapper.sh脚本是监控获取MySQL状态的,ss_get_mysql_stats.php文件是配置连接数据库用户名密码的。用shell来调用PHP。
/var/lib/zabbix/percona/templates/这里面的两个文件,conf是要放在agent端/etc/zabbix/zabbix_agentd.d/下面的,用于定义监控的items;XML文件是模版文件,用于zabbix server导入。
大致原理如下
Zabbix client(按userparameter_percona_mysql.conf中的配置)通过get_mysql_stats_wrapper.sh运行ss_get_mysql_stats.php脚本产生位于/tmp/下的监控项目&值列表文件(item1:value1 item2:value2…),然后通过get_mysql_stats_wrapper.sh获取此文件内容中对应的监控项目&值。
二.自定义监控项目需要的技能
俗话说“工欲善其事,必先利其器”,要修改Percona监控插件模板,必须具备shell,php基本知识。PHP相关技能参见:http://www.w3school.com.cn/php/index.asp
三.自定义监控项目步骤
按照percona监控插件的原理可以知道,要自定义新的监控项目只要修改两个文件:userparameter_percona_mysql.conf,ss_get_mysql_stats.php
本文自定义四个监控项目,
ec:负责监控error.log中的错误数量。
s0:负责监控processlist中sql执行时间在30min-1hour的sql数量。
s1:负责监控processlist中sql执行时间在1hour-3hours的sql数量。
s3:负责监控processlist中sql执行时间大于3hours的sql数量。
3.1.修改php脚本,写入自定义的监控项目
[root@mysqldb02 scripts]# pwd
/var/lib/zabbix/percona/scripts
[root@mysqldb02 scripts]# ls -lt
total 140
-rwxr-xr-x 1 root root 60876 Apr 19 11:49 ss_get_mysql_stats.php
3.1.1.ss_get_mysql_stats.php脚本中新增客制化function:get_ipscst_array
# ============================================================================
#
# IPS DBA Customizing functions,Created by DBA@IPS.COM,Creation
# purpose:avoiding much change/intrusion to original codes
#
# ============================================================================
function get_ipscst_array($conn) {
$ipscst_array = array(
'ec' => null,
's0' => null,
's1' => null,
's3' => null
);
#1.added by ips dba for get [error] count in error.log;201904
$cmd='echo -n `cat /data/mysql/error.log|grep \'\\[ERROR\\]\'|wc -l`';
$ipscst_array['ec'] = shell_exec($cmd);
#2.get records
# get recourds count for slow query between 30min and 60min.
$rows = run_query("select count(*) as cnt from information_schema.PROCESSLIST where time between 1800 and 3599", $conn);
$ipscst_array['s0'] = $rows[0]['cnt'];
#foreach ( $rows as $row ) {
# $ipscst_array['s0'] = $row[0];
#}
# get recourds count for slow query between 1hour and 3hours.
$rows = run_query("select count(*) as cnt from information_schema.PROCESSLIST where time between 3600 and 10799", $conn);
$ipscst_array['s1'] = $rows[0]['cnt'];
# get recourds count for slow query more than 3hours.
$rows = run_query("select count(*) as cnt from information_schema.PROCESSLIST where time >=10800", $conn);
$ipscst_array['s3'] = $rows[0]['cnt'];
#3.format array
$ipsoutput = array();
foreach ($ipscst_array as $ipskey => $ipsshort ) {
$ipsoutput[] = "$ipskey:$ipsshort";
}
return $ipsoutput;
}
3.1.2.ss_get_mysql_stats.php中适当位置新增调用get_ipscst_array的代码。
3.2.修改配置文件userparameter_percona_mysql.conf新增用户参数
[root@mysqldb01 zabbix_agentd.d]# pwd
/etc/zabbix/zabbix_agentd.d
[root@mysqldb01 zabbix_agentd.d]# tail -10 userparameter_percona_mysql.conf
UserParameter=MySQL.Error-log-errcount,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh ec
UserParameter=MySQL.Slow-query-30m,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh s0
UserParameter=MySQL.Slow-query-1h,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh s1
UserParameter=MySQL.Slow-query-3h,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh s3
3.3.新增Item&Trigger in Template Percona MySQL Server
3.4.重启zabbix客户端