2 Comandos remotos
Visão geral
Com comandos remotos, você pode definir que um determinado comando predefinido seja executado automaticamente no host monitorado quando uma condição for atendida.
Assim, os comandos remotos são um mecanismo avançado para o monitoramento proativo inteligente.
Nos usos mais comuns desse recurso, você pode:
- Reiniciar automaticamente algum aplicativo (web server, middleware, CRM) se ele não responder
- Usar o comando
rebootdo IPMI para reiniciar algum server remoto se ele não responder às solicitações - Liberar espaço em disco automaticamente (removendo arquivos antigos, limpando
/tmp) quando o espaço em disco estiver acabando - Migrar uma VM de um equipamento físico para outro dependendo da carga da CPU
- Adicionar novos nós a um ambiente de nuvem quando os recursos de CPU (disco, memória ou outros) forem insuficientes
A configuração de uma ação para comandos remotos é semelhante à configuração para o envio de uma mensagem; a única diferença é que o Zabbix executará um comando em vez de enviar uma mensagem.
Os comandos remotos podem ser executados pelo Zabbix server, pelo Zabbix proxy ou pelo Zabbix agent. Observe o seguinte:
- Os comandos remotos no Zabbix agent podem ser executados diretamente pelo Zabbix server ou por meio do Zabbix proxy.
- Os comandos remotos executados pelo Zabbix server são executados conforme descrito em Execução de comandos, incluindo a verificação do código de saída.
- Os comandos remotos são executados mesmo quando o host de destino está em modo de manutenção.
Os comandos remotos são desabilitados por padrão tanto no Zabbix agent quanto no Zabbix proxy. Eles podem ser habilitados da seguinte forma:
- Para comandos remotos executados pelo Zabbix agent, adicione um parâmetro
AllowKey=system.run[<command>,*]para cada comando permitido na configuração do agent, em que*corresponde a qualquer um dos modos de execução (waitounowait). - Para comandos remotos executados pelo Zabbix proxy, defina o parâmetro
EnableRemoteCommandscomo1na configuração do proxy. Observe que não é necessário habilitar os comandos remotos no Zabbix proxy quando eles são executados pelo Zabbix agent em um host monitorado pelo proxy.
Não use AllowKey=system.run[*] a menos que seja necessário, pois isso permite a execução de qualquer comando no host.
Por motivos de segurança, recomenda-se permitir apenas comandos exatos, enquanto system.run[*] é negado por padrão (DenyKey=system.run[*]).
Consulte também Restringindo verificações do agent.
Limite de comandos remotos
O limite de comandos remotos após a resolução de todas as macros depende do tipo de banco de dados e do conjunto de caracteres (caracteres não ASCII exigem mais de um byte para serem armazenados):
| Banco de dados | Limite em caracteres | Limite em bytes |
|---|---|---|
| MySQL | 65535 | 65535 |
| PostgreSQL | 65535 | não limitado |
| SQLite (somente proxy do Zabbix) | 65535 | não limitado |
A saída da execução do comando remoto (valor de retorno) é limitada a 16 MB (incluindo espaços em branco finais, que são truncados). O limite do comando remoto IPMI é baseado na biblioteca IPMI instalada. Observe que os limites do banco de dados se aplicam a todos os comandos remotos.
Configuração
Esses comandos remotos executados no Zabbix agent (scripts personalizados) devem ser habilitados primeiro na configuração do agent.
Certifique-se de que o parâmetro AllowKey=system.run[<command>,*] seja adicionado para cada comando permitido na configuração do agent, a fim de permitir um comando específico com o modo nowait. Reinicie o daemon do agent se alterar esse parâmetro.
Em seguida, ao configurar uma nova ação em Alertas > Ações > Ações de trigger:
- Defina as condições apropriadas; por exemplo, configure a ação para ser ativada quando ocorrer qualquer problema de desastre em uma das aplicações Apache.

