3 Scripts

Visão geral

Na seção Alertas > Scripts, é possível configurar e manter scripts globais definidos pelo usuário.

Este menu está disponível somente para usuários do tipo SuperAdmin.

Os scripts globais, dependendo do escopo configurado e também das permissões do usuário, estão disponíveis para execução:

Os scripts são executados no Zabbix agent, no Zabbix server (proxy) ou somente no Zabbix server. Consulte também Execução de comandos.

Tanto no Zabbix agent quanto no Zabbix proxy, os scripts remotos são desabilitados por padrão. Eles podem ser habilitados da seguinte forma:

  • Para comandos remotos executados no Zabbix agent:
    • adicionando um parâmetro AllowKey=system.run[<command>,*] para cada comando permitido na configuração do agent; * representa o modo wait ou nowait;
  • Para comandos remotos executados no Zabbix proxy:
    • Aviso: não é necessário habilitar comandos remotos no Zabbix proxy se os comandos remotos forem executados no Zabbix agent monitorado pelo Zabbix proxy. No entanto, se for necessário executar comandos remotos no Zabbix proxy, defina o parâmetro EnableRemoteCommands como '1' na configuração do proxy.

A execução de scripts globais no Zabbix server pode ser desabilitada definindo EnableGlobalScripts=0 na configuração do server. Para novas instalações, desde o Zabbix 7.0, a execução de scripts globais no Zabbix server é desabilitada por padrão.

É exibida uma lista dos scripts existentes com seus detalhes.

Dados exibidos:

Coluna Descrição
Nome Nome do script. Clicar no nome do script abre o formulário de configuração do script.
Escopo Escopo do script: operação de ação, ação manual do host ou ação manual do evento. Essa configuração determina onde o script está disponível: nos comandos remotos das operações de ação, no menu do host ou no menu de eventos, respectivamente.
Usado em ações Todas as ações nas quais o script é usado são exibidas, precedidas pelo número total dessas ações.
Clicar no nome da ação abre o formulário de configuração da ação. Se o usuário não tiver permissões para a ação, o nome não será clicável.
Tipo É exibido o tipo de script: comando URL, Webhook, Script, SSH, Telnet ou IPMI.
Executar em É exibido se o script será executado no Zabbix agent, no Zabbix proxy ou no server, ou somente no Zabbix server.
Comandos São exibidos todos os comandos a serem executados no script.
Nada é exibido aqui para webhooks.
Grupo de usuários É exibido o grupo de usuários para o qual o script está disponível (ou Todos, para todos os grupos de usuários).
Grupo de hosts É exibido o grupo de hosts para o qual o script está disponível (ou Todos, para todos os grupos de hosts).
Acesso ao host É exibido o nível de permissão para o grupo de hosts: Leitura ou Gravação. Somente usuários com o nível de permissão necessário terão acesso à execução do script.

Para configurar um novo script, clique no botão Criar script no canto superior direito.

Opções de edição em massa

Um botão abaixo da lista oferece uma opção de edição em massa:

  • Delete - excluir os scripts

Para usar essa opção, marque as caixas de seleção antes dos respectivos scripts e clique em Delete.

Usando o filtro

Você pode usar o filtro para exibir apenas os scripts de seu interesse. Para melhor desempenho na pesquisa, os dados são pesquisados com macros não resolvidos.

O link Filter está disponível acima da lista de scripts. Se você clicar nele, um filtro ficará disponível, no qual você pode filtrar scripts por nome e escopo.

Configurando um script global

Recomenda-se usar funções de macro em vez de macros simples em scripts globais para aumentar a segurança, pois as macros não são escapadas automaticamente.

Atributos do script:

