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 EnableRemoteCommands en 1 en 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:

  1. 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.

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

  1. 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