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

posted @ 2020-08-06 12:36  晚来秋  阅读(436)  评论(0编辑  收藏  举报