Observação: se a captura de tela incluiu a senha raiz do seu banco de dados MySQL, altere-a o mais rápido possível!
Esta linha do UserParameter sugere que mysql_check.pl
usa quatro parâmetros que provavelmente são especificados pelo modelo:
UserParameter=mysql[*],/etc/zabbix/mysql_check.pl $1 $2 $3 $4
O original mysql_check.pl
que vem com o modelo tem isso no começo:
#!/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...]
Suponho que você tenha postado apenas as linhas importantes / editadas desta parte em sua pergunta. Eu vejo dois problemas:
1.) a falta de cotação adequada que também foi observada por cas:
one obvious error is that the string dav in mysql_check.pl needs to be quoted: my $user = 'dav';. don't know much about zabbix so can't help beyond that. – cas
Eu suponho que você já corrigiu isso.
2.) os quatro comandos shift
devem escolher os parâmetros da linha de comando recebidos por mysql_check.pl
e colocá-los em variáveis, em ordem.
Na versão original, o primeiro parâmetro é armazenado na variável $user
, o segundo em $password
e assim por diante. Mas você substituiu os dois primeiros dos comandos shift
por valores codificados: isso fará com que o primeiro parâmetro (que aparentemente é o nome de usuário do MySQL da sua macro capturada, passou pelo modelo) seja atribuído a $type
em vez de $user
e a senha para $search_like
em vez de $password
. Os parâmetros da terceira e quarta linha de comando não serão usados. E esses dois parâmetros informariam o mysql_check.pl
do que verificar.
Olhando mais para o código de script mysql_check.pl
, sua versão modificada acabará fazendo coisas sem sentido porque está tentando interpretar o nome de usuário como o valor $type
, então ele retornará nada ou algo do tipo não será capaz de analisar.
Não remova nenhum comando shift
de mysql_check.pl
. Se você precisar codificar o nome de usuário e a senha por algum motivo, faça assim:
[...]
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;
[...]
Além disso, parece que suas macros do Zabbix ${MYSQL_USER}
e ${MYSQL_PWD}
têm os valores 'dav' e 'dav123456' respectivamente designados no nível global, mas 'root' e '' no nível do host. As atribuições no nível do host substituirão as globais, portanto, o modelo usará os valores incorretos.