请解释一下这个模板的完整用法。链接模板
我在谷歌上搜索了很多,我已经按照描述进行配置,但我还不能使用它。能完整解释一下吗?我有两个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';
我设置了宏。(看截图)。
权限文件:
[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”和“”。主机级分配将覆盖全局分配,因此模板将使用错误的值。