3 Skripte

Übersicht

Im Abschnitt Alerts > Scripts können benutzerdefinierte globale Skripte konfiguriert und verwaltet werden.

Dieses Menü ist nur für Benutzer des Typs SuperAdmin verfügbar.

Globale Skripte stehen, abhängig vom konfigurierten Geltungsbereich und auch von den Benutzerberechtigungen, zur Ausführung zur Verfügung:

  • Über das Host-Menü an verschiedenen Stellen im Frontend (Dashboard, Problems, Latest data, Maps usw.).
  • Über das Ereignismenü.
  • Können als Aktion-Operation ausgeführt werden.

Die Skripte werden auf dem Zabbix Agent, dem Zabbix Server (Proxy) oder nur auf dem Zabbix Server ausgeführt Siehe auch Command execution.

Sowohl auf dem Zabbix Agent als auch auf dem Zabbix Proxy sind Remote-Skripte standardmäßig deaktiviert. Sie können aktiviert werden durch:

  • Für Remote-Befehle, die auf dem Zabbix Agent ausgeführt werden:
    • Hinzufügen eines Parameters AllowKey=system.run[<command>,\*] für jeden erlaubten Befehl in der Agent-Konfiguration, wobei * für den wait- und nowait-Modus steht;
  • Für Remote-Befehle, die auf dem Zabbix Proxy ausgeführt werden:
    • Warnung: Es ist nicht erforderlich, Remote-Befehle auf dem Zabbix Proxy zu aktivieren, wenn Remote-Befehle auf dem Zabbix Agent ausgeführt werden, der vom Zabbix Proxy überwacht wird. Wenn es jedoch erforderlich ist, Remote-Befehle auf dem Zabbix Proxy auszuführen, setzen Sie den Parameter EnableRemoteCommands in der Proxy-Konfiguration auf '1'.

Die Ausführung globaler Skripte auf dem Zabbix Server kann durch Setzen von EnableGlobalScripts=0 in der Serverkonfiguration deaktiviert werden. Bei Neuinstallationen ist seit Zabbix 7.0 die Ausführung globaler Skripte auf dem Zabbix Server standardmäßig deaktiviert.

Eine Liste der vorhandenen Skripte mit ihren Details wird angezeigt.

Angezeigte Daten:

Column Description
Name Name des Skripts. Ein Klick auf den Skriptnamen öffnet das Konfigurationsformular des Skripts.
Scope Geltungsbereich des Skripts - Aktion-Operation, manuelle Host-Aktion oder manuelle Ereignisaktion. Diese Einstellung bestimmt, wo das Skript verfügbar ist - in Remote-Befehlen von Aktion-Operationen, über das Host-Menü oder über das Ereignismenü.
Used in actions Alle Aktionen, in denen das Skript verwendet wird, werden angezeigt, seit Zabbix 7.0.4 mit der Gesamtzahl dieser Aktionen davor.
Ein Klick auf den Aktionsnamen öffnet das Konfigurationsformular der Aktion. Wenn der Benutzer keine Berechtigungen für die Aktion hat, ist der Name nicht anklickbar.
Type Der Skripttyp wird angezeigt - URL, Webhook, Script, SSH, Telnet oder IPMI command.
Execute on Es wird angezeigt, ob das Skript auf dem Zabbix Agent, dem Zabbix Proxy oder Server oder nur auf dem Zabbix Server ausgeführt wird.
Commands Alle Befehle, die innerhalb des Skripts ausgeführt werden sollen, werden angezeigt.
Für webhooks wird hier nichts angezeigt.
User group Die Benutzergruppe, für die das Skript verfügbar ist, wird angezeigt (oder All für alle Benutzergruppen).
Host group Die Hostgruppe, für die das Skript verfügbar ist, wird angezeigt (oder All für alle Hostgruppen).
Host access Die Berechtigungsstufe für die Hostgruppe wird angezeigt - Read oder Write. Nur Benutzer mit der erforderlichen Berechtigungsstufe haben Zugriff auf die Ausführung des Skripts.

