Mod-Gearman¶
Mod-Gearman ermöglicht es openITCOCKPIT, Überwachungsaufgaben auf mehrere Worker-Prozesse oder Server mithilfe des Gearman-Jobservers zu verteilen. Das bedeutet, dass anstelle aller Überwachungsprüfungen auf einem einzelnen openITCOCKPIT-Server ausgeführt zu werden, die Arbeitslast auf mehrere Server verteilt werden kann, was die Skalierbarkeit und Leistung verbessert.
Info
Alle openITCOCKPIT-Versionen > 4.7.1 werden standardmäßig mit Mod-Gearman ausgeliefert.
Dieses Dokument gilt für traditionelle Installationen von openITCOCKPIT. Wenn Sie eine Docker-/Container-basierte Konfiguration verwenden, lesen Sie bitte diese Dokumentation.
Unterschied zwischen Mod-Gearman und verteiltem Monitoring¶
Das Distributed Monitoring Module von openITCOCKPIT ermöglicht die Einrichtung eigenständiger Überwachungsserver, die als "Satellitensysteme" bezeichnet werden. openITCOCKPIT-Satellitensysteme bieten eine Weboberfläche und sind die beste Lösung zur Überwachung entfernter Standorte oder mehrerer Rechenzentren.
Satellitensysteme von openITCOCKPIT können in begrenztem Umfang auch zur Lastverteilung genutzt werden.
Mod-Gearman hingegen verteilt die Prüfausführung auf mehrere Worker und fungiert als Load-Balancer. Bei Bedarf können weitere Mod-Gearman-Worker gestartet werden, um eine größere Last zu bewältigen.
Sowohl openITCOCKPIT als auch openITCOCKPIT-Satellitensysteme sind mit Mod-Gearman ausgestattet.
Mod-Gearman-Worker¶
Die Ausführung von Überwachungs-Plugins kann viel CPU-Leistung verbrauchen. Plugins, die in Python oder Perl geschrieben sind, sind zwar einfach zu warten, benötigen aber viel mehr Ressourcen zur Ausführung als Plugins, die in Go oder C geschrieben sind.
Wenn Sie einige Ressourcen auf Ihrem openITCOCKPIT-Server freigeben möchten, können Sie einen neuen Server einrichten, der nur als Mod-Gearman-Worker fungiert. Das Worker-System wird eine Verbindung zum openITCOCKPIT-Server herstellen und die Ausführung von Host- und Serviceprüfungen übernehmen. Wenn mehrere Mod-Gearman-Worker verbunden sind, wird die Last auf alle Worker verteilt.
Benachrichtigungen und Ereignisskripte werden immer auf dem openITCOCKPIT-Server ausgeführt.
Lokaler Worker¶
Standardmäßig verfügt openITCOCKPIT über einen lokalen Mod-Gearman-Worker. Dieser Dienst kann über Systemd gesteuert werden.
systemctl status mod-gearman-worker.service
Dieser Dienst wird durch das Paket openitcockpit-mod-gearman-worker-go-local
bereitgestellt und kann entfernt werden. Durch Deinstallieren des Pakets openitcockpit-mod-gearman-worker-go-local
oder durch Anhalten des mod-gearman-worker.service
wird der openITCOCKPIT-Server keine Host- und Servicetprüfungen mehr ausführen.
Warning
Bitte stellen Sie sicher, dass externe Mod-Gearman-Worker im Voraus eingerichtet sind!
Umgehen von Mod-Gearman¶
Um Mod-Gearman für einen gesamten Host zu umgehen, können Sie das benutzerdefinierte Makro WORKER
mit dem Wert local
setzen.
Sie können das Makro auch für einen bestimmten Dienst definieren, um nur diesen Dienst auszuschließen.
Eingebettetes Perl¶
Eingebettetes Perl (Embedded Perl) kann die Ausführung von Perl-Plugins erheblich beschleunigen und auch den benötigte CPU-Leistung verringern.
Ein gutes Beispiel ist das beliebte Plugin check_nwc_health
. Glücklicherweise ist dieses Plugin von Anfang an mit eingebettetem Perl kompatibel.
Dieses Diagramm zeigt die Auswirkungen auf die Ressourcennutzung, die Embedded Perl haben kann. Ohne eingebettetes Perl verbrauchte das System durchschnittlich 38% der CPU, und allein durch die Aktivierung von Embedded Perl konnte die CPU-Auslastung auf 20 % reduziert werden.
Noch beeindruckender ist die Reduzierung der Plugin-Ausführungszeit von durchschnittlich 450ms auf 140ms.
Ein- und Ausschließen von eingebettetem Perl pro Plugin¶
Nicht alle Überwachungs-Plugins sind mit eingebettetem Perl kompatibel. Wenn Sie Ihr Plugin aktualisieren möchten, um es kompatibel zu machen, können Sie diesen Richtlinien folgen.
Um Mod-Gearman anzuweisen, den eingebetteten Perl-Interpreter für ein bestimmtes Plugin zu verwenden, fügen Sie diese Zeile in die ersten 10 Zeilen des Perl-Skripts ein:
# nagios: +epn
Um Mod-Gearman anzuweisen, den eingebetteten Perl-Interpreter nicht für ein bestimmtes Plugin zu verwenden, fügen Sie diese Zeile in die ersten 10 Zeilen des Perl-Skripts ein:
# nagios: -epn
Durch Setzen von use_embedded_perl_implicitly=1
in der Datei mod_gearman/worker.cfg
werden alle Perl-Plugins über eingebettetes Perl ausgeführt.
Einschränkungen¶
Kommandos, die eines dieser Sonderzeichen enthalten
!$^&*()~[]\|{};<>?`
Beispiel:
/check_files.pl --filename=*.txt # Dies wird nicht über eingebettetes Perl ausgeführt
/check_files.pl --filename='*.txt' # Einfache Anführungszeichen - wird eingebettetes Perl verwenden
Deaktivieren von Mod-Gearman¶
openITCOCKPIT-Versionen 4.8.0 und höher haben Mod-Gearman standardmäßig aktiviert. Mod-Gearman kann deaktiviert werden, wenn Sie das alte Verhalten wiederherstellen möchten, bei dem alle Plugins direkt von der Überwachungs-Engine ausgeführt werden.
Um dies zu tun, navigieren Sie zu System -> Konfigurationsdatei Editor
und bearbeiten Sie die Datei /opt/openitc/nagios/etc/nagios.cfg
.
Deaktivieren Sie die Option enable_mod_gearman
und klicken Sie auf Speichern.
Einrichten eines Mod-Gearman-Workers¶
Wie bereits erwähnt, ist das Hauptziel von Mod-Gearman, die Arbeitslast auf mehrere Server zu verteilen. openITCOCKPIT stellt vorgefertigte Pakete des Mod-Gearman-Workers für Debian, Ubuntu und RHEL bereit.
Freigabe des Gearman-Job-Servers¶
Zunächst müssen Sie den Gearman-Job-Server
für Ihr Netzwerk freigeben. Öffnen Sie die Datei /etc/default/gearman-job-server
und ändern Sie den Parameter --listen=localhost
auf --listen=0.0.0.0
.
Um die Änderungen zu übernehmen, starten Sie den Dienst neu: systemctl restart gearman-job-server.service
Sie können netstat
verwenden, um zu überprüfen, ob der Gearman-Job-Server jetzt auf allen IP-Adressen lauscht:
[Ubuntu]root@openitcockpit~# netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:4730 0.0.0.0:* LISTEN 112 657506310 677284/gearmand
Die Kommunikation von Mod-Gearman ist mit einem gemeinsamen geheimen Schlüssel verschlüsselt. Sie finden den zufälligen generierten Schlüssel auf Ihrem openITCOCKPIT-Server in der Datei /opt/openitc/etc/mod_gearman/secret.file
.
Installation des Mod-Gearman-Workers¶
Wir empfehlen, mit einer leeren VM der neuesten Ubuntu LTS-Version zu beginnen.
-
Repository laden.
Stellen Sie sicher, dass Sie das openITCOCKPIT-Repository auf Ihrem System aktiviert haben.
-
Abhängigkeiten installieren
apt-get install openitcockpit-mod-gearman-worker-go
Warning
Verwenden Sie NICHT das Paket
openitcockpit-mod-gearman-worker-go-local
!Alle Überprüfungs-Plugins befinden sich unter
/opt/openitc/nagios/libexec
. Sie können beliebige benutzerdefinierte Plugins zu diesem (oder einem anderen) Ort hinzufügen. -
Verbindung des Workers mit dem openITCOCKPIT-Server herstellen
Öffnen Sie die Datei
/etc/openitcockpit-mod-gearman/worker.cfg
und setzen Sie den Hostnamen oder die IP-Adresse Ihres openITCOCKPIT-Servers.server=openitcockpit.example.org:4730 # Stellen Sie auch sicher, dass die Verschlüsselungsparameter identisch sind # Der Schlüssel befindet sich in der Datei /opt/openitc/etc/mod_gearman/secret.file auf Ihrem openITCOCKPIT-Server encryption=yes key=870b2ba934d9992b30298cb98726825e
Um die Einstellungen zu übernehmen, starten Sie den Dienst neu:
systemctl restart mod-gearman-worker.service
Der Mod-Gearman-Worker ist jetzt bereit und wird sich mit Ihrem openITCOCKPIT-Server verbinden.
Das Protokoll des Mod-Gearman-Workers befindet sich unter
/opt/openitc/logs/mod_gearman/mod_gearman_worker.log
.
Überprüfen¶
Führen Sie den Befehl /opt/openitc/mod_gearman/bin/gearman_top
auf Ihrem openITCOCKPIT-Server aus, um zu überprüfen, ob sich der neue Mod-Gearman-Worker erfolgreich verbunden hat.
Verteilung der Prüfungen¶
Mod-Gearman verteilt die Ausführung der Prüfungen auf alle verfügbaren Worker. Das bedeutet, dass Prüfungen eines Dienstes von einem Host von verschiedenen Mod-Gearman-Workern ausgeführt werden können. Dieses Beispiel demonstriert das Verhalten mit einem Checkplugins, welches den Hostnamen des Mod-Gearman-Workers ausgibt, von dem es ausgeführt wurde.
Wie Sie sehen können, ist es völlig zufällig, welcher Mod-Gearman-Worker welche Überprüfung ausführt, auch wenn die Services demselben Host zugewiesen sind.
Es gibt Situationen, in denen es wichtig ist zu kontrollieren, welche Prüfungen von welchem Mod-Gearman-Worker ausgeführt werden. Sie können dies tun, indem Sie das WORKER
-benutzerdefinierte Makro für einen bestimmten Host, Service, Hostvorlage oder Servicevorlage definieren.
Durch Festlegen von WORKER=local
werden die Prüfungen immer von der Überwachungs-Engine auf dem openITCOCKPIT-Server selbst ausgeführt und umgehen Mod-Gearman vollständig.
Prüfungen auf einem bestimmten Worker ausführen¶
Das benutzerdefinierte Makro WORKER
kann auch verwendet werden, um Prüfungen an einen bestimmten Worker oder eine Gruppe von Workern zu binden.
In diesem Beispiel werden alle Prüfungen des Hosts Worker Test
(im obigen Screenshot gezeigt) an einen bestimmten Worker in Fulda
(einer Stadt in Deutschland) gebunden.
Anpassung der worker.cfg¶
Zunächst müssen Sie eine Liste von hostgroup-Schlüsselwörtern in der Datei /etc/openitcockpit-mod-gearman/worker.cfg
definieren, um festzulegen, welche Prüfungen von diesem Worker ausgeführt werden sollen.
Info
Diese Liste von hostgroups hat nichts mit den Hostgruppen zu tun, die Sie in der openITCOCKPIT-Benutzeroberfläche definieren!
# Legt eine Liste von Hostgruppen fest, für die dieser Worker arbeiten soll.
# Geben Sie entweder eine durch Kommas getrennte Liste an oder verwenden Sie
# mehrere Zeilen.
hostgroups=Fulda
Sie können mehrere hostgroup-Schlüsselwörter durch Verwendung einer durch Kommas getrennten Liste definieren
hostgroups=Fulda,Frankfurt,Berlin
Starten Sie den Worker neu, um die Änderungen zu übernehmen
systemctl restart mod-gearman-worker.service
Konfiguration des Hosts / Services bearbeiten¶
Nachdem Sie die hostgroup-Schlüsselwörter in der Worker-Konfiguration hinterlegt haben, können Sie den Befehl
/opt/openitc/mod_gearman/bin/gearman_top
auf Ihrem openITCOCKPIT-Server ausführen, um zu überprüfen, ob separate Warteschlangen für jedes Schlüsselwort aufgetaucht sind.
Um Prüfungen an einen Worker zu binden, müssen Sie das WORKER
-benutzerdefinierte Makro für einen Host, einen Service, eine Hostvorlage oder eine Servicevorlage definieren.
Definieren Sie das Makro WORKER
mit dem Wert hostgroup_Fulda
Note
Es ist wichtig, dass der Wert des benutzerdefinierten Makros mit hostgroup_
vorangestellt ist.
Um die Änderungen zu übernehmen, aktualisieren Sie die Überwachungskonfiguration.
Alle Prüfungen mit WORKER=hostgroup_Fulda
werden jetzt von dem definierten Worker behandelt
Was sind die worker_
Warteschlangen?¶
Diese Warteschlangen werden von Mod-Gearman für interne Statusnachrichten verwendet. Bitte ignorieren Sie diese.
Troubleshooting¶
Operation nicht erlaubt¶
Wenn Sie eine Fehlermeldung wie check_icmp: Failed to obtain ICMP socket: Operation not permitted
erhalten, müssen Sie die folgenden Dateiberechtigungen setzen:
chown root:root /opt/openitc/nagios/libexec/check_icmp
chown root:root /opt/openitc/nagios/libexec/check_dhcp
chmod u+s /opt/openitc/nagios/libexec/check_icmp
chmod u+s /opt/openitc/nagios/libexec/check_dhcp
Zu viele offene Dateien¶
Wenn Ihr Gearman-Job-Server nicht reagiert oder Fehlermeldungen wie ERROR 2015-04-14 22:02:54.000000 [ main ] accept(Too many open files) -> libgearman-server/gearmand.cc:788
auftreten, haben Sie das Limit der offenen Dateien erreicht.
Dies passiert, wenn einige tausend Worker versuchen, sich mit einem Gearman-Job-Server zu verbinden.
Sie können dieses Problem beheben, indem Sie das Limit der offenen Dateien für den Gearman-Job-Server erhöhen.
Bearbeiten Sie den Systemd-Dienst systemctl edit --full gearman-job-server.service
und fügen Sie die folgende Zeile in den Abschnitt [Service]
ein:
LimitNOFILE=16384
Um die Änderungen zu übernehmen, müssen Sie den Gearman-Job-Server neu starten
systemctl restart gearman-job-server.service naemon.service statusengine.service
Sie können jetzt einige tausend Worker mit Ihrem System verbinden
Verwaiste Prüfungen¶
Wenn Sie eine Reihe von Fehlermeldungen wie diese erhalten:
(service check orphaned, is the mod-gearman worker on queue 'service' running?)
systemctl restart mod-gearman-worker.service
Temporäre Dateien¶
Einige Monitoring-Plugins erstellen temporäre Dateien auf der Festplatte, um Counter-Werte mit den Werten der letzten Ausführung zu vergleichen. Ein bekanntes Plugin ist das check_new_health
Plugin, dieses erstellt, sofern nicht anders angegeben, temporäre Dateien unter /var/tmp/check_nwc_health
.
Das check_diskstats
Plugin verwendet den Ordner /var/tmp/nagios
.
Sollten Sie Plugins verwenden, welche temporäre Dateien erstellen und benötigen um korrekte Werte liefern zu können, müssen Sie dafür sorgen, das alle Worker über die gleichen temporären Dateien verfügen. Dies können Sie in der Regel am einfachsten mit einem NFS-Share erreichen, welches auf allen Mod-Gearman Workern eingebunden wird.