2 Commandes à distance

Vue d’ensemble

Avec les commandes distantes, vous pouvez définir qu’une commande prédéfinie donnée soit exécutée automatiquement sur le hôte surveillé lorsqu’une condition est remplie.

Les commandes distantes constituent donc un mécanisme puissant pour une supervision proactive et intelligente.

Voici quelques utilisations évidentes de cette fonctionnalité :

  • Redémarrer automatiquement une application (serveur web, middleware, CRM) si elle ne répond pas
  • Utiliser la commande IPMI « reboot » pour redémarrer un serveur distant s’il ne répond pas aux requêtes
  • Libérer automatiquement de l’espace disque (en supprimant les fichiers anciens et en nettoyant /tmp) lorsque l’espace disque vient à manquer
  • Migrer une VM d’une machine physique vers une autre en fonction de la charge CPU
  • Ajouter de nouveaux nœuds à un environnement cloud lorsque les ressources CPU (disque, mémoire ou autres) sont insuffisantes

La configuration d’une action pour les commandes distantes est similaire à celle utilisée pour l’envoi d’un message ; la seule différence est que Zabbix exécute une commande au lieu d’envoyer un message.

Les commandes distantes peuvent être exécutées par le serveur Zabbix, le proxy Zabbix ou l’agent Zabbix. Notez les points suivants :

  • Les commandes distantes sur l’agent Zabbix peuvent être exécutées directement par le serveur Zabbix ou via un proxy Zabbix.
  • Les commandes distantes exécutées par le serveur Zabbix sont lancées comme décrit dans Exécution de commandes, y compris la vérification du code de sortie.
  • Les commandes distantes sont exécutées même si le hôte cible est en mode maintenance.

Les commandes distantes sont désactivées par défaut sur l’agent Zabbix et le proxy Zabbix. Elles peuvent être activées comme suit :

  • Pour les commandes distantes exécutées par l’agent Zabbix, ajoutez un paramètre AllowKey=system.run[<command>,*] pour chaque commande autorisée dans la configuration de l’agent, où * correspond à l’un ou l’autre des modes d’exécution (wait ou nowait).
  • Pour les commandes distantes exécutées par le proxy Zabbix, définissez le paramètre EnableRemoteCommands sur 1 dans la configuration du proxy. Notez qu’il n’est pas nécessaire d’activer les commandes distantes sur le proxy Zabbix lorsqu’elles sont exécutées par l’agent Zabbix sur un hôte surveillé par le proxy.

N’utilisez pas AllowKey=system.run[*] sauf si cela est nécessaire, car ce paramètre autorise l’exécution de n’importe quelle commande sur le hôte. Pour des raisons de sécurité, il est recommandé d’autoriser uniquement les commandes exactes, tandis que system.run[*] est refusé par défaut (DenyKey=system.run[*]).

Voir également Restriction des vérifications de l’agent.

Limite des commandes à distance

