3 Scripts

Aperçu

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

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

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 comme suit :

  • Pour les commandes distantes exécutées sur l’agent Zabbix :
    • ajout d’un paramètre AllowKey=system.run[<command>,*] pour chaque commande autorisée dans la configuration de l’agent, * correspond aux 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. Toutefois, s’il est nécessaire d’exécuter des commandes distantes sur le proxy Zabbix, 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 :

Column Description
Name Nom du script. Un clic sur le nom du script ouvre le formulaire de configuration du script.
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 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.
Un clic sur le nom de l’action ouvre le formulaire de configuration de l’action. Si l’utilisateur n’a pas les autorisations sur l’action, le nom n’est pas cliquable.
Type Le type de script affiché est : URL, Webhook, Script, SSH, Telnet ou commande 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 situé sous la liste propose une option de modification en masse :

  • Supprimer - supprimer les scripts

Pour utiliser cette option, cochez les cases devant les scripts respectifs et 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 Filtre est disponible au-dessus de la liste des scripts. Si vous cliquez dessus, un filtre devient disponible, dans lequel vous pouvez filtrer les scripts par nom et portée.

Configuration d’un script global

Il est recommandé d’utiliser des fonctions de macro au lieu de 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 :

Paramètre Description
Nom Nom unique du script.
Par ex. Clear /tmp filesystem
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 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 « Action operation » rend le script disponible pour tous les utilisateurs ayant accès à AlertsActions.
Si un script est effectivement utilisé dans une action, sa portée ne peut plus être modifiée pour autre chose que « action operation ».
Prise en charge des macros
La portée affecte l’étendue 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 une 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 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 de l’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 ex. Main menu/Sub menu1/Sub menu2. Lors de l’accès aux scripts via le menu hôte/événement dans les sections de supervision, ils seront organisés selon les répertoires indiqués.
Ce champ s’affiche uniquement si « Manual host action » ou « Manual event action » est sélectionné comme Portée.
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 Portée.
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 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 en URL.
Ouvrir dans une nouvelle fenêtre Détermine si l’URL doit être ouverte dans un nouvel onglet du navigateur ou dans le même.
Type de script : Webhook
Paramètres 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 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 à côté.
La prise en charge des macros dépend de la portée du script (voir Portée ci-dessus).
Voir aussi : configuration du média Webhook, Objets JavaScript supplémentaires.
Délai d’expiration Délai d’expiration de l’exécution JavaScript (1-60s, 30s par défaut).
Les suffixes de temps sont pris en charge, par ex. 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 or server - le script sera exécuté par Zabbix proxy ou le serveur, selon que l’hôte est supervisé par le proxy ou le 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 server.
Cette option ne sera pas disponible si les scripts globaux sont désactivés par le paramètre 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 « Password » est sélectionné comme méthode d’authentification.
Fichier de clé publique Saisissez le chemin vers le fichier de clé publique.
Ce champ est disponible si « Public key » est sélectionné comme méthode d’authentification.
Fichier de clé privée 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.
Phrase secrète Saisissez la phrase secrète.
Ce champ est disponible si « Public key » est sélectionné comme méthode d’authentification.
Port Saisissez le port.
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.
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 All pour tous les groupes d’hôtes).
Groupe d’utilisateurs Sélectionnez le groupe d’utilisateurs auquel le script sera disponible (ou All pour tous les groupes d’utilisateurs).
Ce champ s’affiche uniquement si « Manual host action » ou « Manual event action » est sélectionné comme Portée.
Autorisations d’hôte requises 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 s’affiche uniquement si « Manual host action » ou « Manual event action » est sélectionné comme Portée.
Configuration avancée Cliquez sur le libellé Configuration avancée pour afficher les options de configuration avancée.
Ce champ s’affiche uniquement si « Manual host action » ou « Manual event action » est sélectionné comme Portée.

Configuration avancée

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

Paramètre Description
Activer la saisie utilisateur 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.
Invite de saisie Saisissez un texte personnalisé invitant à une saisie utilisateur personnalisée. Ce texte sera affiché au-dessus du champ de saisie dans la fenêtre contextuelle Saisie manuelle.
Pour voir 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 de la portée du script (voir Portée dans les paramètres généraux de configuration du script).
Type de saisie Sélectionnez le type de saisie manuelle :
Chaîne - chaîne unique ;
Liste déroulante - la valeur est sélectionnée parmi plusieurs options de liste déroulante.
Options de la liste déroulante Saisissez des valeurs uniques pour la liste déroulante de saisie utilisateur dans une liste délimité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 n'est affiché que si « Liste déroulante » est sélectionné comme Type de saisie.
Chaîne de saisie par défaut 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 Règle de validation de saisie.
La valeur saisie ici sera affichée par défaut dans la fenêtre contextuelle Saisie manuelle.
Ce champ n'est affiché que si « Chaîne » est sélectionné comme Type de saisie.
Règle de validation de saisie Saisissez une expression régulière pour valider la chaîne de saisie utilisateur.
Les expressions régulières globales sont prises en charge.
Ce champ n'est affiché que si « Chaîne » est sélectionné comme Type de saisie.
Activer la 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.
Texte de confirmation Saisissez un texte de confirmation personnalisé pour la fenêtre contextuelle de confirmation activée avec la case à cocher ci-dessus (par exemple, Le système distant va être redémarré. Êtes-vous sûr ?). Pour voir à quoi ressemblera le texte, cliquez sur Tester la confirmation à côté du champ.
Les macros et les 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 consécutives.

Saisie manuelle utilisateur

La saisie manuelle utilisateur 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 manuelle utilisateur :

  • 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 manuelle utilisateur 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'affichera 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 manuelle utilisateur est disponible uniquement pour les scripts dont la portée est « Manual host action » ou « Manual event action ».

Exécution du script et résultat

Les scripts exécutés par le serveur Zabbix sont lancé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 tous les détails de la sortie, vous pouvez mettre en place 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'expiration du script

Agent Zabbix

Il peut arriver qu’un délai d’expiration se produise lors de l’exécution d’un script.

Voir ci-dessous un exemple de script exécuté sur l’agent Zabbix ainsi que 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 l’agent Zabbix et la configuration du serveur Zabbix. Cependant, pour l’agent Zabbix en mode actif, le paramètre Timeout dans la configuration du serveur Zabbix doit être d’au moins plusieurs secondes supérieur au paramètre RefreshActiveChecks dans la configuration de l’agent Zabbix. Cela garantit que le serveur dispose de suffisamment de temps pour recevoir les résultats des contrôles actifs depuis l’agent. Notez que l’exécution de scripts sur un agent actif est prise en charge depuis l’agent Zabbix 7.0.

Si le paramètre Timeout a été modifié dans la configuration de l’agent Zabbix, 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 l’agent Zabbix, mais qu’il est également nécessaire de modifier le paramètre Timeout dans la configuration du serveur Zabbix.

Serveur/proxy Zabbix

Voir ci-dessous un exemple de 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).