2 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.
Dadurch sind Remote-Befehle ein leistungsstarker Mechanismus für eine intelligente, proaktive Überwachung.
In den naheliegendsten Anwendungsfällen können Sie beispielsweise Folgendes versuchen:
- 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 er auf Anfragen nicht antwortet
- Automatisch Speicherplatz freigeben (ältere Dateien entfernen, /tmp bereinigen), wenn der Festplattenspeicher knapp wird
- Eine VM abhängig von der CPU-Auslastung von einem physischen System auf ein anderes migrieren
- Neue Knoten zu einer Cloud-Umgebung hinzufügen, wenn CPU-, Festplatten-, Arbeitsspeicher- oder andere Ressourcen nicht ausreichen
Die Konfiguration einer Aktion für Remote-Befehle ist ähnlich wie die für das Senden einer Nachricht; der einzige Unterschied besteht darin, dass Zabbix einen Befehl ausführt, anstatt eine Nachricht zu senden.
Remote-Befehle können durch Zabbix Server, Proxy oder Agent ausgeführt werden. Remote- Befehle auf dem Zabbix Agent können direkt durch Zabbix Server oder über Zabbix Proxy ausgeführt werden. Sowohl auf dem Zabbix Agent als auch auf dem Zabbix Proxy sind Remote-Befehle standardmäßig deaktiviert. Sie können aktiviert werden durch:
- Hinzufügen des Parameters
AllowKey=system.run[*]in der Agent-Konfiguration; - Setzen des Parameters EnableRemoteCommands auf „1“ in der Proxy- Konfiguration.
Von Zabbix Server ausgeführte Remote-Befehle werden wie unter Command execution beschrieben ausgeführt, einschließlich der Prüfung des Exit-Codes.
Remote-Befehle werden auch dann ausgeführt, wenn sich der Ziel-Host in Wartung befindet.
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
Die Remote-Befehle, die auf dem Zabbix Agent ausgeführt werden (benutzerdefinierte Skripte), müssen zunächst in der Konfiguration des Agent aktiviert werden.
Stellen Sie sicher, dass der Parameter AllowKey=system.run[<command>,\*] für jeden erlaubten Befehl in der Agent-Konfiguration hinzugefügt wird, um einen bestimmten Befehl im nowait-Modus zuzulassen. Starten Sie den Agent-Daemon neu, wenn Sie diesen Parameter ändern.
Gehen Sie dann beim Konfigurieren einer neuen Aktion unter Benachrichtigungen → Aktionen → Auslöser-Aktionen wie folgt vor:
- Definieren Sie die entsprechenden Bedingungen, zum Beispiel, dass die Aktion bei allen Katastrophenproblemen einer der Apache-Anwendungen aktiviert wird.

- Klicken Sie auf der Registerkarte Operationen im Block Operationen, Wiederherstellungsoperationen oder Aktualisierungsoperationen auf Hinzufügen.

- Wählen Sie in der Dropdown-Liste Operation eines der vordefinierten Skripte aus und legen Sie die Zielliste für das Skript fest.

Vordefinierte Skripte
Skripte, die für Aktionsoperationen (webhook, Skript, SSH, Telnet, IPMI) verfügbar sind, werden in den globalen Skripten 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 bei Ausführen auf auf die Schaltfläche Zabbix agent).
Beachten Sie die Verwendung von sudo – der Zabbix-Benutzer verfügt standardmäßig nicht über die Berechtigung, Systemdienste neu zu starten. Hinweise zur Konfiguration von sudo finden Sie weiter unten.
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 Remote-Host laufen und führt die Befehle im Hintergrund aus.
Remote-Befehle auf dem Zabbix Agent werden ohne Zeitüberschreitung über den Schlüssel system.run[,nowait] ausgeführt und ihre Ausführungsergebnisse werden nicht geprüft.
Auf Zabbix Server und Zabbix Proxy werden Remote-Befehle mit der Zeitüberschreitung ausgeführt, die im Parameter TrapperTimeout der Datei zabbix_server.conf bzw. zabbix_proxy.conf festgelegt ist, und ihre Ausführungsergebnisse werden geprüft.
Weitere Informationen finden Sie unter Skript-Zeitüberschreitung.
Zugriffsberechtigungen
Stellen Sie sicher, dass der Benutzer 'zabbix' Ausführungsberechtigungen für die konfigurierten Befehle hat. Es kann sinnvoll sein, sudo zu verwenden, um Zugriff auf privilegierte Befehle zu gewähren. Um den Zugriff zu konfigurieren, führen Sie als root Folgendes 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 einer bestimmten Bedingung.
Um Windows bei einem von Zabbix erkannten Problem automatisch neu zu starten, definieren Sie das folgende Skript:
| Skriptparameter | Wert |
|---|---|
| Bereich | 'Aktionsoperation' |
| Typ | 'Skript' |
| Befehl | 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 |