Um ein neues Skript zu konfigurieren, klicken Sie oben rechts auf die Schaltfläche Create script.

Optionen für die Massenbearbeitung

Eine Schaltfläche unterhalb der Liste bietet eine Massenbearbeitungsoption:

  • Löschen - die Skripte löschen

Um diese Option zu verwenden, markieren Sie die Kontrollkästchen vor den jeweiligen Skripten und klicken Sie auf Löschen.

Verwenden des Filters

Sie können den Filter verwenden, um nur die Skripte anzuzeigen, die Sie interessieren. Für eine bessere Suchleistung werden die Daten mit nicht aufgelösten Makros durchsucht.

Der Link Filter ist oberhalb der Skriptliste verfügbar. Wenn Sie darauf klicken, wird ein Filter angezeigt, mit dem Sie Skripte nach Name und Geltungsbereich filtern können.

Konfigurieren eines globalen Skripts

Es wird empfohlen, in globalen Skripten Makrofunktionen anstelle einfacher Makros zu verwenden, um die Sicherheit zu erhöhen, da Makros nicht automatisch maskiert werden.

Skriptattribute:

Parameter Beschreibung
Name Eindeutiger Name des Skripts.
Zum Beispiel: Clear /tmp filesystem
Scope Geltungsbereich des Skripts - Aktionsvorgang, manuelle Host-Aktion oder manuelle Ereignisaktion. Diese Einstellung bestimmt, wo das Skript verwendet werden kann - in Remote-Befehlen von Aktionsvorgängen, über das Host-Menü oder über das Ereignismenü.
Wenn der Geltungsbereich auf „Aktionsvorgang“ gesetzt wird, ist das Skript für alle Benutzer mit Zugriff auf Alarme > Aktionen verfügbar.
Wenn ein Skript tatsächlich in einer Aktion verwendet wird, kann sein Geltungsbereich nicht von „Aktionsvorgang“ weg geändert werden.
Makrounterstützung
Der Geltungsbereich beeinflusst den Bereich der verfügbaren Makros. Beispielsweise werden benutzerbezogene Makros ({USER.*}) in Skripten unterstützt, damit Informationen über den Benutzer übergeben werden können, der das Skript gestartet hat. Sie werden jedoch nicht unterstützt, wenn der Geltungsbereich des Skripts „Aktionsvorgang“ ist, da Aktionsvorgänge automatisch ausgeführt werden.
Mit einem {MANUALINPUT}-Makro kann eine manuelle Eingabe zum Zeitpunkt der Skriptausführung angegeben werden. Es wird für Skripte für manuelle Host-Aktionen und manuelle Ereignisaktionen unterstützt.
Um herauszufinden, welche anderen Makros unterstützt werden, suchen Sie in der Tabelle Unterstützte Makros nach „Trigger-based notifications and commands/Trigger-based commands“, „Manual host action scripts“ und „Manual event action scripts“. Beachten Sie, dass ein Makro, das zu einem Wert mit Leerzeichen aufgelöst werden kann (zum Beispiel ein Hostname), bei Bedarf in Anführungszeichen gesetzt werden muss.
Menu path Der gewünschte Menüpfad zum Skript. Beispielsweise wird das Skript mit Default oder Default/ im entsprechenden Verzeichnis angezeigt. Menüs können verschachtelt werden, zum Beispiel Main menu/Sub menu1/Sub menu2. Beim Zugriff auf Skripte über das Host- oder Ereignismenü in den Überwachungsbereichen werden sie entsprechend den angegebenen Verzeichnissen organisiert.
Dieses Feld wird nur angezeigt, wenn „Manuelle Host-Aktion“ oder „Manuelle Ereignisaktion“ als Scope ausgewählt ist.
Type Klicken Sie auf die entsprechende Schaltfläche, um den Skripttyp auszuwählen:
URL, Webhook, Skript, SSH, Telnet oder IPMI-Befehl.
Der Typ URL ist nur verfügbar, wenn „Manuelle Host-Aktion“ oder „Manuelle Ereignisaktion“ als Scope ausgewählt ist.
Skripttyp: URL
URL Geben Sie die URL für den Schnellzugriff über das Host-Menü oder Ereignismenü an.
Makros und benutzerdefinierte Benutzermakros werden unterstützt. Die Makrounterstützung hängt vom Geltungsbereich des Skripts ab (siehe Scope oben).
Verwenden Sie das {MANUALINPUT}-Makro in diesem Feld, um eine manuelle Eingabe zum Zeitpunkt der Skriptausführung angeben zu können, zum Beispiel:
http://{MANUALINPUT}/zabbix/zabbix.php?action=dashboard.view
Makrowerte dürfen nicht URL-codiert werden.
Open in new window Legt fest, ob die URL in einem neuen oder im selben Browser-Tab geöffnet werden soll.
Skripttyp: Webhook
Parameters Geben Sie die webhook-Variablen als Attribut-Wert-Paare an.
Siehe auch: Medienkonfiguration Webhook.
Makros und benutzerdefinierte Benutzermakros werden in Parameterwerten unterstützt. Die Makrounterstützung hängt vom Geltungsbereich des Skripts ab (siehe Scope oben).
Script Geben Sie den JavaScript-Code im modalen Editor ein, der geöffnet wird, wenn Sie in das Parameterfeld oder auf das Stiftsymbol daneben klicken.
Die Makrounterstützung hängt vom Geltungsbereich des Skripts ab (siehe Scope oben).
Siehe auch: Medienkonfiguration Webhook, Zusätzliche JavaScript-Objekte.
Timeout Zeitüberschreitung für die JavaScript-Ausführung (1-60 s, Standardwert 30 s).
Zeitsuffixe werden unterstützt (z. B. 30s, 1m).
Skripttyp: Skript
Execute on Klicken Sie auf die entsprechende Schaltfläche, um das Shell-Skript auszuführen auf:
Zabbix Agent - das Skript wird vom Zabbix Agent auf dem Host ausgeführt (wenn der system.run-Datenpunkt zulässig ist)
Zabbix Proxy oder Server - das Skript wird vom Zabbix Proxy oder Server ausgeführt, abhängig davon, ob der Host vom Proxy oder Server überwacht wird.
Es wird auf dem Proxy ausgeführt, wenn dies durch EnableRemoteCommands aktiviert ist.
Es wird auf dem Server ausgeführt, wenn globale Skripte durch den Serverparameter EnableGlobalScripts aktiviert sind.
Zabbix Server - das Skript wird nur vom Zabbix Server ausgeführt.
Diese Option ist nicht verfügbar, wenn globale Skripte durch den Serverparameter EnableGlobalScripts deaktiviert sind.
Commands Geben Sie den vollständigen Pfad zu den Befehlen ein, die innerhalb des Skripts ausgeführt werden sollen.
Die Makrounterstützung hängt vom Geltungsbereich des Skripts ab (siehe Scope oben). Benutzerdefinierte Benutzermakros werden unterstützt.
Skripttyp: SSH
Authentication method Wählen Sie die Authentifizierungsmethode aus - Passwort oder öffentlicher Schlüssel.
Username Geben Sie den Benutzernamen ein.
Password Geben Sie das Passwort ein.
Dieses Feld ist verfügbar, wenn „Passwort“ als Authentifizierungsmethode ausgewählt ist.
Public key file Geben Sie den Pfad zur Datei mit dem öffentlichen Schlüssel ein.
Dieses Feld ist verfügbar, wenn „Öffentlicher Schlüssel“ als Authentifizierungsmethode ausgewählt ist.
Private key file Geben Sie den Pfad zur Datei mit dem privaten Schlüssel ein.
Dieses Feld ist verfügbar, wenn „Öffentlicher Schlüssel“ als Authentifizierungsmethode ausgewählt ist.
Passphrase Geben Sie die Passphrase ein.
Dieses Feld ist verfügbar, wenn „Öffentlicher Schlüssel“ als Authentifizierungsmethode ausgewählt ist.
Port Geben Sie den Port des Remote-SSH-Dienstes auf dem Zielhost ein, mit dem Zabbix eine Verbindung herstellt.
Commands Geben Sie die Befehle ein.
Die Makrounterstützung hängt vom Geltungsbereich des Skripts ab (siehe Scope oben). Benutzerdefinierte Benutzermakros werden unterstützt.
Skripttyp: Telnet
Username Geben Sie den Benutzernamen ein.
Password Geben Sie das Passwort ein.
Port Geben Sie den Port des Remote-Telnet-Dienstes auf dem Zielhost ein, mit dem Zabbix eine Verbindung herstellt.
Commands Geben Sie die Befehle ein.
Die Makrounterstützung hängt vom Geltungsbereich des Skripts ab (siehe Scope oben). Benutzerdefinierte Benutzermakros werden unterstützt.
Skripttyp: IPMI
Command Geben Sie den IPMI-Befehl ein.
Die Makrounterstützung hängt vom Geltungsbereich des Skripts ab (siehe Scope oben). Benutzerdefinierte Benutzermakros werden unterstützt.
Description Geben Sie eine Beschreibung für das Skript ein.
Host group Wählen Sie die Hostgruppe aus, für die das Skript verfügbar sein soll (oder Alle für alle Hostgruppen).
User group Wählen Sie die Benutzergruppe aus, für die das Skript verfügbar sein soll (oder Alle für alle Benutzergruppen).
Dieses Feld wird nur angezeigt, wenn „Manuelle Host-Aktion“ oder „Manuelle Ereignisaktion“ als Scope ausgewählt ist.
Required host permissions Wählen Sie die Berechtigungsstufe für die Hostgruppe aus - Lesen oder Schreiben. Nur Benutzer mit der erforderlichen Berechtigungsstufe können das Skript ausführen.
Dieses Feld wird nur angezeigt, wenn „Manuelle Host-Aktion“ oder „Manuelle Ereignisaktion“ als Scope ausgewählt ist.
Advanced configuration Klicken Sie auf die Überschrift Erweiterte Konfiguration, um Optionen für die erweiterte Konfiguration anzuzeigen.
Dieses Feld wird nur angezeigt, wenn „Manuelle Host-Aktion“ oder „Manuelle Ereignisaktion“ als Scope ausgewählt ist.

