3 Scripts

Vue d'ensemble

Dans la section Alerts > Scripts, des scripts globaux définis par l'utilisateur peuvent être configurés et maintenus.

Les scripts globaux, selon le périmètre configuré et les permissions de l'utilisateur, sont disponibles pour exécution :

  • depuis le menu de l'hôte dans विभिन्न emplacements de l'interface (Dashboard, Problems, Latest data, Maps, etc.)
  • depuis le menu des événements
  • peuvent être exécutés comme opération d'action

Les scripts sont exécutés sur l'agent Zabbix, le serveur Zabbix (proxy) ou uniquement sur le serveur Zabbix Voir aussi Exécution de commandes.

Sur l'agent Zabbix comme sur le proxy Zabbix, les scripts distants sont désactivés par défaut. Ils peuvent être activés en :

  • Pour les commandes distantes exécutées sur l'agent Zabbix :
    • ajoutant un paramètre AllowKey=system.run[<command>,*] pour chaque commande autorisée dans la configuration de l'agent, * désigne les modes wait et nowait ;
  • Pour les commandes distantes exécutées sur le proxy Zabbix :
    • Avertissement : il n'est pas nécessaire d'activer les commandes distantes sur le proxy Zabbix si les commandes distantes sont exécutées sur l'agent Zabbix surveillé par le proxy Zabbix. Si, toutefois, il est nécessaire d'exécuter des commandes distantes sur le proxy Zabbix, définissez le paramètre EnableRemoteCommands à '1' dans la configuration du proxy.

L'exécution des scripts globaux sur le serveur Zabbix peut être désactivée en définissant EnableGlobalScripts=0 dans la configuration du serveur. Pour les nouvelles installations, depuis Zabbix 7.0, l'exécution des scripts globaux sur le serveur Zabbix est désactivée par défaut.

Une liste des scripts existants avec leurs détails est affichée.

Données affichées :

Column Description
Name Nom du script. Cliquer sur le nom du script ouvre le formulaire de configuration du script.
Scope Périmètre du script - opération d'action, action manuelle sur l'hôte ou action manuelle sur l'événement. Ce paramètre détermine où le script est disponible.
Used in actions Toutes les actions dans lesquelles le script est utilisé sont affichées, précédées du nombre total de ces actions.
Cliquer sur le nom de l'action ouvre le formulaire de configuration de l'action. Si l'utilisateur n'a pas les permissions pour l'action, le nom n'est pas cliquable.
Type Le type de script est affiché - commande URL, Webhook, Script, SSH, Telnet ou IPMI.
Execute on Indique si le script sera exécuté sur l'agent Zabbix, le proxy Zabbix ou le serveur, ou uniquement sur le serveur Zabbix.
Commands Toutes les commandes à exécuter dans le script sont affichées.
Rien n'est affiché ici pour les webhooks.
User group Le groupe d'utilisateurs auquel le script est disponible est affiché (ou All pour tous les groupes d'utilisateurs).
Host group Le groupe d'hôtes pour lequel le script est disponible est affiché (ou All pour tous les groupes d'hôtes).
Host access Le niveau d'autorisation pour le groupe d'hôtes est affiché - Read ou Write. Seuls les utilisateurs disposant du niveau d'autorisation requis auront accès à l'exécution du script.

Pour configurer un nouveau script, cliquez sur le bouton Create script dans le coin supérieur droit.

Options de modification en masse

Un bouton sous la liste propose une option de modification en masse :

  • Supprimer - supprimer les scripts

Pour utiliser cette option, cochez les cases devant les scripts concernés, puis cliquez sur Supprimer.

Utilisation du filtre

Vous pouvez utiliser le filtre pour afficher uniquement les scripts qui vous intéressent. Pour de meilleures performances de recherche, les données sont recherchées avec les macros non résolues.

Le lien Filter est disponible au-dessus de la liste des scripts. Si vous cliquez dessus, un filtre devient disponible, où vous pouvez filtrer les scripts par nom et par portée.

Configuration d'un script global

Il est recommandé d'utiliser des fonctions de macro plutôt que des macros simples dans les scripts globaux afin d'améliorer la sécurité, car les macros ne sont pas automatiquement échappées.

Attributs du script :

