2 Comandos remotos
Resumen
Con los comandos remotos puede definir que un determinado comando predefinido se ejecute automáticamente en el host monitorizado ante una determinada condición.
Así, los comandos remotos son un mecanismo potente para una monitorización inteligente y proactiva.
En los usos más evidentes de esta función, puede intentar:
- Reiniciar automáticamente alguna aplicación (servidor web, middleware, CRM) si no responde
- Usar el comando IPMI 'reboot' para reiniciar algún server remoto si no responde a las solicitudes
- Liberar automáticamente espacio en disco (eliminando archivos antiguos, limpiando /tmp) si se está quedando sin espacio en disco
- Migrar una VM de una máquina física a otra en función de la carga de CPU
- Añadir nuevos nodos a un entorno cloud cuando los recursos de CPU (disco, memoria, lo que sea) sean insuficientes
La configuración de una acción para comandos remotos es similar a la de enviar un mensaje; la única diferencia es que Zabbix ejecutará un comando en lugar de enviar un mensaje.
Los comandos remotos pueden ser ejecutados por Zabbix server, proxy o agent. Los comandos remotos en Zabbix agent pueden ejecutarse directamente por Zabbix server o a través de Zabbix proxy. Tanto en Zabbix agent como en Zabbix proxy, los comandos remotos están deshabilitados de forma predeterminada. Se pueden habilitar mediante:
- añadir un parámetro
AllowKey=system.run[*]en la configuración del agent; - establecer el parámetro
EnableRemoteCommandsen1en la configuración del proxy.
Los comandos remotos ejecutados por Zabbix server se ejecutan tal como se describe en Command execution, incluida la comprobación del código de salida.
Los comandos remotos se ejecutan incluso si el host de destino está en mantenimiento.
Límite de comandos remotos
El límite de comandos remotos después de resolver todas las macros depende del tipo de base de datos y del conjunto de caracteres (los caracteres no ASCII requieren más de un byte para almacenarse):
| Base de datos | Límite en caracteres | Límite en bytes |
|---|---|---|
| MySQL | 65535 | 65535 |
| PostgreSQL | 65535 | sin límite |
| SQLite (solo Zabbix proxy) | 65535 | sin límite |
La salida de la ejecución de comandos remotos (valor de retorno) está limitada a 16MB (incluyendo los espacios en blanco finales que se truncan). El límite de comandos remotos IPMI depende de la biblioteca IPMI instalada. Tenga en cuenta que los límites de la base de datos se aplican a todos los comandos remotos.
Configuración
Esos comandos remotos que se ejecutan en el agent de Zabbix (scripts personalizados) deben habilitarse primero en la configuración del agent.
Asegúrese de que el parámetro AllowKey=system.run[<command>,*] se añada para cada comando permitido en la configuración del agent para permitir un comando específico con el modo nowait. Reinicie el daemon del agent si cambia este parámetro.
Luego, al configurar una nueva acción en Alerts > Actions > Trigger actions:
- Defina las condiciones adecuadas, por ejemplo, establezca que la acción se active ante cualquier problema de gravedad Disaster con una de las aplicaciones Apache.

- En la pestaña Operations, haga clic en Add en el bloque Operations, Recovery operations o Update operations.

- Seleccione uno de los scripts predefinidos de la lista desplegable Operation y establezca la Target list para el script.

Scripts predefinidos
Los scripts que están disponibles para las operaciones de acción (webhook, script, SSH, Telnet, IPMI) se definen en global scripts con Action operation seleccionado como su ámbito.
Por ejemplo:
sudo /etc/init.d/apache restart
En este caso, Zabbix intentará reiniciar un proceso de Apache. Con este comando, asegúrese de que el comando se ejecute en el agent de Zabbix (haga clic en el botón Zabbix agent junto a Execute on).
Tenga en cuenta el uso de sudo - el usuario de Zabbix no
tiene permisos para reiniciar servicios del sistema de forma predeterminada. Consulte más abajo para
ver sugerencias sobre cómo configurar sudo.
A partir de Zabbix agent 7.0, los comandos remotos también pueden ejecutarse en un agent que opera en modo activo. Zabbix agent, ya sea activo o pasivo, debe ejecutarse en el host remoto y ejecuta los comandos en segundo plano.
Los comandos remotos en Zabbix agent se ejecutan sin tiempo de espera mediante la clave system.run[,nowait] y no se comprueban los resultados de la ejecución.
En Zabbix server y Zabbix proxy, los comandos remotos se ejecutan con el tiempo de espera establecido en el parámetro TrapperTimeout del archivo zabbix_server.conf o zabbix_proxy.conf y se comprueban los resultados de la ejecución.
Para obtener información adicional, consulte Script timeout.
Permisos de acceso
Asegúrese de que el usuario 'zabbix' tenga permisos de ejecución para los
comandos configurados. Puede ser útil usar sudo para dar acceso a
comandos privilegiados. Para configurar el acceso, ejecute como root:
visudo
Ejemplos de líneas que podrían usarse en el archivo sudoers:
# permite que el usuario 'zabbix' ejecute todos los comandos sin contraseña.
zabbix ALL=NOPASSWD: ALL
# permite que el usuario 'zabbix' reinicie apache sin contraseña.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
En algunos sistemas, el archivo sudoers impedirá que los usuarios no locales
ejecuten comandos. Para cambiar esto, comente la opción requiretty
en /etc/sudoers.
Comandos remotos con múltiples interfaces
Si el sistema de destino tiene múltiples interfaces del tipo seleccionado (agente Zabbix o IPMI), los comandos remotos se ejecutarán en la interfaz predeterminada.
Es posible ejecutar comandos remotos mediante SSH y Telnet utilizando una interfaz diferente a la del agente Zabbix. La interfaz disponible para usar se selecciona en el siguiente orden:
- Interfaz predeterminada del agente Zabbix
- Interfaz predeterminada SNMP
- Interfaz predeterminada JMX
- Interfaz predeterminada IPMI
Comandos remotos IPMI
Para los comandos remotos IPMI se debe utilizar la siguiente sintaxis:
<comando> [<valor>]
donde
- <comando>: uno de los comandos IPMI sin espacios
- <valor>: 'on', 'off' o cualquier entero sin signo. <valor> es un parámetro opcional.
Ejemplos
Ejemplos de scripts globales que pueden utilizarse como comandos remotos en las operaciones de acción.
Ejemplo 1
Reinicio de Windows bajo ciertas condiciones.
Para reiniciar Windows automáticamente cuando Zabbix detecte un problema, defina el siguiente script:
| Script parameter | Value |
|---|---|
| Scope | 'Action operation' |
| Type | 'Script' |
| Command | c:\windows\system32\shutdown.exe -r -f |
Ejemplo 2
Reiniciar el equipo utilizando el control IPMI.
| Parámetro del script | Valor |
|---|---|
| Ámbito | 'Operación de acción' |
| Tipo | 'IPMI' |
| Comando | reset |
Ejemplo 3
Apagar el equipo utilizando el control IPMI.
| Parámetro del script | Valor |
|---|---|
| Ámbito | 'Operación de acción' |
| Tipo | 'IPMI' |
| Comando | apagar |