5 Parâmetros de usuário

Visão geral

Às vezes, você pode querer executar uma verificação do agent que não vem predefinida no Zabbix. É nesse caso que os parâmetros de usuário podem ajudar.

Você pode escrever um comando que obtenha os dados necessários e incluí-lo no parâmetro de usuário do arquivo de configuração do agent (parâmetro de configuração UserParameter).

Um parâmetro de usuário tem a seguinte sintaxe:

UserParameter=<key>,<command>

Como você pode ver, um parâmetro de usuário também contém uma chave. A chave será necessária ao configurar um item. Insira uma chave de sua escolha que seja fácil de referenciar (ela deve ser exclusiva dentro de um host).

Reinicie o agent ou use a opção de controle em tempo de execução do agent para carregar o novo parâmetro, por exemplo:

zabbix_agentd -R userparameter_reload

Em seguida, ao configurar um item, insira a chave para referenciar o comando do parâmetro de usuário que você deseja executar.

Os parâmetros de usuário são comandos executados pelo Zabbix agent. Observe que até 16 MB de dados podem ser retornados antes das etapas de pré-processamento do valor do item.

Em sistemas UNIX, o agent executa comandos de parâmetros de usuário usando /bin/sh, sob a conta do sistema operacional que executa o agent (geralmente zabbix). Essa conta deve ter permissões suficientes para executar o comando e acessar todos os arquivos, sockets ou credenciais utilizados por ele.

Os parâmetros de usuário obedecem ao tempo limite da verificação do agent; se o tempo limite for atingido, o processo bifurcado do parâmetro de usuário será encerrado.

Veja também:

Exemplos de user parameters simples

Exemplo 1: Valor constante

UserParameter=ping,echo 1

Um item com a chave ping sempre retorna 1.

Exemplo 2: Disponibilidade do server MySQL

UserParameter=mysql.ping,mysqladmin ping 2>/dev/null | grep -c alive

Retorna 1 se o server MySQL responder e 0 caso contrário. O redirecionamento 2>/dev/null descarta a saída de erro padrão de mysqladmin. Sem ele, uma mensagem de erro poderia ser retornada junto com 0, fazendo com que um item com o tipo de informação Numeric se tornasse sem suporte (consulte Resultado do comando).
Este exemplo pressupõe que as credenciais de conexão do MySQL estejam configuradas para a conta do sistema operacional que executa o Zabbix agent, por exemplo, em um arquivo de opções do MySQL acessível a essa conta.

Parâmetros de usuário flexíveis

Os parâmetros de usuário flexíveis aceitam parâmetros junto com a chave. Dessa forma, um parâmetro de usuário flexível pode servir de base para a criação de vários itens.

Os parâmetros de usuário flexíveis têm a seguinte sintaxe:

UserParameter=key[*],command
Parâmetro Descrição
Key Chave exclusiva do item. O [*] define que essa chave aceita parâmetros entre colchetes.
Os parâmetros são informados ao configurar o item.
Command Comando a ser executado para avaliar o valor da chave.
Somente para parâmetros de usuário flexíveis:
Você pode usar referências posicionais $1…$9 no comando para fazer referência ao respectivo parâmetro na chave do item.
O Zabbix analisa os parâmetros incluídos em [ ] na chave do item e substitui $1,...,$9 no comando de acordo.
$0 será substituído pelo comando original (antes da expansão de $0,...,$9) a ser executado.
As referências posicionais são interpretadas independentemente de estarem entre aspas duplas (") ou simples (').
Para usar referências posicionais sem alterações, especifique dois cifrões - por exemplo, awk '{print $$2}'. Nesse caso, $$2 será convertido em $2 ao executar o comando.

As referências posicionais com o sinal $ são pesquisadas e substituídas pelo Zabbix agent somente para parâmetros de usuário flexíveis. Para parâmetros de usuário simples, esse processamento de referências é ignorado e, portanto, não é necessário usar aspas para nenhum sinal $.

Por padrão, determinados caracteres não são permitidos em parâmetros de usuário. Para obter a lista completa de caracteres, consulte UnsafeUserParameters.

Exemplos de parâmetros de usuário flexíveis

Os exemplos abaixo são apenas para fins de demonstração e não devem ser usados em produção sem as devidas medidas de segurança. Os parâmetros de usuário flexíveis definidos usando [*] aceitam argumentos que podem introduzir riscos de injeção de comandos se não forem tratados com segurança.

Exemplo 1: Retornando um parâmetro

UserParameter=ping[*],echo $1

Você pode definir vários itens usando este parâmetro de usuário, com chaves no formato ping[parameter]:

  • ping[0] - retorna 0.
  • ping[hello] - retorna hello.

Exemplo 2: Disponibilidade do MySQL em um host especificado

Este parâmetro pode ser usado para monitorar a disponibilidade de um server MySQL em um host especificado.

UserParameter=mysql.ping[*],mysqladmin -h "$1" ping 2>/dev/null | grep -c alive

O item com a chave mysql.ping[db1.example.com] retorna 1 se o server MySQL nesse host responder e 0 caso contrário.
Este exemplo pressupõe que as credenciais de conexão do MySQL estejam configuradas para a conta do sistema operacional que executa o agent do Zabbix, por exemplo, em um arquivo de opções do MySQL acessível a essa conta.

Exemplo 3: Contagem de linhas que correspondem a um padrão

Este parâmetro pode ser usado para contar o número de linhas em um arquivo.

UserParameter=grep.count[*],grep -c "$2" "$1"

Retorna o número de linhas no arquivo especificado pelo primeiro argumento que correspondem à expressão regular especificada pelo segundo argumento. Por exemplo, grep.count[/etc/passwd,root] retorna o número de linhas em /etc/passwd que correspondem à expressão regular root.

Resultado do comando

O valor de retorno do comando é a saída padrão juntamente com a saída de erro padrão produzida pelo comando.

Um item que retorna texto (informação do tipo caractere, log ou texto) não se tornará não suportado no caso de uma saída de erro padrão.

O valor de retorno é limitado a 16 MB (incluindo espaços em branco finais que são truncados); limites do banco de dados também se aplicam.

Parâmetros de usuário que retornam texto (informação do tipo caractere, log ou texto) também podem retornar um espaço em branco. Em caso de resultado inválido, o item se tornará não suportado.