Parameter Description
Name Nom unique du script.
Par exemple, Clear /tmp filesystem
Scope Portée du script - opération d'action, action manuelle sur l'hôte ou action manuelle sur l'événement. Ce paramètre détermine où le script peut être utilisé - respectivement dans les commandes distantes des opérations d'action, depuis le menu de l'hôte ou depuis le menu de l'événement.
Définir la portée sur 'Action operation' rend le script disponible pour tous les utilisateurs ayant accès à Alerts > Actions.
Si un script est réellement utilisé dans une action, sa portée ne peut plus être modifiée pour ne plus être 'action operation'.
Prise en charge des macros
La portée affecte l'ensemble des macros disponibles. Par exemple, les macros liées à l'utilisateur ({USER.*}) sont prises en charge dans les scripts afin de permettre le passage d'informations sur l'utilisateur qui a lancé le script. Cependant, elles ne sont pas prises en charge si la portée du script est action operation, car les opérations d'action sont exécutées automatiquement.
Une macro {MANUALINPUT} permet de spécifier une saisie manuelle au moment de l'exécution du script. Elle est prise en charge pour les scripts d'action manuelle sur l'hôte et d'action manuelle sur l'événement.
Pour savoir quelles autres macros sont prises en charge, recherchez 'Trigger-based notifications and commands/Trigger-based commands', 'Manual host action scripts' et 'Manual event action scripts' dans le tableau des macros prises en charge. Notez que si une macro peut être résolue en une valeur contenant des espaces (par exemple, le nom d'hôte), n'oubliez pas de la mettre entre guillemets si nécessaire.
Menu path Chemin de menu souhaité vers le script. Par exemple, Default ou Default/ affichera le script dans le répertoire correspondant. Les menus peuvent être imbriqués, par exemple Main menu/Sub menu1/Sub menu2. Lors de l'accès aux scripts via le menu de l'hôte/de l'événement dans les sections de supervision, ils seront organisés selon les répertoires indiqués.
Ce champ est affiché uniquement si 'Manual host action' ou 'Manual event action' est sélectionné comme Scope.
Type Cliquez sur le bouton correspondant pour sélectionner le type de script :
URL, Webhook, Script, SSH, Telnet ou commande IPMI.
Le type URL est disponible uniquement lorsque 'Manual host action' ou 'Manual event action' est sélectionné comme Scope.
Type de script : URL
URL Spécifiez l'URL pour un accès rapide depuis le menu de l'hôte ou le menu de l'événement.
Les macros et les macros utilisateur personnalisées sont prises en charge. La prise en charge des macros dépend de la portée du script (voir Scope ci-dessus).
Utilisez la macro {MANUALINPUT} dans ce champ pour pouvoir spécifier une saisie manuelle au moment de l'exécution du script, par exemple :
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
Les valeurs des macros ne doivent pas être encodées en URL.
Open in new window Détermine si l'URL doit être ouverte dans un nouvel onglet du navigateur ou dans le même onglet.
Type de script : Webhook
Parameters Spécifiez les variables du webhook sous forme de paires attribut-valeur.
Voir aussi : configuration du média Webhook.
Les macros et les macros utilisateur personnalisées sont prises en charge dans les valeurs des paramètres. La prise en charge des macros dépend de la portée du script (voir Scope ci-dessus).
Script Saisissez le code JavaScript dans l'éditeur modal qui s'ouvre lorsque vous cliquez dans le champ du paramètre ou sur l'icône en forme de crayon à côté.
La prise en charge des macros dépend de la portée du script (voir Scope ci-dessus).
Voir aussi : configuration du média Webhook, Objets JavaScript supplémentaires.
Timeout Délai d'exécution JavaScript (1-60 s, 30 s par défaut).
Les suffixes de temps sont pris en charge, par exemple 30s, 1m.
Type de script : Script
Execute on Cliquez sur le bouton correspondant pour exécuter le script shell sur :
Zabbix agent - le script sera exécuté par Zabbix agent (si l'élément system.run est autorisé) sur l'hôte
Zabbix proxy or server - le script sera exécuté par Zabbix proxy ou serveur - selon que l'hôte est supervisé par proxy ou par serveur.
Il sera exécuté sur le proxy si cela est activé par EnableRemoteCommands.
Il sera exécuté sur le serveur si les scripts globaux sont activés par le paramètre serveur EnableGlobalScripts.
Zabbix server - le script sera exécuté uniquement par Zabbix serveur.
Cette option ne sera pas disponible si les scripts globaux sont désactivés par le paramètre serveur EnableGlobalScripts.
Commands Saisissez le chemin complet des commandes à exécuter dans le script.
La prise en charge des macros dépend de la portée du script (voir Scope ci-dessus). Les macros utilisateur personnalisées sont prises en charge.
Type de script : SSH
Authentication method Sélectionnez la méthode d'authentification - mot de passe ou clé publique.
Username Saisissez le nom d'utilisateur.
Password Saisissez le mot de passe.
Ce champ est disponible si 'Password' est sélectionné comme méthode d'authentification.
Public key file Saisissez le chemin vers le fichier de clé publique.
Ce champ est disponible si 'Public key' est sélectionné comme méthode d'authentification.
Private key file Saisissez le chemin vers le fichier de clé privée.
Ce champ est disponible si 'Public key' est sélectionné comme méthode d'authentification.
Passphrase Saisissez la phrase de passe.
Ce champ est disponible si 'Public key' est sélectionné comme méthode d'authentification.
Port Saisissez le port du service SSH distant sur l'hôte cible auquel Zabbix se connectera.
Commands Saisissez les commandes.
La prise en charge des macros dépend de la portée du script (voir Scope ci-dessus). Les macros utilisateur personnalisées sont prises en charge.
Type de script : Telnet
Username Saisissez le nom d'utilisateur.
Password Saisissez le mot de passe.
Port Saisissez le port du service Telnet distant sur l'hôte cible auquel Zabbix se connectera.
Commands Saisissez les commandes.
La prise en charge des macros dépend de la portée du script (voir Scope ci-dessus). Les macros utilisateur personnalisées sont prises en charge.
Type de script : IPMI
Command Saisissez la commande IPMI.
La prise en charge des macros dépend de la portée du script (voir Scope ci-dessus). Les macros utilisateur personnalisées sont prises en charge.
Description Saisissez une description du script.
Host group Sélectionnez le groupe d'hôtes pour lequel le script sera disponible (ou All pour tous les groupes d'hôtes).
User group Sélectionnez le groupe d'utilisateurs auquel le script sera disponible (ou All pour tous les groupes d'utilisateurs).
Ce champ est affiché uniquement si 'Manual host action' ou 'Manual event action' est sélectionné comme Scope.
Required host permissions Sélectionnez le niveau d'autorisation pour le groupe d'hôtes - Read ou Write. Seuls les utilisateurs disposant du niveau d'autorisation requis auront accès à l'exécution du script.
Ce champ est affiché uniquement si 'Manual host action' ou 'Manual event action' est sélectionné comme Scope.
Advanced configuration Cliquez sur l'en-tête Advanced configuration pour afficher les options de configuration avancée.
Ce champ est affiché uniquement si 'Manual host action' ou 'Manual event action' est sélectionné comme Scope.

