2 Comandos remotos
Descripción general
Con los comandos remotos, puede definir que un determinado comando predefinido se ejecute automáticamente en el equipo monitorizado al cumplirse alguna condición.
Así, los comandos remotos son un mecanismo potente para una monitorización proactiva e inteligente.
En los usos más evidentes de la función, puede intentar:
- Reiniciar automáticamente alguna aplicación (servidor web, middleware, CRM) si no responde
- Utilizar el comando IPMI 'reboot' para reiniciar algún servidor 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 máquina virtual de una máquina física a otra dependiendo de la carga de CPU
- Añadir nuevos nodos a un entorno cloud ante recursos insuficientes de CPU (disco, memoria, lo que sea)
Configurar 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 el servidor Zabbix, el proxy o el agente. Los comandos remotos en el agente Zabbix pueden ser ejecutados directamente por el servidor Zabbix o a través del proxy Zabbix. Tanto en el agente Zabbix como en el proxy Zabbix, los comandos remotos están deshabilitados por defecto. Se pueden habilitar mediante:
- añadiendo un parámetro
AllowKey=system.run[*]en la configuración del agente; - estableciendo el parámetro EnableRemoteCommands a '1' en la configuración del proxy.
Los comandos remotos ejecutados por el servidor Zabbix se ejecutan como se describe en Ejecución de comandos, incluyendo la comprobación del código de salida.
Los comandos remotos se ejecutan incluso si el equipo 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 Zabbix agent (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 Alertas → Acciones → Acciones de trigger:
- Defina las condiciones adecuadas, por ejemplo, establezca que la acción se active ante cualquier problema de desastre de una de las aplicaciones Apache.

- En la pestaña Operaciones, haga clic en Añadir en el bloque Operaciones, Operaciones de recuperación o Operaciones de actualización.

- Seleccione uno de los scripts predefinidos de la lista desplegable Operación y establezca la Lista de destinos 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 los scripts globales.
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 Zabbix agent (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 algunas sugerencias sobre cómo configurar sudo.
A partir de Zabbix agent 7.0, los comandos remotos también pueden ejecutarse en un agent que funciona 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 su 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 su ejecución.
Para obtener información adicional, consulte Tiempo de espera del script.
Permisos de acceso
Asegúrese de que el usuario 'zabbix' tenga permisos de ejecución para los comandos configurados. Puede ser útil utilizar sudo para dar acceso a comandos privilegiados. Para configurar el acceso, ejecute como root:
visudo
Ejemplo de líneas que se pueden usar en el archivo sudoers:
# permite al usuario 'zabbix' ejecutar todos los comandos sin contraseña.
zabbix ALL=NOPASSWD: ALL
# permite al usuario 'zabbix' reiniciar apache sin contraseña.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
En algunos sistemas, el archivo sudoers evitará 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 cierta condición.
Para reiniciar automáticamente Windows cuando Zabbix detecte un problema, defina el siguiente script:
| Parámetro del script | Valor |
|---|---|
| Ámbito | 'Operación de acción' |
| Tipo | 'Script' |
| Comando | 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 |