Parâmetro Descrição
Nome Nome exclusivo do script.
Por exemplo, Clear /tmp filesystem
Escopo Escopo do script: operação de ação, ação manual de host ou ação manual de evento. Essa configuração determina onde o script pode ser usado: em comandos remotos de operações de ação, no menu do host ou no menu do evento, respectivamente.
Definir o escopo como 'Operação de ação' disponibiliza o script para todos os usuários com acesso a Alertas > Ações.
Se um script estiver sendo usado em uma ação, seu escopo não poderá ser alterado de 'operação de ação'.
Suporte a macros
O escopo afeta o conjunto de macros disponíveis. Por exemplo, macros relacionadas ao usuário ({USER.*}) são compatíveis com scripts para permitir a transmissão de informações sobre o usuário que iniciou o script. No entanto, elas não são compatíveis quando o escopo do script é operação de ação, pois as operações de ação são executadas automaticamente.
Uma macro {MANUALINPUT} permite especificar uma entrada manual no momento da execução do script. Ela é compatível com scripts de ação manual de host e de ação manual de evento.
Para saber quais outras macros são compatíveis, pesquise por 'Notificações e comandos baseados em trigger/Comandos baseados em trigger', 'Scripts de ação manual de host' e 'Scripts de ação manual de evento' na tabela de macros compatíveis. Observe que, se uma macro puder ser resolvida para um valor com espaços (por exemplo, nome do host), não se esqueça de colocá-la entre aspas quando necessário.
Caminho do menu O caminho de menu desejado para o script. Por exemplo, Default ou Default/ exibirá o script no diretório correspondente. Os menus podem ser aninhados, por exemplo, Main menu/Sub menu1/Sub menu2. Ao acessar scripts pelo menu do host/evento nas seções de monitoramento, eles serão organizados de acordo com os diretórios fornecidos.
Este campo é exibido somente quando 'Ação manual de host' ou 'Ação manual de evento' está selecionado como Escopo.
Tipo Clique no botão correspondente para selecionar o tipo de script:
comando URL, Webhook, Script, SSH, Telnet ou IPMI.
O tipo URL está disponível somente quando 'Ação manual de host' ou 'Ação manual de evento' está selecionado como Escopo.
Tipo de script: URL
URL Especifique a URL para acesso rápido pelo menu do host ou menu do evento.
Macros e macros de usuário personalizadas são compatíveis. O suporte a macros depende do escopo do script (consulte Escopo acima).
Use a macro {MANUALINPUT} neste campo para poder especificar uma entrada manual no momento da execução do script, por exemplo:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
Os valores das macros não devem ser codificados para URL.
Abrir em uma nova janela Determina se a URL deve ser aberta em uma nova aba do navegador ou na mesma aba.
Tipo de script: Webhook
Parâmetros Especifique as variáveis do webhook como pares atributo-valor.
Consulte também: configuração de mídia Webhook.
Macros e macros de usuário personalizadas são compatíveis com valores de parâmetros. O suporte a macros depende do escopo do script (consulte Escopo acima).
Script Insira o código JavaScript no editor modal que é aberto ao clicar no campo de parâmetro ou no ícone de lápis ao lado dele.
O suporte a macros depende do escopo do script (consulte Escopo acima).
Consulte também: configuração de mídia Webhook, Objetos JavaScript adicionais.
Tempo limite Tempo limite de execução do JavaScript (1-60s, padrão de 30s).
Sufixos de tempo são compatíveis (por exemplo, 30s, 1m).
Tipo de script: Script
Executar em Clique no botão correspondente para executar o script de shell em:
Zabbix agent - o script será executado pelo Zabbix agent (se o item system.run estiver permitido) no host
Zabbix proxy ou server - o script será executado pelo Zabbix proxy ou server, dependendo de o host ser monitorado por proxy ou server.
Ele será executado no proxy se habilitado por EnableRemoteCommands.
Ele será executado no server se os scripts globais estiverem habilitados pelo parâmetro do server EnableGlobalScripts.
Zabbix server - o script será executado somente pelo Zabbix server.
Essa opção não estará disponível se os scripts globais estiverem desabilitados pelo parâmetro do server EnableGlobalScripts.
Comandos Insira o caminho completo dos comandos a serem executados no script.
O suporte a macros depende do escopo do script (consulte Escopo acima). Macros de usuário personalizadas são compatíveis.
Tipo de script: SSH
Método de autenticação Selecione o método de autenticação: senha ou chave pública.
Nome de usuário Insira o nome de usuário.
Senha Insira a senha.
Este campo está disponível quando 'Senha' está selecionado como método de autenticação.
Arquivo de chave pública Insira o caminho para o arquivo de chave pública.
Este campo está disponível quando 'Chave pública' está selecionado como método de autenticação.
Arquivo de chave privada Insira o caminho para o arquivo de chave privada.
Este campo está disponível quando 'Chave pública' está selecionado como método de autenticação.
Frase secreta Insira a frase secreta.
Este campo está disponível quando 'Chave pública' está selecionado como método de autenticação.
Porta Insira a porta do serviço SSH remoto no host de destino à qual o Zabbix se conectará.
Comandos Insira os comandos.
O suporte a macros depende do escopo do script (consulte Escopo acima). Macros de usuário personalizadas são compatíveis.
Tipo de script: Telnet
Nome de usuário Insira o nome de usuário.
Senha Insira a senha.
Porta Insira a porta do serviço Telnet remoto no host de destino à qual o Zabbix se conectará.
Comandos Insira os comandos.
O suporte a macros depende do escopo do script (consulte Escopo acima). Macros de usuário personalizadas são compatíveis.
Tipo de script: IPMI
Comando Insira o comando IPMI.
O suporte a macros depende do escopo do script (consulte Escopo acima). Macros de usuário personalizadas são compatíveis.
Descrição Insira uma descrição para o script.
Grupo de hosts Selecione o grupo de hosts para o qual o script estará disponível (ou Todos para todos os grupos de hosts).
Grupo de usuários Selecione o grupo de usuários para o qual o script estará disponível (ou Todos para todos os grupos de usuários).
Este campo é exibido somente quando 'Ação manual de host' ou 'Ação manual de evento' está selecionado como Escopo.
Permissões de host necessárias Selecione o nível de permissão para o grupo de hosts: Leitura ou Gravação. Somente usuários com o nível de permissão necessário terão acesso à execução do script.
Este campo é exibido somente quando 'Ação manual de host' ou 'Ação manual de evento' está selecionado como Escopo.
Configuração avançada Clique no cabeçalho Configuração avançada para exibir as opções de configuração avançada.
Este campo é exibido somente quando 'Ação manual de host' ou 'Ação manual de evento' está selecionado como Escopo.