La limite des commandes à distance après résolution de toutes les macros dépend du type de base de données et du jeu de caractères (les caractères non ASCII nécessitent plus d'un octet pour être stockés) :

Database Limit in characters Limit in bytes
MySQL 65535 65535
Oracle Database 2048 4000
PostgreSQL 65535 not limited
SQLite (only Zabbix proxy) 65535 not limited

La sortie d'exécution des commandes à distance (valeur de retour) est limitée à 16 Mo (y compris les espaces blancs de fin, qui sont tronqués). La limite des commandes à distance IPMI est basée sur la bibliothèque IPMI installée. Notez que les limites de base de données s'appliquent à toutes les commandes à distance.

Configuration

Les commandes distantes exécutées sur l'agent Zabbix (scripts personnalisés) doivent d'abord être activées dans la configuration de l'agent.

Assurez-vous que le paramètre AllowKey=system.run[<command>,*] est ajouté pour chaque commande autorisée dans la configuration de l'agent afin d'autoriser une commande spécifique en mode nowait. Redémarrez le démon de l'agent si vous modifiez ce paramètre.

Ensuite, lors de la configuration d'une nouvelle action dans Alerts → Actions → Trigger actions :

  1. Définissez les conditions appropriées, par exemple, indiquez que l'action est activée en cas de problèmes de gravité Disaster sur l'une des applications Apache.

  1. Dans l'onglet Operations, cliquez sur Add dans le bloc Operations, Recovery operations ou Update operations.

  1. Sélectionnez l'un des scripts prédéfinis dans la liste déroulante Operation et définissez la Target list pour le script.

Scripts prédéfinis

Les scripts disponibles pour les opérations d'action (webhook, script, SSH, Telnet, IPMI) sont définis dans les scripts globaux avec Opération d'action sélectionné comme portée.

Par exemple :

sudo /etc/init.d/apache restart 

Dans ce cas, Zabbix tentera de redémarrer un processus Apache. Avec cette commande, assurez-vous que la commande est exécutée sur l'agent Zabbix (cliquez sur le bouton agent Zabbix en regard de Exécuter sur).

Notez l'utilisation de sudo - l'utilisateur Zabbix ne dispose pas par défaut des permissions nécessaires pour redémarrer les services système. Voir ci-dessous pour des indications sur la configuration de sudo.

À partir de Zabbix agent 7.0, les commandes distantes peuvent également être exécutées sur un agent fonctionnant en mode actif. L'agent Zabbix - qu'il soit actif ou passif - doit s'exécuter sur l'hôte distant et exécute les commandes en arrière-plan.

Les commandes distantes sur l'agent Zabbix sont exécutées sans délai d'attente via la clé system.run[,nowait] et ne sont pas vérifiées pour les résultats d'exécution. Sur Zabbix serveur et Zabbix proxy, les commandes distantes sont exécutées avec le délai d'attente défini par le paramètre TrapperTimeout du fichier zabbix_server.conf ou zabbix_proxy.conf et sont vérifiées pour les résultats d'exécution. Pour plus d'informations, voir Délai d'attente du script.

Permissions d'accès

Assurez-vous que l'utilisateur 'zabbix' dispose des permissions d'exécution pour les commandes configurées. Il peut être utile d'utiliser sudo pour donner accès à des commandes privilégiées. Pour configurer l'accès, exécutez en tant que root :

visudo

Exemples de lignes pouvant être utilisées dans le fichier sudoers :

# autorise l'utilisateur 'zabbix' à exécuter toutes les commandes sans mot de passe.
zabbix ALL=NOPASSWD: ALL

# autorise l'utilisateur 'zabbix' à redémarrer apache sans mot de passe.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart

Sur certains systèmes, le fichier sudoers empêchera les utilisateurs non locaux d'exécuter des commandes. Pour modifier cela, commentez l'option requiretty dans /etc/sudoers.

Commandes distantes avec plusieurs interfaces

Si le système cible possède plusieurs interfaces du type sélectionné (agent Zabbix ou IPMI), les commandes distantes seront exécutées sur l’interface par défaut.

Il est possible d’exécuter des commandes distantes via SSH et Telnet en utilisant une autre interface que celle de l’agent Zabbix. L’interface disponible à utiliser est sélectionnée dans l’ordre suivant :

  • Interface par défaut de l’agent Zabbix
  • Interface par défaut SNMP
  • Interface par défaut JMX
  • Interface par défaut IPMI

Commandes à distance IPMI

Pour les commandes distantes IPMI, la syntaxe suivante doit être utilisée :

<command> [<value>]

où

  • <command> - une des commandes IPMI sans espaces
  • <value> - 'on', 'off' ou tout entier non signé. <valeur> est un paramètre facultatif.

Exemples

Exemples de scripts globaux pouvant être utilisés comme commandes distantes dans les opérations d'action.

Exemple 1

Redémarrage de Windows sous une certaine condition.

Afin de redémarrer automatiquement Windows lorsqu’un problème est détecté par Zabbix, définissez le script suivant :

Paramètre du script Valeur
Portée 'Action operation'
Type 'Script'
Commande c:\windows\system32\shutdown.exe -r -f

Exemple 2

Redémarrez l’hôte en utilisant le contrôle IPMI.

Paramètre du script Valeur
Portée 'Action operation'
Type 'IPMI'
Commande reset

Exemple 3

Éteignez l’hôte en utilisant le contrôle IPMI.

Paramètre du script Valeur
Portée 'Action operation'
Type 'IPMI'
Commande power off