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.

Daher sind Remote-Befehle ein leistungsfähiger Mechanismus für eine intelligente proaktive Überwachung.

Zu den naheliegendsten Einsatzmöglichkeiten dieser Funktion gehören:

  • 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 nicht auf Anfragen antwortet
  • Automatisch Speicherplatz freigeben (ältere Dateien entfernen, /tmp bereinigen), 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-, Speicher- 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 ausführt, anstatt eine Nachricht zu senden.

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 den 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 Prü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>,*] hinzu, wobei * entweder dem Ausführungsmodus (wait oder nowait) entspricht.
  • Für Remote-Befehle, die vom Zabbix Proxy ausgeführt werden, setzen Sie den Parameter EnableRemoteCommands in der Proxy-Konfiguration auf 1. 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[*] nur, wenn dies erforderlich ist, da dadurch die Ausführung beliebiger Befehle auf dem Host ermöglicht wird. Aus Sicherheitsgründen wird empfohlen, nur exakte 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 der Auflösung aller Makros hängt vom Datenbanktyp und vom Zeichensatz ab (Nicht-ASCII-Zeichen benötigen mehr als ein Byte für die Speicherung):

Datenbank Limit in Zeichen Limit in Bytes
MySQL 65535 65535
PostgreSQL 65535 nicht begrenzt
SQLite (nur Zabbix Proxy) 65535 nicht begrenzt

Die Ausgabe der Ausführung eines Remote-Befehls (Rückgabewert) ist auf 16 MB begrenzt (einschließlich nachfolgender 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

Diese Remote-Befehle, die auf dem Zabbix Agent (benutzerdefinierte Skripte) ausgeführt werden, müssen zunächst in der Agent-Konfiguration 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 der jeweilige Befehl im Modus nowait ausgeführt werden kann.
Starten Sie den Agent-Daemon neu, wenn Sie diesen Parameter ändern.

Wenn Sie anschließend eine neue Aktion unter Alerts > Actions > Trigger actions konfigurieren:

  1. Definieren Sie die entsprechenden Bedingungen, zum Beispiel, dass die Aktion bei beliebigen Problemen des Schweregrads „Katastrophe“ mit einer der Apache-Anwendungen aktiviert wird.

  1. Klicken Sie auf der Registerkarte Operations im Block Operations, Recovery operations oder Update operations auf Add.

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

Vordefinierte Skripte

Skripte, die für Aktionsoperationen (webhook, Skript, SSH, Telnet, IPMI) verfügbar sind, werden in globalen Skripten definiert, wobei Aktionsoperation als Geltungsbereich ausgewählt ist.

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 Berechtigungen zum Neustarten von Systemdiensten. Weiter unten finden Sie 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 - unabhängig davon, ob er aktiv oder passiv arbeitet - muss auf dem Remote-Host ausgeführt werden und führt die Befehle im Hintergrund aus.

Remote-Befehle auf dem Zabbix Agent werden mithilfe des Schlüssels system.run[,nowait] ohne Timeout ausgeführt und nicht auf Ausführungsergebnisse überprü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 überprüft. Weitere Informationen finden Sie unter Skript-Timeout.

Zugriffsberechtigungen

Stellen Sie sicher, dass der Benutzer „zabbix“ über Ausführungsberechtigungen für die konfigurierten Befehle verfügt. Möglicherweise möchten Sie sudo verwenden, um Zugriff auf privilegierte Befehle zu gewähren. Führen Sie zur Konfiguration des Zugriffs als Root aus:

visudo

Beispielzeilen, die in der Datei sudoers verwendet werden können:

# 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. Kommentieren Sie die Option requiretty in /etc/sudoers aus, um dies zu ändern.

Remote-Befehle mit mehreren Schnittstellen

Wenn das Zielsystem über mehrere Schnittstellen des ausgewählten Typs (Zabbix Agent oder IPMI) verfügt, werden Remote-Befehle über die Standardschnittstelle ausgeführt.

Remote-Befehle können über SSH und Telnet über eine andere Schnittstelle als die des Zabbix Agents ausgeführt werden. Die zu verwendende verfügbare Schnittstelle wird in der folgenden Reihenfolge ausgewählt:

  • Standardschnittstelle des Zabbix Agents
  • SNMP-Standardschnittstelle
  • JMX-Standardschnittstelle
  • IPMI-Standardschnittstelle

IPMI-Remote-Befehle

Für IPMI-Remote-Befehle 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
Geltungsbereich 'Aktionsvorgang'
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