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 zuerst im Agent konfiguriert aktiviert werden.
Stellen Sie sicher, dass der Parameter AllowKey=system.run[<command>,*] für jeden zulässigen Befehl in der Agent-Konfiguration hinzugefügt wird, damit ein bestimmter Befehl im nowait-Modus erlaubt ist. Starten Sie den Agent-Daemon neu, wenn Sie diesen Parameter ändern.
Wenn Sie dann eine neue Aktion unter Alerts → Actions → Trigger actions konfigurieren:
- Definieren Sie die entsprechenden Bedingungen, zum Beispiel, legen Sie fest, dass die Aktion bei beliebigen Disaster-Problemen mit einer der Apache-Anwendungen ausgelöst wird.

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

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

Vordefinierte Skripte
Skripte, die für Aktionsoperationen verfügbar sind (webhook, Skript, SSH, Telnet, IPMI), sind in 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 auf die Schaltfläche Zabbix agent neben Ausführen auf).
Beachten Sie die Verwendung von sudo - der Zabbix-Benutzer hat standardmäßig keine Berechtigungen, Systemdienste neu zu starten. Hinweise zur Konfiguration von sudo finden Sie 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 ausgeführt werden und führt die Befehle im Hintergrund aus.
Remote-Befehle auf dem Zabbix Agent werden ohne Timeout durch den 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 bzw. zabbix_proxy.conf festgelegt ist, und auf Ausführungsergebnisse geprüft. Weitere Informationen finden Sie unter Skript-Timeout.
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 |