3 Scripts

Vue d’ensemble

Dans la section Alertes > Scripts, les scripts globaux définis par l’utilisateur peuvent être configurés et gérés.

Ce menu est disponible uniquement pour les utilisateurs de type SuperAdmin.

Les scripts globaux, selon la portée configurée et les permissions de l’utilisateur, peuvent être exécutés :

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

Les scripts distants sont désactivés par défaut sur l’agent Zabbix et le proxy Zabbix. Ils peuvent être activés comme suit :

  • Pour les commandes distantes exécutées sur l’agent Zabbix :
    • ajouter un paramètre AllowKey=system.run[<command>,*] pour chaque commande autorisée dans la configuration de l’agent, * représentant le mode wait ou 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 elles sont exécutées sur un agent Zabbix surveillé par ce proxy Zabbix. Si l’exécution de commandes distantes sur le proxy Zabbix est toutefois nécessaire, définissez le paramètre EnableRemoteCommands sur « 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 :

Colonne Description
Nom Nom du script. Cliquer sur le nom du script ouvre le formulaire de configuration du script.
Portée 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 est disponible : dans les commandes distantes des opérations d’action, depuis le menu de l’hôte ou depuis le menu des événements, respectivement.
Utilisé dans les 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 ne dispose d’aucune permission sur l’action, le nom n’est pas cliquable.
Type Le type de script est affiché : commande URL, Webhook, Script, SSH, Telnet ou IPMI.
Exécuter sur Indique si le script sera exécuté sur l’agent Zabbix, le proxy Zabbix ou le serveur, ou uniquement sur le serveur Zabbix.
Commandes Toutes les commandes à exécuter dans le script sont affichées.
Rien n’est affiché ici pour les webhooks.
Groupe d’utilisateurs Le groupe d’utilisateurs auquel le script est disponible est affiché (ou Tous pour tous les groupes d’utilisateurs).
Groupe d’hôtes Le groupe d’hôtes pour lequel le script est disponible est affiché (ou Tous pour tous les groupes d’hôtes).
Accès aux hôtes Le niveau de permission pour le groupe d’hôtes est affiché : Lecture ou Écriture. Seuls les utilisateurs disposant du niveau de permission requis pourront exécuter le script.

Pour configurer un nouveau script, cliquez sur le bouton Créer un 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 échappées automatiquement.

Attributs du script :

