2 Commandes à distance
Vue d’ensemble
Avec les commandes à distance, vous pouvez définir qu’une commande prédéfinie donnée soit exécutée automatiquement sur l’hôte surveillé lorsqu’une condition est remplie.
Les commandes à distance constituent donc un mécanisme puissant pour une supervision proactive et intelligente.
Parmi les utilisations les plus évidentes de cette fonctionnalité, vous pouvez essayer de :
- 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, 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 à distance 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 à distance peuvent être exécutées par le serveur Zabbix, le proxy Zabbix ou l’agent Zabbix. Notez les points suivants :
- Les commandes à distance sur l’agent Zabbix peuvent être exécutées directement par le serveur Zabbix ou via le proxy Zabbix.
- Les commandes à distance 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 à distance sont exécutées même si l’hôte cible est en période de maintenance.
Les commandes à distance sont désactivées par défaut à la fois sur l’agent Zabbix et sur le proxy Zabbix. Elles peuvent être activées comme suit :
- Pour les commandes à distance 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 mode d’exécution (waitounowait). - Pour les commandes à distance exécutées par le proxy Zabbix, définissez le paramètre
EnableRemoteCommandssur1dans la configuration du proxy. Notez qu’il n’est pas nécessaire d’activer les commandes à distance 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 l’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 la 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 de l’exécution d’une commande à distance (valeur de retour) est limitée à 16 Mo (y compris les espaces en fin de chaîne, qui sont tronqués). La limite des commandes à distance 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 à 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 l'exécution d'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 Alertes > Actions > Actions de déclencheur :
- Définissez les conditions appropriées, par exemple en configurant l'activation de l'action lors de tout problème de gravité Désastre concernant l'une des applications Apache.

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

- Sélectionnez l'un des scripts prédéfinis dans la liste déroulante Opération et définissez la Liste des cibles du 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 essaiera 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 autorisations nécessaires pour redémarrer les services système. Voir ci-dessous pour obtenir 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 le 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'expiration par la clé system.run[,nowait] et leurs résultats d'exécution ne sont pas vérifiés.
Sur le serveur Zabbix et le proxy Zabbix, les commandes distantes sont exécutées avec le délai d'expiration défini dans le paramètre TrapperTimeout du fichier zabbix_server.conf ou zabbix_proxy.conf, et leurs résultats d'exécution sont vérifiés.
Pour plus d'informations, consultez Délai d'expiration du script.
Autorisations d’accès
Assurez-vous que l’utilisateur « zabbix » dispose des autorisations d’exécution pour les commandes configurées.
Vous pouvez utiliser sudo pour donner accès aux 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 :
# permet à l’utilisateur « zabbix » d’exécuter toutes les commandes sans mot de passe.
zabbix ALL=NOPASSWD: ALL
# permet à l’utilisateur « zabbix » de redémarrer apache sans mot de passe.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
Sur certains systèmes, le fichier sudoers empêche les utilisateurs non locaux d’exécuter des commandes.
Pour modifier ce comportement, commentez l’option requiretty dans /etc/sudoers.
Commandes à distance avec plusieurs interfaces
Si le système cible possède plusieurs interfaces du type sélectionné (agent Zabbix ou IPMI), les commandes à distance seront exécutées sur l’interface par défaut.
Il est possible d’exécuter des commandes à distance 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 SNMP par défaut
- Interface JMX par défaut
- Interface IPMI par défaut
Commandes distantes IPMI
Pour les commandes distantes IPMI, la syntaxe suivante doit être utilisée :
<command> [<value>]
où
- <command> - l'une des commandes IPMI, sans espaces
- <value> - 'on', 'off' ou tout entier non signé. <value> est un paramètre facultatif.
Exemples
Exemples de scripts globaux pouvant être utilisés comme commandes distantes dans les opérations d'une action.
Exemple 1
Redémarrage de Windows sous certaines conditions.
Pour 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 | 'Opération d'action' |
| 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 |