系统要求

被监控的主机及mysql监控账号,zabbix agent
2.0或以上(最好与zabbix-server版本相同),php,
php-mysql(php版本没有限制,经测试5.3是可以的。最好版本不要太低),Percona
Monitoring Plugins for Zabbix

mysql交互协议是开发mysql周边组件常用的协议,如JDBC,libmysql等等。

目标:

安装zabbix agent

在此我们要认识到mysql交互协议其实是半双工的交互协议,至于为什么,这里就先挖个小坑,以后再填。

  快速在21个库修改Test表的某条记录,这几个库都分别在不同的服务器上。

安装percona plugin

percona plugin需要php的支持,先安装依赖包:

yum install php php-mysql
wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.7/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.7-2.noarch.rpm

或到percona官网下载rpm包

https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/
rpm -ivh percona-zabbix-templates-1.1.7-2.noarch.rpm

为被监控的mysql增加一个专用账号

mysql>CREATE USER 'zabbix_monitor'@'127.0.0.1' IDENTIFIED BY 'zabbix456';
mysql>GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'zabbix_monitor'@'127.0.0.1';

在探讨mysql交互协议的格式之前,我们要理清一个小问题,就是mysql交互协议会用到的基本数据类型。

  通常会想到,到每个库都执行一下语句不就好了吗?这个数据库切换来切换去,挺麻烦了,通过命令行工具osql.exe就可以快速的解决这个问题。

配置percona plugin

修改为mysql账号zabbix_monitor

vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'zabbix_monitor';
$mysql_pass = 'zabbix456';
$mysql_port = 3306;

vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
HOST=127.0.0.1

如果要修改percona
plugin收集数据的时间间隔,修改下面代码中的300为适合的数字,单位是”秒”。

elif [ -e $CACHEFILE ]; then
    # Check and run the script
    TIMEFLM=`stat -c %Y /tmp/$HOST-mysql_cacti_stats.txt`
    TIMENOW=`date +%s`
    if [ `expr $TIMENOW - $TIMEFLM` -gt 300 ]; then
        rm -f $CACHEFILE
        $CMD 2>&1 > /dev/null
    fi
else

把percona要执行的执行文件放到zabbix的include目录下(zabbix调用此文件)。zabbix
agent用rpm安装默认的是:/etc/zabbix/zabbix_agentd.d/目录,具体看zabbix
agent的配置文件。

cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/

1.整数类型

方法:

在client端测试

/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg

如果返回一个数字,证明是执行成功的。

注意:通过vim get_mysql_stats_wrapper.sh中的CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"默认会在/tmp/下生成一个临时文件,这个文件在测试完要手动删除!否则会造成程序无法删除这个文件,而导致zabbix无法收集数据!

如果用root用户登录手工测试生成的文件是没有数据,使用以下命令再测试下:

/usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host 127.0.0.1 --items gg

可能会返回以下的错误:

PHP MySQLi extension is not loaded

安装php-mysql即可

yum install php-mysql

这里的整数类型可以用来表示mysql数据类型中的整数类型、日期时间类型、DOUBLE、FLOAT类型、比特类型以及枚举类型等等。

  1、新建一个文本,添加如下内容,保存,修改后缀为.bat批处理文件。

在server端测试

(如果是源码安装)

/usr/local/zabbix/bin/zabbix_get -s 192.168.1.51 -k system.cpu.util[,idle]

如果返回一个数字,证明是执行成功的。

所有的mysql整数类型都是小端的,这是网络数据的惯例。即对于16进制数0x12345678,在存储时会变成0x78563412

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.3.8,9888 -dGUANGZHOU -icmd.sql -o广州.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.3.8,9888 -dSHENZHEN -icmd.sql -o深圳.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.5.8 -dZHUHAI -icmd.sql -o珠海.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dSHANTOU -icmd.sql -o汕头.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dFOSHAN -icmd.sql -o佛山.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dSHAOGUAN -icmd.sql -o韶关.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dHEYUAN -icmd.sql -o河源.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dMEIZHOU -icmd.sql -o梅州.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.5.8 -dHUIZHOU -icmd.sql -o惠州.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dSHANWEI -icmd.sql -o汕尾.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.5.8 -dDONGGUAN -icmd.sql -o东莞.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.3.8,9888 -dZHONGSHAN -icmd.sql -o中山.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dJIANGMEN -icmd.sql -o江门.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dYANGJIANG -icmd.sql -o阳江.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.5.8 -dZHANJIANG -icmd.sql -o湛江.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.5.8 -dMAOMING -icmd.sql -o茂名.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.5.8 -dZHAOQING -icmd.sql -o肇庆.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dQINGYUAN -icmd.sql -o清远.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dCHAOZHOU -icmd.sql -o潮州.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dJIEYANG -icmd.sql -o揭阳.log
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe" -Usa -P123456 -S192.168.7.8 -dYUNFU -icmd.sql -o云浮.log
pause

配置zabbix-server前端页面

用rpm安装percona
plugin,会在/var/lib/zabbix/percona/templates生成一个模板,但percona-zabbix-templates-1.1.7-2.noarch.rpm生成的模板zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.7.xml是for
zabbix 2.0的版本,已经很旧,不适用了。

在网上找到一个for zabbix 3.0的模板,登录
zabbix web:Configuration -> Templates -> 右上角的Import,把Screens, Maps, Images都选中,导入

导入的模板的Itmes更新数据间隔也可以修改。

那么这里的整数数据类型有:int<len>(其中len =
1,2,3,4,6,8)以及可变的整数类型int<lenenc>

解释: -U 用户名  

(1)int<len>是固定长度为len字节的整数数据,如int<3>表示数字3的话,会以小端
0x030000表示。

    -P 密码  

(2)int<lenenc>是可变长度类型的整数,这种字符的长度可以是1, 3, 4,
9。

    -S IP+端口  

  我们设要表示的数值是n

    -d 库名称  

      1)当 n < 251时,int<lenenc>会以int<1>表示。

    -i cmd.sql (待执行的sql语句文件)  

  2)当251 <= n < 2^16时,int<lenenc>会以0xfc +
int<2>表示。

    -o 日志.log

  3)当2^16 <= n < 2^24时,int<lenenc>会以0xfd +
int<3>表示。

  2、再新建一个文本,添加待执行的SQL语句,如下示例,保存为cmd.sql  (cmd.sql可以随意命名,但必须与-i
cmd.sql 命名参数保持一致)

  4)当2^24 <= n < 2^64时,int<lenenc>会以0xfe +
int<8>表示。

update Test
set Name = 'EminemJk'
where ID = 1

  这就表示如果我们遇到int<lenenc>类型,我们需要先读取第一个数值type来判断

  3、运行*.bat文件,即执行cmd.sql内的SQL,很快捷。

发表评论

电子邮件地址不会被公开。 必填项已用*标注