2 Comandos remotos

Descripción general

Con los comandos remotos, puede definir que un comando predefinido determinado se ejecute automáticamente en el host monitorizado cuando se cumpla alguna condición.

Por lo tanto, los comandos remotos son un mecanismo eficaz para realizar una monitorización proactiva e inteligente.

Entre los usos más evidentes de esta funcionalidad se incluyen:

  • Reiniciar automáticamente una aplicación (servidor web, middleware, CRM) si no responde
  • Utilizar el comando reboot de IPMI 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á agotando el espacio en disco
  • Migrar una VM de un equipo físico a otro en función de la carga de la CPU
  • Añadir nuevos nodos a un entorno de nube cuando los recursos de CPU (disco, memoria o cualquier otro) sean insuficientes

La configuración de una acción para comandos remotos es similar a la configuración para 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, Zabbix proxy o Zabbix agent. Tenga en cuenta lo siguiente:

  • Los comandos remotos en Zabbix agent pueden ser ejecutados directamente por Zabbix server o a través de Zabbix proxy.
  • Los comandos remotos ejecutados por Zabbix server se ejecutan como se describe en Ejecución de comandos, incluida la comprobación del código de salida.
  • Los comandos remotos se ejecutan incluso si el host de destino está en modo de mantenimiento.

Los comandos remotos están deshabilitados de forma predeterminada tanto en Zabbix agent como en Zabbix proxy. Se pueden habilitar de la siguiente manera:

  • Para los comandos remotos ejecutados por Zabbix agent, añada un parámetro AllowKey=system.run[<command>,*] por cada comando permitido en la configuración del agent, donde * coincide con cualquiera de los modos de ejecución (wait o nowait).
  • Para los comandos remotos ejecutados por Zabbix proxy, establezca el parámetro EnableRemoteCommands en 1 en la configuración del proxy. Tenga en cuenta que no es necesario habilitar los comandos remotos en Zabbix proxy cuando los ejecuta Zabbix agent en un host monitorizado por el proxy.

No utilice AllowKey=system.run[*] a menos que sea necesario, ya que permite ejecutar cualquier comando en el host. Por motivos de seguridad, se recomienda permitir únicamente comandos exactos, mientras que system.run[*] está denegado de forma predeterminada (DenyKey=system.run[*]).

Consulte también Restricción de las comprobaciones del agent.

Límite de los comandos remotos

El límite de los comandos remotos después de resolver todas las macros depende del tipo de base de datos y del juego 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
Oracle Database 2048 4000
PostgreSQL 65535 sin límite
SQLite (solo proxy de Zabbix) 65535 sin límite

La salida de la ejecución de los comandos remotos (valor de retorno) está limitada a 16 MB (incluidos los espacios en blanco finales, que se truncan). El límite de los comandos remotos de IPMI se basa en la biblioteca de 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 haya añadido para cada comando permitido en la configuración del agent, con el fin de permitir un comando específico con el modo nowait.
Reinicie el demonio del agent si cambia este parámetro.

A continuación, 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 en una de las aplicaciones de 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 en la lista desplegable Operation y establezca la Target list para el script.

Scripts predefinidos

Los scripts disponibles para las operaciones de acción (webhook, script, SSH, Telnet, IPMI) se definen en scripts globales con Operación de acción seleccionado como á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 Zabbix agent (haga clic en el botón Zabbix agent junto a Ejecutar en).

Tenga en cuenta el uso de sudo: el usuario de Zabbix no tiene permisos para reiniciar los servicios del sistema de forma predeterminada. Consulte a continuación algunas indicaciones sobre cómo configurar sudo.

A partir de Zabbix agent 7.0, los comandos remotos también se pueden ejecutar en un agent que opera en modo activo. El 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 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 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 proporcionar acceso a comandos con privilegios. Para configurar el acceso, ejecute como root:

visudo

Ejemplo de líneas que se pueden utilizar 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 impedirá que los usuarios no locales ejecuten comandos. Para cambiar este comportamiento, comente la opción requiretty en /etc/sudoers.

Comandos remotos con varias interfaces

Si el sistema de destino tiene varias interfaces del tipo seleccionado (Zabbix agent o IPMI), los comandos remotos se ejecutarán en la interfaz predeterminada.

Es posible ejecutar comandos remotos mediante SSH y Telnet utilizando una interfaz distinta de la de Zabbix agent. La interfaz disponible que se utilizará se selecciona en el siguiente orden:

  • Interfaz predeterminada de Zabbix agent
  • Interfaz predeterminada de SNMP
  • Interfaz predeterminada de JMX
  • Interfaz predeterminada de IPMI

Comandos remotos de IPMI

Para los comandos remotos de IPMI se debe utilizar la siguiente sintaxis:

<command> [<value>]

donde

  • <command> - uno de los comandos de IPMI sin espacios
  • <value> - 'on', 'off' o cualquier entero sin signo. <value> es un parámetro opcional.

Ejemplos

Ejemplos de scripts globales que pueden utilizarse como comandos remotos en las operaciones de las acciones.

Ejemplo 1

Reinicio de Windows bajo una condición determinada.

Para reiniciar Windows automáticamente 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