Erweiterte Konfiguration

Erweiterte Konfigurationsoptionen sind in einem einklappbaren Abschnitt Erweiterte Konfiguration verfügbar:

Parameter Beschreibung
Benutzereingabe aktivieren Aktivieren Sie das Kontrollkästchen, um vor der Ausführung des Skripts eine manuelle Benutzereingabe zu ermöglichen.
Die manuelle Benutzereingabe ersetzt den Wert des {MANUALINPUT}-Makros im Skript.
Siehe auch: Manuelle Benutzereingabe.
Eingabeaufforderung Geben Sie einen benutzerdefinierten Text ein, der zur Eingabe einer benutzerdefinierten Benutzereingabe auffordert. Dieser Text wird oberhalb des Eingabefelds im Popup Manuelle Eingabe angezeigt.
Um eine Vorschau des Popups Manuelle Eingabe anzuzeigen, klicken Sie auf Benutzereingabe testen. In der Vorschau können Sie außerdem prüfen, ob die Eingabezeichenfolge der Eingabevalidierungsregel entspricht (siehe Parameter unten).
Die Unterstützung für Makros und benutzerdefinierte Makros hängt vom Geltungsbereich des Skripts ab (siehe Geltungsbereich in den allgemeinen Konfigurationsparametern des Skripts).
Eingabetyp Wählen Sie den Typ der manuellen Eingabe aus:
String - einzelne Zeichenfolge;
Dropdown - der Wert wird aus mehreren Dropdown-Optionen ausgewählt.
Dropdown-Optionen Geben Sie eindeutige Werte für das Dropdown der Benutzereingabe als durch Kommas getrennte Liste ein.
Um eine leere Option im Dropdown einzuschließen, fügen Sie ein zusätzliches Komma am Anfang, in der Mitte oder am Ende der Liste hinzu.
Dieses Feld wird nur angezeigt, wenn Dropdown als Eingabetyp ausgewählt ist.
Standard-Eingabezeichenfolge Geben Sie die Standardzeichenfolge für die Benutzereingabe ein (oder keine).
Dieses Feld wird anhand des regulären Ausdrucks validiert, der im Feld Eingabevalidierungsregel angegeben ist.
Der hier eingegebene Wert wird standardmäßig im Popup Manuelle Eingabe angezeigt.
Dieses Feld wird nur angezeigt, wenn String als Eingabetyp ausgewählt ist.
Eingabevalidierungsregel Geben Sie einen regulären Ausdruck ein, um die Zeichenfolge der Benutzereingabe zu validieren.
Globale reguläre Ausdrücke werden unterstützt.
Dieses Feld wird nur angezeigt, wenn String als Eingabetyp ausgewählt ist.
Bestätigung aktivieren Aktivieren Sie das Kontrollkästchen, um vor der Ausführung des Skripts eine Bestätigungsnachricht anzuzeigen. Diese Funktion kann besonders bei potenziell gefährlichen Vorgängen (wie einem Neustartskript) oder bei Vorgängen nützlich sein, die lange dauern können.
Bestätigungstext Geben Sie einen benutzerdefinierten Bestätigungstext für das Bestätigungs-Popup ein, das mit dem oben genannten Kontrollkästchen aktiviert wird (zum Beispiel Das entfernte System wird neu gestartet. Sind Sie sicher?). Um zu sehen, wie der Text aussieht, klicken Sie neben dem Feld auf Bestätigung testen.
Makros und benutzerdefinierte Benutzermakros werden unterstützt.
Hinweis: Die Makros werden beim Testen der Bestätigungsnachricht nicht erweitert.

