对使用 Zabbix Template MySQL 感到困惑(800+ 项)

对使用 Zabbix Template MySQL 感到困惑(800+ 项)

请解释一下这个模板的完整用法。链接模板

我在谷歌上搜索了很多,我已经按照描述进行配置,但我还不能使用它。能完整解释一下吗?我有两个centos 7.zabbix版本3.4。配置 zabbix-agent: /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/etc/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=/etc/zabbix mysql -N'

UserParameter=mysql.ping,HOME=/etc/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
UserParameter=mysql[*],/etc/zabbix/mysql_check.pl $1 $2 $3 $4

我创建用户mysql

CREATE USER 'david'@'%' IDENTIFIED BY 'david123';
    ---------------------------------------------------------------
MariaDB [(none)]> select user,host from mysql.user;
+--------------+-----------+
| user         | host      |
+--------------+-----------+
| cluster_user | %         |
| david        | %         |
| dav          | 127.0.0.1 |
| root         | 127.0.0.1 |
| root         | ::1       |
| dav          | db1       |
| root         | db1       |
| root         | db3       |
| dav          | localhost |
| fazeli       | localhost |
| root         | localhost |
+--------------+-----------+
11 rows in set (0.00 sec)
------------------------------------------------
     MariaDB [(none)]> show databases;           
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
    ------------------------------------------------
    MariaDB [(none)]> show grants for 'david'@'%';  
+---------------------------------------------------------------------------------------------------------------+
| Grants for david@%                                                                                            |
+---------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'david'@'%' IDENTIFIED BY PASSWORD '*76E1DED67C484EF41716EFA3545C12098380B713' |
+---------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
------------------------------------------------

我创建.my.cnf/etc/zabbix

[mysql]
user=david
password=david123
[mysqladmin]
user=david
password=david123

我的perl脚本mysql_check.pl/etc/zabbix

use strict;
use Data::Dumper;
use DBI;
my $user = shift;
my $password = shift;
my $type = shift;
my $search_like = shift;
my $dsn = "DBI:mysql:database=mysql;host=db2";
my $tmp_file = '/tmp/zbx_mysql.status';
my $zbx_sender_file = '/usr/bin/zabbix_sender';
my $zabbix_sender = '/usr/bin/zabbix_sender';

我设置了宏。(看截图)。

宏1 宏2

权限文件:

[root@db2 zabbix]# ll
total 92
-rw-r--r-- 1 root root 78654 Jan 24 06:20 mysql_check.pl
-rw-r--r-- 1 root root 11124 Jan 21 10:28 zabbix_agentd.conf
drwxr-xr-x 2 root root    38 Jan 21 09:52 zabbix_agentd.d

拜托,谢谢。

答案1

笔记:如果您的屏幕截图包含您的 MySQL 数据库的实际 root 密码,请尽快更改!

此 UserParameter 行建议mysql_check.pl采用可能由模板指定的四个参数:

UserParameter=mysql[*],/etc/zabbix/mysql_check.pl $1 $2 $3 $4

模板附带的原件mysql_check.pl开头是这样的:

#!/usr/bin/perl

use strict;
use Data::Dumper;
use DBI;

my $user = shift;
my $password = shift;

my $type = shift;

my $search_like = shift;

my $dsn = "DBI:mysql:database=mysql;host=<replace mysql host>";
my $tmp_file = '/tmp/zbx_mysql.status';
my $zbx_sender_file = '/tmp/zbx_mysql.sender';

[...continues...]

我假设您在问题中仅发布了这部分的重要/编辑行。我看到两个问题:

1.) CAS 也注意到缺乏正确的引用:

一个明显的错误是mysql_check.pl中的字符串dav需要被引用:my $user = 'dav';。对 zabbix 不太了解,所以无法提供更多帮助。 – CAS

我假设你已经解决了这个问题。

2.) 这四个shift命令应该选择接收到的命令行参数mysql_check.pl并将它们按顺序放入变量中。

在原始版本中,第一个参数存储到变量$user,第二个参数存储到变量$password,依此类推。但是您已经shift用硬编码值替换了前两个命令:这将导致第一个参数(显然是屏幕截图宏中的 MySQL 用户名,通过模板传递)被分配给$type而不是$user,并且密码以$search_like代替$password.第三个和第四个命令行参数将不使用。这两个参数将告诉我们mysql_check.pl要检查什么。

进一步查看mysql_check.pl脚本代码,您的修改版本最终会做一些无意义的事情,因为它试图将用户名解释为值$type,因此它将根本不返回任何内容或模板无法解析的内容。

不要shift从 中删除任何命令mysql_check.pl。如果出于某种原因需要对用户名和密码进行硬编码,请按如下所示操作:

[...]
use DBI;

my $user = shift;
my $password = shift;

#hard-coded user info for testing only; these should come from the zabbix macro instead
$user = 'dav';
$password = 'dav123456';

my $type = shift; 
my $search_like = shift;
[...]

此外,它看起来像您的 Zabbix 宏${MYSQL_USER},并${MYSQL_PWD}分别在全局级别分配值“dav”和“dav123456”,但在主机级别分配“root”和“”。主机级分配将覆盖全局分配,因此模板将使用错误的值。

相关内容