Configuração avançada

As opções de configuração avançada estão disponíveis em uma seção recolhível Configuração avançada:

Parameter Description
Enable user input Marque a caixa de seleção para habilitar a entrada manual do usuário antes de executar o script.
A entrada manual do usuário substituirá o valor da macro {MANUALINPUT} no script.
Veja também: Entrada manual do usuário.
Input prompt Digite um texto personalizado para solicitar a entrada manual do usuário. Esse texto será exibido acima do campo de entrada no pop-up Entrada manual.
Para ver uma prévia do pop-up Entrada manual, clique em Testar entrada do usuário. A prévia também permite testar se a string de entrada está em conformidade com a regra de validação de entrada (veja os parâmetros abaixo).
O suporte a macro e user macro depende do escopo do script (veja Scope nos parâmetros gerais de configuração do script).
Input type Selecione o tipo de entrada manual:
String - string única;
Dropdown - o valor é selecionado entre várias opções de lista suspensa.
Dropdown options Digite valores exclusivos para a lista suspensa de entrada do usuário em uma lista separada por vírgulas.
Para incluir uma opção vazia na lista suspensa, adicione uma vírgula extra no início, no meio ou no fim da lista.
Este campo é exibido somente se 'Dropdown' estiver selecionado como Input type.
Default input string Digite a string padrão para a entrada do usuário (ou nenhuma).
Este campo será validado pela expressão regular fornecida no campo Input validation rule.
O valor inserido aqui será exibido por padrão no pop-up Entrada manual.
Este campo é exibido somente se 'String' estiver selecionado como Input type.
Input validation rule Digite uma expressão regular para validar a string de entrada do usuário.
Expressões regulares globais são suportadas.
Este campo é exibido somente se 'String' estiver selecionado como Input type.
Enable confirmation Marque a caixa de seleção para exibir uma mensagem de confirmação antes de executar o script. Esse recurso pode ser especialmente útil com operações potencialmente perigosas (como um script de reinicialização) ou que possam levar muito tempo.
Confirmation text Digite um texto de confirmação personalizado para o pop-up de confirmação habilitado com a caixa de seleção acima (por exemplo, O sistema remoto será reiniciado. Tem certeza?). Para ver como o texto ficará, clique em Testar confirmação ao lado do campo.
Macros e user macros personalizados são suportados.
Nota: as macros não serão expandidas ao testar a mensagem de confirmação.