Paramètre Description
Nom Nom unique du script.
Ex. : Clear /tmp filesystem
Portée Portée du script : opération d’action, action manuelle sur un hôte ou action manuelle sur un événement. Ce paramètre détermine où le script peut être utilisé : dans les commandes distantes des opérations d’action, depuis le menu de l’hôte ou depuis le menu de l’événement, respectivement.
Définir la portée sur « Opération d’action » rend le script disponible pour tous les utilisateurs ayant accès à Alertes > Actions.
Si un script est effectivement utilisé dans une action, sa portée ne peut pas être modifiée pour quitter « opération d’action ».
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 la transmission d’informations sur l’utilisateur ayant lancé le script. Cependant, elles ne sont pas prises en charge si la portée du script est « opération d’action », 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 un hôte et d’action manuelle sur un événement.
Pour connaître les autres macros 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 remplacée par une valeur contenant des espaces (par exemple, le nom d’un hôte), n’oubliez pas de la mettre entre guillemets si nécessaire.
Chemin du menu Chemin de menu souhaité pour 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 ou de l’événement dans les sections de supervision, ils seront organisés selon les répertoires indiqués.
Ce champ s’affiche uniquement si « Action manuelle sur un hôte » ou « Action manuelle sur un événement » est sélectionné comme Portée.
Type Cliquez sur le bouton correspondant pour sélectionner le type de script :
commande URL, Webhook, Script, SSH, Telnet ou IPMI.
Le type URL est disponible uniquement lorsque « Action manuelle sur un hôte » ou « Action manuelle sur un événement » est sélectionné comme Portée.
Type de script : URL
URL Indiquez l’URL pour y accéder rapidement 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 Portée 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 dans l’URL.
Ouvrir dans une nouvelle fenêtre Détermine si l’URL doit être ouverte dans un nouvel onglet du navigateur ou dans l’onglet actuel.
Type de script : Webhook
Paramètres Spécifiez les variables du webhook sous forme de paires attribut-valeur.
Voir également : 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 Portée 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 située à côté.
La prise en charge des macros dépend de la portée du script (voir Portée ci-dessus).
Voir également : configuration du média Webhook, objets JavaScript supplémentaires.
Délai d’expiration Délai d’expiration de l’exécution JavaScript (1 à 60 s, 30 s par défaut).
Les suffixes temporels sont pris en charge (par exemple, 30s, 1m).
Type de script : Script
Exécuter sur 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 ou serveur - le script sera exécuté par Zabbix proxy ou serveur, selon que l’hôte est supervisé par un proxy ou par un serveur.
Il sera exécuté sur le proxy si cette fonction est activée par EnableRemoteCommands.
Il sera exécuté sur le serveur si les scripts globaux sont activés par le paramètre du serveur EnableGlobalScripts.
Zabbix serveur - 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 du serveur EnableGlobalScripts.
Commandes 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 Portée ci-dessus). Les macros utilisateur personnalisées sont prises en charge.
Type de script : SSH
Méthode d’authentification Sélectionnez la méthode d’authentification : mot de passe ou clé publique.
Nom d’utilisateur Saisissez le nom d’utilisateur.
Mot de passe Saisissez le mot de passe.
Ce champ est disponible si « Mot de passe » est sélectionné comme méthode d’authentification.
Fichier de clé publique Saisissez le chemin du fichier de clé publique.
Ce champ est disponible si « Clé publique » est sélectionné comme méthode d’authentification.
Fichier de clé privée Saisissez le chemin du fichier de clé privée.
Ce champ est disponible si « Clé publique » est sélectionné comme méthode d’authentification.
Phrase secrète Saisissez la phrase secrète.
Ce champ est disponible si « Clé publique » 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.
Commandes Saisissez les commandes.
La prise en charge des macros dépend de la portée du script (voir Portée ci-dessus). Les macros utilisateur personnalisées sont prises en charge.
Type de script : Telnet
Nom d’utilisateur Saisissez le nom d’utilisateur.
Mot de passe Saisissez le mot de passe.
Port Saisissez le port du service Telnet distant sur l’hôte cible auquel Zabbix se connectera.
Commandes Saisissez les commandes.
La prise en charge des macros dépend de la portée du script (voir Portée ci-dessus). Les macros utilisateur personnalisées sont prises en charge.
Type de script : IPMI
Commande Saisissez la commande IPMI.
La prise en charge des macros dépend de la portée du script (voir Portée ci-dessus). Les macros utilisateur personnalisées sont prises en charge.
Description Saisissez une description du script.
Groupe d’hôtes Sélectionnez le groupe d’hôtes pour lequel le script sera disponible (ou Tous pour tous les groupes d’hôtes).
Groupe d’utilisateurs Sélectionnez le groupe d’utilisateurs auquel le script sera disponible (ou Tous pour tous les groupes d’utilisateurs).
Ce champ s’affiche uniquement si « Action manuelle sur un hôte » ou « Action manuelle sur un événement » est sélectionné comme Portée.
Autorisations requises sur l’hôte Sélectionnez le niveau d’autorisation pour le groupe d’hôtes : Lecture ou Écriture. Seuls les utilisateurs disposant du niveau d’autorisation requis pourront exécuter le script.
Ce champ s’affiche uniquement si « Action manuelle sur un hôte » ou « Action manuelle sur un événement » est sélectionné comme Portée.
Configuration avancée Cliquez sur l’en-tête Configuration avancée pour afficher les options de configuration avancée.
Ce champ s’affiche uniquement si « Action manuelle sur un hôte » ou « Action manuelle sur un événement » est sélectionné comme Portée.

Configuration avancée

Des options de configuration avancée sont disponibles dans la 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 l'utilisateur à fournir une saisie 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 respecte la règle de validation de la 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 pris 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 est affiché dans une fenêtre contextuelle qui apparaît après l'exécution du script. La valeur de retour du script est une 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 blancs de fin, qui sont tronqués).
  • Si le script se termine avec une erreur (code de sortie non nul), la valeur de retour est une sortie d'erreur standard limitée à 2 Ko.

Par défaut, Zabbix ne stocke pas la sortie étendue des scripts. Pour conserver tous les détails de sortie, vous pouvez mettre en place une journalisation directement dans le script lui-même (par exemple, en redirigeant 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 base de données s'appliquent également.

Voici un exemple de script et de 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'attente du script sur Zabbix agent

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

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

sleep 5
df -h

Dans ce cas, le message d'erreur est le suivant :

Timeout while executing a shell script.

Pour éviter ce type de situation, il est conseillé d'optimiser le script lui-même (dans l'exemple ci-dessus, « 5 ») au lieu d'ajuster le paramètre Timeout dans la configuration de Zabbix agent et la configuration de Zabbix serveur.

Si le paramètre Timeout a été modifié dans la configuration de Zabbix agent, le message d'erreur suivant s'affichera :

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

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

Délai d'expiration des scripts sur les agents actifs

Il est possible d'exécuter des scripts uniquement sur des agents fonctionnant en mode actif. Une fois l'exécution du script déclenchée par une opération d'action ou par l'exécution manuelle d'un script, la commande est incluse dans la configuration des contrôles actifs 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'expiration du serveur/proxy pour l'exécution du script. Veuillez augmenter le délai d'expiration par défaut du serveur/proxy pour l'exécution du script. Le délai d'expiration doit être supérieur à la fréquence de rafraîchissement des contrôles actifs, sinon il expire avant que l'agent actif ne reçoive le script et puisse renvoyer le résultat.

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

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

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