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:

  1. 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.

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

  1. 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