Remote-Befehle
Übersicht
Mit Remote-Befehlen können Sie festlegen, dass ein bestimmter vordefinierter Befehl bei einer bestimmten Bedingung automatisch auf dem überwachten Host ausgeführt wird.
Daher sind Remote-Befehle ein leistungsfähiger Mechanismus für eine intelligente proaktive Überwachung.
Bei den naheliegendsten Anwendungsfällen können Sie beispielsweise:
- eine Anwendung (Webserver, Middleware, CRM) automatisch neu starten, wenn sie nicht reagiert
- den IPMI-Befehl „reboot“ verwenden, um einen entfernten Server neu zu starten, wenn dieser keine Anfragen beantwortet
- automatisch Speicherplatz freigeben (ältere Dateien entfernen,
/tmpbereinigen), wenn der Speicherplatz knapp wird - eine VM abhängig von der CPU-Auslastung von einem physischen Rechner auf einen anderen migrieren
- bei unzureichenden CPU-, Festplatten-, Arbeitsspeicher- oder sonstigen Ressourcen neue Knoten zu einer Cloud-Umgebung hinzufügen
Das Konfigurieren einer Aktion für Remote-Befehle ähnelt dem Konfigurieren einer Aktion zum Senden einer Nachricht. Der einzige Unterschied besteht darin, dass Zabbix einen Befehl anstelle einer Nachricht ausführt.
Remote-Befehle können vom Zabbix Server, Zabbix Proxy oder Zabbix Agent ausgeführt werden. Beachten Sie Folgendes:
- Remote-Befehle auf dem Zabbix Agent können direkt vom Zabbix Server oder über einen Zabbix Proxy ausgeführt werden.
- Remote-Befehle, die vom Zabbix Server ausgeführt werden, werden wie unter Befehlsausführung beschrieben ausgeführt, einschließlich der Überprüfung des Exit-Codes.
- Remote-Befehle werden auch dann ausgeführt, wenn sich der Ziel-Host im Wartungsmodus befindet.
Remote-Befehle sind sowohl auf dem Zabbix Agent als auch auf dem Zabbix Proxy standardmäßig deaktiviert. Sie können wie folgt aktiviert werden:
- Für Remote-Befehle, die vom Zabbix Agent ausgeführt werden, fügen Sie in der Agent-Konfiguration für jeden zulässigen Befehl einen Parameter
AllowKey=system.run[<command>,*]oderAllowKeyRegexp=^system\.run\[<command>,.*\]$hinzu, wobei*entweder den Ausführungsmodus (waitodernowait) bezeichnet. - Für Remote-Befehle, die vom Zabbix Proxy ausgeführt werden, setzen Sie den Parameter
EnableRemoteCommandsin der Proxy-Konfiguration auf1. Beachten Sie, dass Remote-Befehle auf dem Zabbix Proxy nicht aktiviert werden müssen, wenn sie vom Zabbix Agent auf einem vom Proxy überwachten Host ausgeführt werden.
Verwenden Sie AllowKey=system.run[*] oder AllowKeyRegexp=^system\.run\[.*\]$ nur, wenn dies erforderlich ist, da dadurch die Ausführung beliebiger Befehle auf dem Host ermöglicht wird.
Aus Sicherheitsgründen wird empfohlen, nur exakt festgelegte Befehle zuzulassen. system.run[*] ist standardmäßig abgelehnt (DenyKey=system.run[*]).
Siehe auch Agent-Prüfungen einschränken.
Limit für Remote-Befehle
Das Limit für Remote-Befehle nach dem Auflösen aller Makros hängt vom Typ der Datenbank und vom Zeichensatz ab (Nicht-ASCII-Zeichen benötigen mehr als ein Byte zur Speicherung):
| Datenbank | Limit in Zeichen | Limit in Byte |
|---|---|---|
| MySQL | 65535 | 65535 |
| PostgreSQL | 65535 | nicht begrenzt |
| SQLite (nur Zabbix Proxy) | 65535 | nicht begrenzt |
Die Ausgabe der Ausführung von Remote-Befehlen (Rückgabewert) ist auf 16 MB begrenzt (einschließlich nachgestellter Leerzeichen, die abgeschnitten werden). Das Limit für IPMI-Remote-Befehle basiert auf der installierten IPMI-Bibliothek. Beachten Sie, dass Datenbanklimits für alle Remote-Befehle gelten.
Konfiguration
Remote-Befehle, die vom Zabbix Agent ausgeführt werden, müssen zunächst in der Agent-Konfiguration mithilfe des Parameters AllowKey oder AllowKeyRegexp erlaubt werden.
Stellen Sie sicher, dass der Parameter AllowKey=system.run[<command>,*] oder AllowKeyRegexp=^system\.run\[<command>,.*\]$ für jeden erlaubten Befehl zur Agent-Konfiguration hinzugefügt wird, damit dessen Ausführung im nowait-Modus möglich ist.
Starten Sie den Agent-Daemon nach der Änderung des Parameters neu.
Wenn Sie anschließend unter Alerts > Actions > Trigger actions eine neue Aktion konfigurieren:
- Legen Sie die entsprechenden Bedingungen fest, zum Beispiel, dass die Aktion bei beliebigen Problemen mit dem Schweregrad „Disaster“ in einer der Apache-Anwendungen aktiviert wird.