Se a entrada manual do usuário e uma mensagem de confirmação estiverem configuradas, elas serão exibidas em janelas pop-up consecutivas.

Entrada manual do usuário

A entrada manual do usuário permite fornecer um parâmetro personalizado a cada execução do script. Isso elimina a necessidade de criar vários scripts de usuário semelhantes com apenas uma diferença de parâmetro.

Por exemplo, você pode querer fornecer um número inteiro diferente ou um endereço de URL diferente para o script durante a execução.

Para habilitar a entrada manual do usuário:

  • use a macro {MANUALINPUT} no script (comandos, script, parâmetro do script) onde necessário; ou no campo URL de scripts de URL;
  • na configuração avançada do script, habilite a entrada manual do usuário e configure as opções de entrada.

Com a entrada do usuário habilitada, antes da execução do script, um popup de Entrada manual aparecerá para o usuário solicitando o fornecimento de um valor personalizado. O valor fornecido substituirá {MANUALINPUT} no script.

Dependendo da configuração, o usuário será solicitado a inserir um valor de string:

Ou selecionar o valor em uma lista suspensa de opções predefinidas:

A entrada manual do usuário está disponível apenas para scripts cujo escopo seja 'Ação manual do host' ou 'Ação manual do evento'.

Execução do script e resultado

Os scripts executados pelo Zabbix server são executados na ordem descrita na página de execução de comandos.

O resultado do script é exibido em uma janela pop-up que aparece após a execução do script. O valor de retorno do script é uma saída padrão:

  • Se o script for concluído com sucesso (código de saída 0), o valor de retorno é limitado a 16 MB (incluindo espaços em branco à direita, que são truncados).
  • Se o script sair com erro (código de saída diferente de zero), o valor de retorno é um erro padrão limitado a 2 KB.

Por padrão, o Zabbix não armazena a saída estendida do script. Para preservar todos os detalhes da saída, você pode implementar o registro de logs dentro do próprio script (por exemplo, redirecionando a saída para um arquivo de log local).

Observe que, para scripts executados no Zabbix server ou no Zabbix proxy, os limites do banco de dados também se aplicam.

Abaixo está um exemplo de um script e da janela de resultado:

uname -v
/tmp/non_existing_script.sh
echo "This script was started by {USER.USERNAME}"

O resultado do script não exibe o próprio script.

Tempo limite de script no Zabbix agent

Você pode se deparar com uma situação em que ocorre um tempo limite durante a execução de um script.

Veja abaixo um exemplo de um script em execução no Zabbix agent e a janela de resultado:

sleep 5
df -h

A mensagem de erro, neste caso, é a seguinte:

Timeout while executing a shell script.

Para evitar tais situações, é recomendável otimizar o próprio script (no exemplo acima, "5") em vez de ajustar o parâmetro Timeout em Zabbix agent configuration e Zabbix server configuration.

Caso o parâmetro Timeout tenha sido alterado em Zabbix agent configuration, a seguinte mensagem de erro será exibida:

Get value from agent failed: ZBX_TCP_READ() timed out.

Isso significa que a modificação foi feita em Zabbix agent configuration, mas também é necessário modificar o parâmetro Timeout em Zabbix server configuration.

Tempo limite de script em agents ativos

É possível executar scripts em agents que operam apenas no modo ativo. Depois que a execução do script é acionada pela operation da action ou pela execução manual do script, o comando é incluído na configuração de verificação ativa e executado assim que o active agent o recebe.

Scripts manuais são enviados ao active agent juntamente com o timeout do server/proxy para execução do script. Aumente o timeout padrão do server/proxy para execução do script. O timeout deve ser maior que a frequência de atualização da verificação ativa; caso contrário, o timeout será excedido antes que o active agent receba o script e consiga retornar o resultado.

Tempo limite do script no Zabbix server/proxy

Veja um exemplo de um script em execução no Zabbix server e a janela de resultado abaixo:

sleep 11
df -h

Também é recomendável otimizar o próprio script (em vez de ajustar o parâmetro TrapperTimeout para um valor correspondente (no nosso caso, > 11) modificando a configuração do Zabbix server).