zabbix监控mysql
环境
Centos 7
MariaDB 10.4
Zabbix 4.0
准备
zabbix-server所在机器通常安装了zabbix_get,没有就安装下,方便调试。
在mysql所在机器安装好zabbix-agent,并连接上zabbix-server,这里假设主机名是HOST_DB(直接用IP也可以)。
zabbix-agent自带了mysql监控的配置:
shell> cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
UserParameter=mysql.size[*],bash -c '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
UserParameter=mysql.version,mysql -V
在zabbix-server所在机器上测试下:
shell> zabbix_get -s HOST_DB -k mysql.version
mysql Ver 15.1 Distrib 10.4.12-MariaDB, for Linux (x86_64) using readline 5.1
shell> zabbix_get -s HOST_DB -k mysql.ping
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'zabbix'@'localhost''
0
可以看到,获取键值mysql.version是成功的,因为它只是执行了命令mysql -V;
而mysql.ping就不行了,因为它要连接到数据库,而默认用的账号'zabbix'@'localhost'是不存在的。
进入mysql,创建zabbix用户(不需要密码,默认的权限就足够):
MariaDB [(none)]> create user 'zabbix'@'localhost'; Query OK, 0 rows affected (0.004 sec) MariaDB [(none)]> show grants for 'zabbix'@'localhost'; +--------------------------------------------+ | Grants for zabbix@localhost | +--------------------------------------------+ | GRANT USAGE ON *.* TO 'zabbix'@'localhost' | +--------------------------------------------+ 1 row in set (0.000 sec)
然后在zabbix-server机器重新测试:
shell> zabbix_get -s HOST_DB -k mysql.ping
1
shell> zabbix_get -s HOST_DB -k mysql.status[Questions]
25296056
测试通过
配置监控
zabbix-server自带了mysql监控模板Template DB MySQL,在管理后台创建一个主机,关联这个模板即可:
稍等几分钟,就可以在最新数据中看到结果:
查看集成好的图形,更加方便直观:
计算过程
mysql的几个指标Questions、Com_select、Com_update等是持续增长的,前面通过zabbix_get获取的值也确实是原值,那么在zabbix-server中是如何计算成平均每秒的值呢?
通过后台可以看到这些数据的刷新间隔是60秒,再看监控项的这个设置:
所以这个结果是:(新值 - 上次的值)÷ 60,含义为上一分钟内每秒的平均值;计算方式很科学,曲线可以准确反映负载的变化。
over