2 Commandes à distance

Aperçu

Avec les commandes à distance, vous pouvez définir qu’une certaine commande prédéfinie est automatiquement exécutée sur l’hôte surveillé sous certaines conditions.

Ainsi, les commandes à distance constituent un mécanisme puissant pour la supervision proactive intelligente.

Dans les utilisations les plus évidentes de cette fonctionnalité, vous pouvez essayer de :

  • Redémarrer automatiquement certaines applications (serveur Web, middleware, CRM) si elles ne répondent pas
  • Utiliser la commande 'reboot' IPMI pour redémarrer un serveur distant s'il ne répond pas aux demandes
  • Libérer automatiquement de l'espace disque (suppression des anciens fichiers, nettoyage de /tmp) si vous manquez d'espace disque
  • Migrer une VM d'un boîtier physique à un autre en fonction de la charge du processeur
  • Ajouter de nouveaux nœuds à un environnement cloud en cas de ressources CPU insuffisantes (disque, mémoire, etc.)

La configuration d'une action pour les commandes à distance est similaire à celle pour l'envoi d'un message, la seule différence étant que Zabbix exécutera une commande au lieu d'envoyer un message.

Les commandes à distance peuvent être exécutées par un serveur, un proxy ou un agent Zabbix. Les commandes à distance sur l'agent Zabbix peuvent être exécutées directement par le serveur Zabbix ou via un proxy Zabbix. Les commandes distantes de l'agent Zabbix et du proxy Zabbix sont désactivées par défaut. Elles peuvent être activées en :

  • ajoutant le paramètre AllowKey=system.run[*] dans la configuration de l'agent;
  • définissant le paramètre EnableRemoteCommands à '1' dans la configuration du proxy.

Les commandes distantes exécutées par le serveur Zabbix sont exécutées comme décrit dans Exécution de commandes y compris la vérification du code de sortie.

Les commandes à distance sont exécutées même si l'hôte cible est en maintenance.

Limite des commandes distantes

La limite des commandes distantes 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) :

Base de données Limite en caractères Limite en octets
MySQL 65535 65535
PostgreSQL 65535 non limitée
SQLite (Zabbix proxy uniquement) 65535 non limitée

La sortie de l’exécution d’une commande distante (valeur de retour) est limitée à 16 Mo (y compris les espaces de fin qui sont tronqués). La limite des commandes distantes IPMI dépend de la bibliothèque IPMI installée. Notez que les limites de la base de données s’appliquent à toutes les commandes distantes.

Configuration

Ces 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 avec le 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 Alertes → Actions → Actions sur les déclencheurs :

  1. Définissez les conditions appropriées, par exemple, indiquez que l'action est activée pour tout problème de gravité désastre concernant l'une des applications Apache.

  1. Dans l'onglet Opérations, cliquez sur Ajouter dans le bloc Opérations, Opérations de récupération ou Opérations de mise à jour.

  1. Sélectionnez l'un des scripts prédéfinis dans la liste déroulante Opération et définissez la Liste des cibles 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.

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 Zabbix agent en face de Execute on).

Notez l’utilisation de sudo : l’utilisateur Zabbix n’a pas, par défaut, les autorisations nécessaires pour redémarrer les services système. Voir ci-dessous pour des conseils 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. Zabbix agent — 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 Zabbix agent sont exécutées sans délai d’expiration par la clé system.run[,nowait] et ne sont pas vérifiées quant à leurs résultats d’exécution. Sur Zabbix server et Zabbix proxy, les commandes distantes sont exécutées avec le délai d’expiration défini par le paramètre TrapperTimeout du fichier zabbix_server.conf ou zabbix_proxy.conf et sont vérifiées quant à leurs résultats d’exécution. Pour plus d’informations, voir Délai d’expiration 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>]

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