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 alguna 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

Configurar una acción para comandos remotos es similar a configurar una acción para enviar un mensaje; la única diferencia es que Zabbix ejecuta 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 tal 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 se encuentra en modo de mantenimiento.

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

  • Para los comandos remotos ejecutados por Zabbix agent, añada un parámetro AllowKey=system.run[<command>,*] o AllowKeyRegexp=^system\.run\[<command>,.*\]$ para 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[*] ni AllowKeyRegexp=^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 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

Los comandos remotos ejecutados por el Zabbix agent deben permitirse primero en la configuración del agent mediante el parámetro AllowKey o AllowKeyRegexp.

Asegúrese de añadir el parámetro AllowKey=system.run[<command>,*] o AllowKeyRegexp=^system\.run\[<command>,.*\]$ a la configuración del agent para cada comando permitido, a fin de permitir su ejecución en modo nowait. Reinicie el daemon del agent después de cambiar el parámetro.

A continuación, al configurar una nueva acción en Alertas > Acciones > Acciones de trigger:

  1. Defina las condiciones adecuadas; por ejemplo, establezca que la acción se active ante cualquier problema de desastre relacionado con una de las aplicaciones de Apache.

  1. En la pestaña Operaciones, haga clic en Añadir en la sección Operaciones, Operaciones de recuperación u Operaciones de actualización.

  1. Seleccione uno de los scripts predefinidos en 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 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