Wenn sowohl manuelle Benutzereingabe als auch eine Bestätigungsnachricht konfiguriert sind, werden sie in aufeinanderfolgenden Popup-Fenstern angezeigt.

Manuelle Benutzereingabe

Die manuelle Benutzereingabe ermöglicht es, bei jeder Ausführung des Skripts einen benutzerdefinierten Parameter anzugeben. Dadurch entfällt die Notwendigkeit, mehrere ähnliche Benutzerskripte zu erstellen, die sich nur in einem einzelnen Parameter unterscheiden.

Beispielsweise möchten Sie dem Skript während der Ausführung möglicherweise eine andere Ganzzahl oder eine andere URL-Adresse übergeben.

So aktivieren Sie die manuelle Benutzereingabe:

  • verwenden Sie das Makro {MANUALINPUT} im Skript (Befehle, Skript, Skriptparameter), wo erforderlich; oder im URL-Feld von URL-Skripten;
  • aktivieren Sie in der erweiterten Skriptkonfiguration die manuelle Benutzereingabe und konfigurieren Sie die Eingabeoptionen.

Wenn die Benutzereingabe aktiviert ist, wird dem Benutzer vor der Ausführung des Skripts ein Popup Manuelle Eingabe angezeigt, in dem er aufgefordert wird, einen benutzerdefinierten Wert anzugeben. Der angegebene Wert ersetzt {MANUALINPUT} im Skript.