- Klicken Sie auf der Registerkarte Operations im Abschnitt Operations, Recovery operations oder Update operations auf Add.

- Wählen Sie einen der vordefinierten Skripte aus der Dropdown-Liste Operation aus und legen Sie die Target list für das Skript fest.

Vorgegebene Skripte
Skripte, die für Aktionsoperationen (webhook, Skript, SSH, Telnet, IPMI) verfügbar sind, werden in globalen Skripten mit der ausgewählten Geltung Action operation definiert.
Zum Beispiel:
sudo /etc/init.d/apache restart
In diesem Fall versucht Zabbix, einen Apache-Prozess neu zu starten. Stellen Sie bei diesem Befehl sicher, dass der Befehl auf dem Zabbix Agent ausgeführt wird (klicken Sie auf die Schaltfläche Zabbix agent neben Execute on).
Beachten Sie die Verwendung von sudo - der Zabbix-Benutzer hat standardmäßig keine Berechtigungen, Systemdienste neu zu starten. Siehe unten für Hinweise zur Konfiguration von sudo.
Ab Zabbix Agent 7.0 können Remote-Befehle auch auf einem Agent ausgeführt werden, der im aktiven Modus arbeitet. Der Zabbix Agent - ob aktiv oder passiv - sollte auf dem entfernten Host ausgeführt werden und führt die Befehle im Hintergrund aus.
Remote-Befehle auf dem Zabbix Agent werden ohne Timeout mit dem Schlüssel system.run[,nowait] ausgeführt und nicht auf Ausführungsergebnisse geprüft.
Auf dem Zabbix Server und dem Zabbix Proxy werden Remote-Befehle mit dem Timeout ausgeführt, das im Parameter TrapperTimeout der Datei zabbix_server.conf oder zabbix_proxy.conf festgelegt ist, und auf Ausführungsergebnisse geprüft.
Weitere Informationen finden Sie unter Script timeout.
Zugriffsberechtigungen
Stellen Sie sicher, dass der Benutzer zabbix Ausführungsberechtigungen für die konfigurierten
Befehle hat. Möglicherweise möchten Sie sudo verwenden, um Zugriff auf
privilegierte Befehle zu gewähren. Um den Zugriff zu konfigurieren, führen Sie als root aus:
visudo
Beispielzeilen, die in der Datei sudoers verwendet werden könnten:
# erlaubt dem Benutzer 'zabbix', alle Befehle ohne Passwort auszuführen.
zabbix ALL=NOPASSWD: ALL
# erlaubt dem Benutzer 'zabbix', apache ohne Passwort neu zu starten.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
Auf einigen Systemen verhindert die Datei sudoers, dass nicht-lokale
Benutzer Befehle ausführen. Um dies zu ändern, kommentieren Sie die Option
requiretty in /etc/sudoers aus.
Remote-Befehle mit mehreren Schnittstellen
Wenn das Zielsystem mehrere Schnittstellen des ausgewählten Typs (Zabbix-Agent oder IPMI) hat, werden Remote-Befehle auf der Standard- Schnittstelle ausgeführt.
Es ist möglich, Remote-Befehle über SSH und Telnet unter Verwendung einer anderen Schnittstelle als der des Zabbix-Agenten auszuführen. Die verfügbare zu verwendende Schnittstelle wird in der folgenden Reihenfolge ausgewählt:
- Zabbix-Agent-Standard-Schnittstelle
- SNMP-Standard-Schnittstelle
- JMX-Standard-Schnittstelle
- IPMI-Standard-Schnittstelle
IPMI-Fernbefehle
Für IPMI-Fernbefehle sollte die folgende Syntax verwendet werden:
<command> [<value>]
wobei
- <command> - einer der IPMI-Befehle ohne Leerzeichen
- <value> - 'on', 'off' oder eine beliebige vorzeichenlose Ganzzahl. <value> ist ein optionaler Parameter.
Beispiele
Beispiele für globale Skripte, die als Remote-Befehle in Aktionsoperationen verwendet werden können.
Beispiel 1
Neustart von Windows unter bestimmten Bedingungen.
Um Windows bei einem von Zabbix erkannten Problem automatisch neu zu starten, definieren Sie das folgende Skript:
| Script parameter | Value |
|---|---|
| Scope | 'Action operation' |
| Type | 'Script' |
| Command | c:\windows\system32\shutdown.exe -r -f |
Beispiel 2
Starten Sie den Host mithilfe der IPMI-Steuerung neu.
| Skriptparameter | Wert |
|---|---|
| Geltungsbereich | 'Aktionsoperation' |
| Typ | 'IPMI' |
| Befehl | reset |
Beispiel 3
Schalten Sie den Host aus, indem Sie die IPMI-Steuerung verwenden.
| Skriptparameter | Wert |
|---|---|
| Bereich | 'Aktionsoperation' |
| Typ | 'IPMI' |
| Befehl | power off |