- Na aba Operações, clique em Adicionar no bloco Operações, Operações de recuperação ou Operações de atualização.

- Selecione um dos scripts predefinidos na lista suspensa Operação e defina a Lista de destinos para o script.

Scripts predefinidos
Os scripts disponíveis para operações de ação (webhook, script, SSH, Telnet, IPMI) são definidos em scripts globais, com Operação de ação selecionada como escopo.
Por exemplo:
sudo /etc/init.d/apache restart
Nesse caso, o Zabbix tentará reiniciar um processo do Apache. Com esse comando, certifique-se de que o comando seja executado no Zabbix agent (clique no botão Zabbix agent ao lado de Executar em).
Observe o uso de sudo - o usuário do Zabbix não tem permissões para reiniciar serviços do sistema por padrão. Veja abaixo algumas orientações sobre como configurar o sudo.
A partir do Zabbix agent 7.0, os comandos remotos também podem ser executados em um agent que esteja operando no modo ativo. O Zabbix agent - seja ativo ou passivo - deve ser executado no host remoto e executa os comandos em segundo plano.
Os comandos remotos no Zabbix agent são executados sem tempo limite pela chave system.run[,nowait] e não são verificados quanto aos resultados da execução.
No Zabbix server e no Zabbix proxy, os comandos remotos são executados com o tempo limite definido no parâmetro TrapperTimeout do arquivo zabbix_server.conf ou zabbix_proxy.conf e são verificados quanto aos resultados da execução.
Para obter informações adicionais, consulte Tempo limite do script.
Permissões de acesso
Certifique-se de que o usuário 'zabbix' tenha permissões de execução para os comandos configurados.
Pode ser útil usar sudo para conceder acesso a comandos privilegiados.
Para configurar o acesso, execute como root:
visudo
Exemplo de linhas que podem ser usadas no arquivo sudoers:
# permite que o usuário 'zabbix' execute todos os comandos sem senha.
zabbix ALL=NOPASSWD: ALL
# permite que o usuário 'zabbix' reinicie o apache sem senha.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
Em alguns sistemas, o arquivo sudoers impede que usuários não locais executem comandos.
Para alterar esse comportamento, comente a opção requiretty em /etc/sudoers.
Comandos remotos com várias interfaces
Se o sistema de destino tiver várias interfaces do tipo selecionado (Zabbix agent ou IPMI), os comandos remotos serão executados na interface padrão.
É possível executar comandos remotos via SSH e Telnet usando uma interface diferente da interface do Zabbix agent. A interface disponível a ser usada é selecionada na seguinte ordem:
- Interface padrão do Zabbix agent
- Interface padrão do SNMP
- Interface padrão do JMX
- Interface padrão do IPMI
Comandos remotos IPMI
Para comandos remotos IPMI, deve ser usada a seguinte sintaxe:
<command> [<value>]
onde
- <command> - um dos comandos IPMI, sem espaços
- <value> - 'on', 'off' ou qualquer número inteiro sem sinal. <value> é um parâmetro opcional.
Exemplos
Exemplos de scripts globais que podem ser usados como comandos remotos em operações de ações.
Exemplo 1
Reinicialização do Windows sob determinada condição.
Para reiniciar automaticamente o Windows quando um problema for detectado pelo Zabbix, defina o seguinte script:
| Parâmetro do script | Valor |
|---|---|
| Escopo | 'Operação de ação' |
| Tipo | 'Script' |
| Comando | c:\windows\system32\shutdown.exe -r -f |
Exemplo 2
Reinicie o host usando o controle IPMI.
| Parâmetro do script | Valor |
|---|---|
| Escopo | 'Operação de ação' |
| Tipo | 'IPMI' |
| Comando | reset |
Exemplo 3
Desligue o host usando o controle IPMI.
| Parâmetro do script | Valor |
|---|---|
| Escopo | 'Operação de ação' |
| Tipo | 'IPMI' |
| Comando | desligar |