2 Comandos remotos
Visão geral
Com comandos remotos, você pode definir que um determinado comando pré-definido seja executado automaticamente no host monitorado mediante alguma condição.
Assim, comandos remotos são um mecanismo poderoso para monitoramento pró-ativo inteligente.
Nos usos mais óbvios do recurso, você pode tentar:
- Reiniciar automaticamente algum aplicativo (servidor web, middleware, CRM) se ele não responder
- Usar o comando IPMI 'reboot' para reiniciar algum servidor remoto se ele não responder às solicitações
- Liberar automaticamente espaço em disco (removendo arquivos antigos, limpando /tmp) se estiver ficando sem espaço em disco
- Migrar uma VM de uma máquina física para outra dependendo da carga da CPU
- Adicionar novos nós a um ambiente de nuvem quando houver recursos insuficientes de CPU (disco, memória, etc.)
Configurar uma ação para comandos remotos é semelhante à configuração para envio de mensagem, sendo a única diferença que o Zabbix executará um comando em vez de enviar uma mensagem.
Comandos remotos podem ser executados pelo Zabbix server, proxy ou agent. Comandos remotos no Zabbix agent podem ser executados diretamente pelo Zabbix server ou através do Zabbix proxy. Tanto no Zabbix agent quanto no Zabbix proxy, comandos remotos estão desabilitados por padrão. Eles podem ser habilitados por:
- adicionando um parâmetro
AllowKey=system.run[*]na configuração do agent; - definindo o parâmetro EnableRemoteCommands como '1' na configuração do proxy.
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.
Comandos remotos são executados mesmo que o host de destino esteja em manutenção.
Limite de comando remoto
O limite de comando remoto 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):
| Database | Limit in characters | Limit in bytes |
|---|---|---|
| MySQL | 65535 | 65535 |
| PostgreSQL | 65535 | not limited |
| SQLite (only Zabbix proxy) | 65535 | not limited |
A saída da execução do comando remoto (valor de retorno) é limitada a 16 MB (incluindo espaços em branco no final, 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 que são executados no agent do Zabbix (scripts personalizados) devem primeiro ser habilitados no agent configuration.
Certifique-se de que o parâmetro AllowKey=system.run[<command>,*] seja adicionado para cada comando permitido na configuração do agent, para permitir um comando específico no modo nowait. Reinicie o daemon do agent se esse parâmetro for alterado.
Em seguida, ao configurar uma nova action em Alerts → Actions → Trigger actions:
- Defina as condições apropriadas, por exemplo, configure que a action seja ativada quando houver qualquer problema de severidade disaster em uma das aplicações Apache.

- Na aba Operations, clique em Add no bloco Operations, Recovery operations ou Update operations.

- Selecione um dos scripts predefinidos na lista suspensa Operation e defina a Target list para o script.

Scripts predefinidos
Scripts que estão disponíveis para operações de ação (webhook, script, SSH, Telnet, IPMI) são definidos em global scripts.
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 ele seja executado no Zabbix agent (clique no botão Zabbix agent ao lado de Execute on).
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 dicas de como configurar o sudo.
A partir do Zabbix agent 7.0, comandos remotos também podem ser executados em um agent que esteja operando em modo ativo. O Zabbix agent - seja ativo ou passivo - deve estar em execução no host remoto e executa os comandos em segundo plano.
Comandos remotos no Zabbix agent são executados sem timeout pela chave system.run[,nowait] e não são verificados quanto aos resultados de execução. No Zabbix server e no Zabbix proxy, os comandos remotos são executados com timeout conforme definido no parâmetro TrapperTimeout do arquivo zabbix_server.conf ou zabbix_proxy.conf e têm os resultados de execução verificados. Para informações adicionais, consulte Script timeout.
Permissões de acesso
Certifique-se de que o usuário 'zabbix' tenha permissões de execução para os comandos configurados. Pode ser interessante usar o sudo para dar acesso a comandos privilegiados. Para configurar o acesso, execute como root:
visudo
Exemplos 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 impedirá que usuários não locais executem comandos. Para alterar isso, comente a opção requiretty em /etc/sudoers.
Comandos remotos com múltiplas interfaces
Se o sistema de destino tiver várias interfaces do tipo selecionado (agent Zabbix 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 agent Zabbix. A interface disponível para uso é selecionada na seguinte ordem:
- interface padrão do agent Zabbix
- interface padrão SNMP
- interface padrão JMX
- interface padrão IPMI
Comandos remotos IPMI
Para comandos remotos IPMI, a seguinte sintaxe deve ser usada:
<comando> [<valor>]
onde
- <comando> - um dos comandos IPMI sem espaços
- <valor> - 'on', 'off' ou qualquer número inteiro sem sinal. <valor> é um parâmetro opcional.
Exemplos
Exemplos de scripts globais que podem ser usados como comandos remotos em operações de ação.
Exemplo 1
Reinício 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 |