Abhängig von der Konfiguration wird der Benutzer aufgefordert, einen Zeichenfolgenwert einzugeben:

Oder einen Wert aus einer Dropdown-Liste mit vordefinierten Optionen auszuwählen:

Die manuelle Benutzereingabe ist nur für Skripte verfügbar, deren Geltungsbereich „Manuelle Host-Aktion“ oder „Manuelle Ereignisaktion“ ist.

Skriptausführung und Ergebnis

Von Zabbix Server ausgeführte Skripte werden in der auf der Seite zur Befehlsausführung beschriebenen Reihenfolge ausgeführt.

Das Skriptergebnis wird in einem Popup-Fenster angezeigt, das nach der Ausführung des Skripts erscheint. Der Rückgabewert des Skripts ist eine Standardausgabe:

  • Wenn das Skript erfolgreich beendet wird (Exit-Code 0), ist der Rückgabewert auf 16 MB begrenzt (einschließlich nachfolgender Leerzeichen, die abgeschnitten werden).
  • Wenn das Skript mit einem Fehler beendet wird (Exit-Code ungleich null), ist der Rückgabewert eine Standardfehlerausgabe, die auf 2 KB begrenzt ist.

Zabbix speichert die erweiterte Skriptausgabe standardmäßig nicht. Um vollständige Ausgabedetails zu erhalten, können Sie die Protokollierung direkt im Skript implementieren (z. B. die Ausgabe in eine lokale Protokolldatei umleiten).