Configuration avancée

Des options de configuration avancée sont disponibles dans une section repliable Configuration avancée :

Parameter Description
Enable user input Cochez la case pour activer la saisie manuelle de l'utilisateur avant l'exécution du script.
La saisie manuelle de l'utilisateur remplacera la valeur de la macro {MANUALINPUT} dans le script.
Voir aussi : Saisie manuelle de l'utilisateur.
Input prompt Saisissez un texte personnalisé invitant à fournir une saisie utilisateur personnalisée. Ce texte sera affiché au-dessus du champ de saisie dans la fenêtre contextuelle Saisie manuelle.
Pour afficher un aperçu de la fenêtre contextuelle Saisie manuelle, cliquez sur Tester la saisie utilisateur. L'aperçu permet également de vérifier si la chaîne saisie est conforme à la règle de validation de saisie (voir les paramètres ci-dessous).
La prise en charge des macros et des macros utilisateur dépend du périmètre du script (voir Scope dans les paramètres généraux de configuration du script).
Input type Sélectionnez le type de saisie manuelle :
String - chaîne unique ;
Dropdown - la valeur est sélectionnée parmi plusieurs options de liste déroulante.
Dropdown options Saisissez des valeurs uniques pour la liste déroulante de saisie utilisateur sous forme de liste séparée par des virgules.
Pour inclure une option vide dans la liste déroulante, ajoutez une virgule supplémentaire au début, au milieu ou à la fin de la liste.
Ce champ s'affiche uniquement si 'Dropdown' est sélectionné comme Input type.
Default input string Saisissez la chaîne par défaut pour la saisie utilisateur (ou aucune).
Ce champ sera validé par rapport à l'expression régulière fournie dans le champ Input validation rule.
La valeur saisie ici sera affichée par défaut dans la fenêtre contextuelle Saisie manuelle.
Ce champ s'affiche uniquement si 'String' est sélectionné comme Input type.
Input validation rule Saisissez une expression régulière pour valider la chaîne de saisie de l'utilisateur.
Les expressions régulières globales sont prises en charge.
Ce champ s'affiche uniquement si 'String' est sélectionné comme Input type.
Enable confirmation Cochez la case pour afficher un message de confirmation avant l'exécution du script. Cette fonctionnalité peut être particulièrement utile pour des opérations potentiellement dangereuses (comme un script de redémarrage) ou susceptibles de prendre beaucoup de temps.
Confirmation text Saisissez un texte de confirmation personnalisé pour la fenêtre contextuelle de confirmation activée par la case à cocher ci-dessus (par exemple, Le système distant sera redémarré. Êtes-vous sûr ?). Pour voir à quoi ressemblera le texte, cliquez sur Tester la confirmation à côté du champ.
Macros et macros utilisateur personnalisées sont prises en charge.
Remarque : les macros ne seront pas développées lors du test du message de confirmation.