Beachten Sie, dass für Skripte, die entweder auf dem Zabbix Server oder auf dem Zabbix Proxy ausgeführt werden, auch Datenbanklimits gelten.

Nachfolgend sehen Sie ein Beispiel für ein Skript und das Ergebnisfenster:

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

Das Skriptergebnis zeigt das Skript selbst nicht an.

Script-Timeout auf Zabbix Agent

Es kann vorkommen, dass beim Ausführen eines Skripts ein Timeout auftritt.

Unten sehen Sie ein Beispiel für ein auf Zabbix Agent ausgeführtes Skript und das Ergebnisfenster:

sleep 5
df -h

Die Fehlermeldung lautet in diesem Fall wie folgt:

Timeout while executing a shell script.

Um solche Situationen zu vermeiden, wird empfohlen, das Skript selbst zu optimieren (im obigen Beispiel "5") statt den Parameter Timeout in der Zabbix agent configuration und der Zabbix server configuration anzupassen.

Falls der Parameter Timeout in der Zabbix agent configuration geändert wurde, wird die folgende Fehlermeldung angezeigt:

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

Das bedeutet, dass die Änderung in der Zabbix agent configuration vorgenommen wurde, der Parameter Timeout jedoch auch in der Zabbix server configuration angepasst werden muss.

Skript-Timeout auf aktiven Agents

Es ist möglich, Skripte nur auf Agents auszuführen, die im aktiven Modus betrieben werden (seit Zabbix 7.0). Sobald die Skriptausführung durch eine Aktions-Operation oder eine manuelle Skriptausführung ausgelöst wird, wird der Befehl in die Konfiguration der aktiven Prüfungen aufgenommen und ausgeführt, sobald der aktive Agent ihn empfängt.

Manuelle Skripte werden zusammen mit dem Server-/Proxy-Timeout für die Skriptausführung an den aktiven Agent gesendet. Bitte erhöhen Sie das standardmäßige Server/Proxy-Timeout für die Skriptausführung. Das Timeout muss höher sein als die Aktualisierungsfrequenz der aktiven Prüfung, andernfalls wird das Timeout überschritten, bevor der aktive Agent das Skript empfängt und das Ergebnis zurückgeben kann.

Skript-Timeout auf Zabbix Server/Proxy

Siehe unten ein Beispiel für ein auf dem Zabbix Server ausgeführtes Skript und das Ergebnisfenster:

sleep 11
df -h

Es wird außerdem empfohlen, das Skript selbst zu optimieren, anstatt den Parameter TrapperTimeout auf einen entsprechenden Wert anzupassen (in unserem Fall > 11), indem die Zabbix Server-Konfiguration geändert wird.