Si la saisie manuelle de l'utilisateur et un message de confirmation sont tous deux configurés, ils seront affichés dans des fenêtres contextuelles successives.

Saisie utilisateur manuelle

La saisie utilisateur manuelle permet de fournir un paramètre personnalisé à chaque exécution du script. Cela évite de devoir créer plusieurs scripts utilisateur similaires ne différant que par un seul paramètre.

Par exemple, vous pouvez vouloir fournir un entier différent ou une adresse URL différente au script lors de son exécution.

Pour activer la saisie utilisateur manuelle :

  • utilisez la macro {MANUALINPUT} dans le script (commandes, script, paramètre de script) là où nécessaire ; ou dans le champ URL des scripts URL ;
  • dans la configuration avancée du script, activez la saisie utilisateur manuelle et configurez les options de saisie.

Lorsque la saisie utilisateur est activée, avant l'exécution du script, une fenêtre contextuelle Saisie manuelle s'affiche pour demander à l'utilisateur de fournir une valeur personnalisée. La valeur fournie remplacera {MANUALINPUT} dans le script.

Selon la configuration, il sera demandé à l'utilisateur de saisir une valeur de type chaîne :

Ou de sélectionner une valeur dans une liste déroulante d'options prédéfinies :

La saisie utilisateur manuelle est disponible uniquement pour les scripts dont la portée est « Action manuelle sur l'hôte » ou « Action manuelle sur l'événement ».

Exécution du script et résultat

Les scripts exécutés par le serveur Zabbix sont exécutés dans l'ordre décrit sur la page d'exécution des commandes.

Le résultat du script s'affiche dans une fenêtre contextuelle qui apparaît après l'exécution du script. La valeur de retour du script correspond à la sortie standard :

  • Si le script se termine avec succès (code de sortie 0), la valeur de retour est limitée à 16 Mo (y compris les espaces de fin qui sont tronqués).
  • Si le script se termine avec une erreur (code de sortie non nul), la valeur de retour correspond à la sortie d'erreur standard, limitée à 2 Ko.

Par défaut, Zabbix ne stocke pas la sortie étendue des scripts. Pour conserver les détails complets de la sortie, vous pouvez implémenter une journalisation dans le script lui-même (par exemple, rediriger la sortie vers un fichier journal local).

Notez que pour les scripts exécutés soit sur le serveur Zabbix, soit sur le proxy Zabbix, les limites de la base de données s'appliquent également.

Vous trouverez ci-dessous un exemple de script et la fenêtre de résultat :

uname -v
/tmp/non_existing_script.sh
echo "This script was started by {USER.USERNAME}"

Le résultat du script n'affiche pas le script lui-même.

Délai d'exécution du script sur l'agent Zabbix

Vous pouvez rencontrer une situation dans laquelle un délai d'attente se produit lors de l'exécution d'un script.

Voir ci-dessous un exemple d'un script exécuté sur l'agent Zabbix et la fenêtre de résultat :

sleep 5
df -h

Le message d'erreur, dans ce cas, est le suivant :

Timeout while executing a shell script.

Pour éviter de telles situations, il est conseillé d'optimiser le script lui-même (dans l'exemple ci-dessus, "5") plutôt que d'ajuster le paramètre Timeout dans la configuration de l'agent Zabbix et la configuration du serveur Zabbix.

Si le paramètre Timeout a été modifié dans la configuration de l'agent Zabbix, le message d'erreur suivant apparaîtra :

Get value from agent failed: ZBX_TCP_READ() timed out.

Cela signifie que la modification a été effectuée dans la configuration de l'agent Zabbix, mais qu'il est également nécessaire de modifier le paramètre Timeout dans la configuration du serveur Zabbix.

Délai d'exécution du script sur les agents actifs

Il est possible d'exécuter des scripts sur des agents fonctionnant uniquement en mode actif. Une fois l'exécution du script déclenchée par une opération d'action ou par une exécution manuelle du script, la commande est incluse dans la configuration de vérification active et exécutée dès que l'agent actif la reçoit.

Les scripts manuels sont envoyés à l'agent actif avec le délai d'attente du serveur/proxy pour l'exécution du script. Veuillez augmenter le délai d'attente par défaut du serveur/proxy pour l'exécution du script. Le délai d'attente doit être supérieur à la fréquence d'actualisation des vérifications actives, sinon le délai est dépassé avant que l'agent actif ne reçoive le script et ne puisse renvoyer le résultat.

Délai d'exécution du script sur le serveur/proxy Zabbix

Voir ci-dessous un exemple d'un script exécuté sur le serveur Zabbix et la fenêtre de résultat :

sleep 11
df -h

Il est également conseillé d'optimiser le script lui-même (au lieu d'ajuster le paramètre TrapperTimeout à une valeur correspondante (dans notre cas, > 11) en modifiant la configuration du serveur Zabbix).