Überwachen von Hosts und Diensten mit Icinga unter Ubuntu 16.04

Einführung

Icinga ist ein Open-Source-Überwachungssystem, mit dem der Zustand von vernetzten Hosts und Diensten überwacht wird. In diesem Tutorial verwenden wir Icinga, um zwei verschiedene Arten von Überwachungskonfigurationen einzurichten. Die erste basiert auf einfachen Netzwerkprüfungen der externen Dienste Ihres Hosts, z. B. einer regelmäßigen HTTP-Anfrage an Ihre Website. Bei der anderen Konfiguration wird ein Software-Agent verwendet, der auf dem Host ausgeführt wird, um detailliertere Systeminformationen wie die Auslastung und die Anzahl der ausgeführten Prozesse zu erfassen.

Voraussetzungen

Bevor Sie mit diesem Lernprogramm beginnen, sollten Sie das vorherige Lernprogramm in dieser Reihe, https://www.digitalocean.com/community/tutorials/how-to-install-icinga-and-icinga-web-on-ubuntu-16-, abgeschlossen haben. 04 [So installieren Sie Icinga und Icinga Web unter Ubuntu 16.04]. Auf diese Weise können Sie den Icinga-Core und die Icinga-Webschnittstelle auf einem einzigen Host ausführen, den wir durchgehend als * icinga-master * -Knoten bezeichnen.

Sie benötigen auch einige Server zur Überwachung. In unseren Beispielen werden zwei Ubuntu 16.04-Server mit installiertem Apache verwendet. Sie können nur den Apache-Teil von the LAMP verwenden Tutorial oben erwähnt, um diese einzurichten.

Schritt 1 - Einrichten von Simple Host Monitoring

Eine einfache Möglichkeit, einen Server mit Icinga zu überwachen, besteht darin, eine regelmäßige Überprüfung seiner extern verfügbaren Dienste einzurichten. Bei einem Webhost pingen wir daher regelmäßig die IP-Adresse des Servers und versuchen auch, auf eine Webseite zuzugreifen. Hier erfahren wir, ob der Host aktiv ist und ob der Webserver ordnungsgemäß funktioniert.

Richten wir die Überwachung für einen Webserver ein. Wählen Sie einen der als Voraussetzung genannten Apache-Server aus und stellen Sie sicher, dass die standardmäßige Apache-Platzhalterseite ordnungsgemäß bereitgestellt wird. Wir werden diesen Server "++" nennen. Es ist keine Anmeldung erforderlich, alle Integritätsprüfungen werden auf dem Masterknoten konfiguriert und ausgeführt.

Melden Sie sich am Master-Knoten an. Um einen neuen Host hinzuzufügen, müssen wir die Icinga-Datei + hosts.conf bearbeiten. Öffne es in einem Texteditor:

sudo nano /etc/icinga2/conf.d/hosts.conf

Dadurch wird eine Datei mit einigen erläuternden Kommentaren geöffnet und ein einzelner Hostblock definiert. Der vorhandene Konfigurationsblock + object Host NodeName + definiert den Host * icinga-master *, auf dem wir Icinga und Icinga Web installiert haben. Positionieren Sie den Cursor am Ende der Datei und fügen Sie einen neuen Host hinzu:

/etc/icinga2/conf.d/hosts.conf

. . .
object Host "" {
 import "generic-host"
 address = ""
 vars.http_vhosts["http"] = {
   http_uri = "/"
 }
 vars.notification["mail"] = {
   groups = [ "icingaadmins" ]
 }
}

Dies definiert einen Host mit dem Namen "+", importiert einige Standard-Host-Konfigurationen aus einer Vorlage mit dem Namen " generic-host ", verweist Icinga auf die richtige IP-Adresse und definiert dann einige Variablen, die Icinga anweisen, nach einer HTTP-Antwort zu suchen Geben Sie die Root-URL (" / ") ein und benachrichtigen Sie die Gruppe " icingaadmins +" per E-Mail, wenn Probleme auftreten.

Speichern und schließen Sie die Datei und starten Sie Icinga neu:

sudo systemctl restart icinga2

Wechseln Sie zurück zur Icinga-Weboberfläche in Ihrem Browser. Die Benutzeroberfläche aktualisiert sich relativ schnell von selbst, sodass Sie die Seite nicht aktualisieren müssen. Die neuen Host-Informationen sollten in kurzer Zeit ausgefüllt werden, und die Integritätsprüfungen ändern sich von * Ausstehend * zu * Ok *, sobald Icinga genügend Informationen gesammelt hat.

Dies ist eine großartige Möglichkeit, externe Dienste auf einem Host zu überwachen, und für SSH-Server, SMTP usw. stehen weitere Überprüfungen zur Verfügung. Es wäre aber auch schön, mehr Details über den internen Zustand der von uns überwachten Server zu erfahren.

Als Nächstes richten wir die Überwachung über einen Icinga-Agenten ein, damit wir detailliertere Systeminformationen im Auge behalten können.

Schritt 2 - Agentenbasierte Überwachung einrichten

Icinga bietet einen Mechanismus für die sichere Kommunikation zwischen einem Master- und einem Clientknoten, um umfangreichere Remote-Integritätsprüfungen durchzuführen. Anstatt nur zu wissen, dass unser Webserver erfolgreich Seiten bereitstellt, können wir auch die CPU-Auslastung, die Anzahl der Prozesse, den Speicherplatz usw. überwachen.

Wir werden einen zweiten Server für die Überwachung einrichten. Wir nennen es "++". Wir müssen die Icinga-Software auf dem Remote-Computer installieren, einige Setup-Assistenten ausführen, um die Verbindung herzustellen, und dann einige Konfigurationsdateien auf dem Icinga-Masterknoten aktualisieren.

Richten Sie den Master-Knoten ein

Zuerst müssen wir den Master-Knoten einrichten, um Client-Verbindungen herzustellen. Wir tun dies, indem wir den Knoten-Setup-Assistenten auf unserem Hauptknoten ausführen:

sudo icinga2 node wizard

Dies startet ein Skript, das uns ein paar Fragen stellt und die Dinge für uns vorbereitet. Im Folgenden drücken wir + ENTER +, um die meisten Standardeinstellungen zu akzeptieren. Nicht standardmäßige Antworten werden hervorgehoben. Einige Informationsausgaben wurden aus Gründen der Übersichtlichkeit entfernt:

OutputPlease specify if this is a satellite setup ('n' installs a master setup) [Y/n]:
Starting the Master setup routine...
Please specify the common name (CN) [icinga-master.example.com]:
Checking for existing certificates for common name 'icinga-master.example.com'...
Certificates not yet generated. Running 'api setup' now.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.
Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:
Done.

Now restart your Icinga 2 daemon to finish the installation!

Starten Sie Icinga neu, um die Aktualisierung der Konfiguration abzuschließen:

sudo systemctl restart icinga2

Öffnen Sie einen Firewall-Port, um externe Verbindungen zu Icinga zuzulassen:

sudo ufw allow 5665

Jetzt wechseln wir zum Client-Knoten, installieren Icinga und führen denselben Assistenten aus.

Richten Sie den Client-Knoten ein

Melden Sie sich bei dem Server an, den wir anrufen **. Wir müssen das Icinga-Repository erneut installieren und dann Icinga selbst installieren. Dies ist das gleiche Verfahren, das wir für den Masterknoten verwendet haben. Installieren Sie zuerst den Schlüssel:

curl -sSL https://packages.icinga.com/icinga.key | sudo apt-key add -

Öffnen Sie die Datei + icinga.list +:

sudo nano /etc/apt/sources.list.d/icinga.list

Fügen Sie die Repository-Details ein:

/etc/apt/sources.list.d/icinga.list

deb https://packages.icinga.com/ubuntu icinga-xenial main

Speichern und schließen Sie die Datei und aktualisieren Sie den Paket-Cache:

sudo apt-get update

Dann installieren Sie + icinga2 +. Beachten Sie, dass _wir das Paket + icinga2-ido-mysql nicht benötigen, das wir auf dem Masterknoten installiert haben:

sudo apt-get install icinga2

Jetzt führen wir den Knotenassistenten auf diesem Server aus, aber wir führen eine Satellitenkonfiguration anstelle von Master durch:

sudo icinga2 node wizard
OutputPlease specify if this is a satellite setup ('n' installs a master setup) [Y/n]:
Starting the Node setup routine...
Please specify the common name (CN) []:
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup):
Do you want to establish a connection to the master from this node? [Y/n]:
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN):
Master endpoint port [5665]:
Add more master endpoints? [y/N]:
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host []:
Port [5665]:

Der Assistent holt nun das öffentliche Zertifikat von unserem Masterknoten und zeigt uns dessen Details an. Bestätigen Sie die Angaben und fahren Sie fort:

Output. . .
Is this information correct? [y/N]:
information/cli: Received trusted master certificate.

Please specify the request ticket generated on your Icinga 2 master.
(Hint: # icinga2 pki ticket --cn ''):

Wechseln Sie zu diesem Zeitpunkt wieder zu Ihrem "+ master " - Server und führen Sie den Befehl aus, zu dem Sie der Assistent aufgefordert hat. Vergessen Sie nicht ` sudo +` davor:

sudo icinga2 pki ticket --cn ''

Der Befehl gibt eine Taste aus. Kopieren Sie es in Ihre Zwischenablage, wechseln Sie dann zurück zum Client-Knoten, fügen Sie es ein und drücken Sie "+ ENTER +", um mit dem Assistenten fortzufahren.

Output. . .
information/cli: Requesting certificate with ticket ''.

Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:
Accept config from master? [y/N]:
Accept commands from master? [y/N]:
Done.

Now restart your Icinga 2 daemon to finish the installation!

Öffnen Sie nun den Icinga-Port Ihrer Firewall:

sudo ufw allow 5665

Starten Sie Icinga neu, um die Konfiguration vollständig zu aktualisieren:

sudo systemctl restart icinga2

Sie können mit "+ netstat +" überprüfen, ob eine Verbindung zwischen den beiden Servern besteht:

netstat | grep :5665

Es kann einen Moment dauern, bis die Verbindung hergestellt ist. Schließlich gibt "+ netstat " eine Zeile aus, die eine " ESTABLISHED +" - Verbindung am richtigen Port anzeigt.

Outputtcp        0      0 :     :5665     ESTABLISHED

Dies zeigt, dass unsere Server verbunden sind und wir bereit sind, die Client-Prüfungen zu konfigurieren.

Konfigurieren Sie die Agentenüberwachung

Obwohl der Master und der Client jetzt verbunden sind, müssen noch einige Einstellungen am Master vorgenommen werden, um die Überwachung zu aktivieren. Wir müssen eine neue Host-Datei einrichten. Wechseln Sie zurück zum Masterknoten.

Eine wichtige Organisationsebene in einer Icinga-Installation ist das Konzept einer zone. Alle Client-Knoten müssen ihre eigene Zone erstellen und an eine übergeordnete Zone berichten, in diesem Fall an unseren Master-Knoten. Die Zone unseres Masterknotens ist standardmäßig nach seinem vollqualifizierten Domänennamen benannt. Wir erstellen ein Verzeichnis, das nach unserer Master-Zone benannt ist, im Icinga-Verzeichnis "+ zone.d +". Hier werden die Informationen für alle Clients der Masterzone gespeichert.

Erstellen Sie das Zonenverzeichnis:

sudo mkdir /etc/icinga2/zones.d/

Wir werden eine Service-Konfigurationsdatei erstellen. Hiermit werden einige Dienstprüfungen definiert, die auf einem beliebigen Remote-Client-Knoten durchgeführt werden. Öffne die Datei jetzt:

sudo nano /etc/icinga2/zones.d//services.conf

Füge Folgendes ein, speichere und schließe:

services.conf

apply Service "load" {
 import "generic-service"
 check_command = "load"
 command_endpoint = host.vars.client_endpoint
 assign where host.vars.client_endpoint
}

apply Service "procs" {
 import "generic-service"
 check_command = "procs"
 command_endpoint = host.vars.client_endpoint
 assign where host.vars.client_endpoint
}

Dies definiert zwei Serviceprüfungen. Der erste gibt Auskunft über die CPU-Auslastung und der zweite prüft die Anzahl der Prozesse auf dem Server. Die letzten beiden Zeilen jeder Service-Definition sind wichtig. + command_endpoint + teilt Icinga mit, dass diese Dienstprüfung an einen entfernten Befehlsendpunkt gesendet werden muss. Die Zeile + assign where + weist die Dienstprüfung automatisch jedem Host zu, auf dem eine Variable + client_endpoint + definiert ist.

Erstellen wir jetzt einen solchen Host. Öffnen Sie eine neue Datei in dem zuvor erstellten Zonenverzeichnis. Hier haben wir die Datei nach dem Remote-Host benannt:

sudo nano /etc/icinga2/zones.d/web-2.example.com<^>.conf

Fügen Sie die folgende Konfiguration ein und speichern und schließen Sie die Datei:

web-2.example.com.conf

object Zone "" {
 endpoints = [ "" ]
 parent = ""
}

object Endpoint "" {
 host = ""
}

object Host "" {
 import "generic-host"
 address = ""
 vars.http_vhosts["http"] = {
   http_uri = "/"
 }
 vars.notification["mail"] = {
   groups = [ "icingaadmins" ]
 }
 vars.client_endpoint = name
}

Diese Datei definiert eine Zone für unseren Remote-Host und bindet sie wieder an die übergeordnete Zone. Außerdem wird der Host als Endpunkt definiert und anschließend der Host selbst. Dabei werden einige Standardregeln aus der Vorlage "+ generic-host " importiert. Außerdem werden einige ` vars ` gesetzt, um eine HTTP-Prüfung zu erstellen und E-Mail-Benachrichtigungen zu aktivieren. Da für diesen Host " vars.client_endpoint = name " definiert ist, werden ihm auch die soeben in " services.conf +" definierten Serviceprüfungen zugewiesen.

Starten Sie Icinga neu, um die Konfiguration zu aktualisieren:

sudo systemctl restart icinga2

Wechseln Sie zurück zur Icinga-Weboberfläche, und der neue Host wird mit einem Häkchen * Ausstehend * angezeigt. Nach einigen Augenblicken sollten diese Prüfungen auf "OK" stehen. Dies bedeutet, dass unser Client-Knoten erfolgreich Prüfungen für den Master-Knoten ausführt.

Fazit

In diesem Tutorial haben wir zwei verschiedene Arten der Überwachung mit Icinga eingerichtet, externe Serviceprüfungen und agentenbasierte Hostprüfungen. Es gibt noch viel mehr über die Konfiguration und die Arbeit mit Icinga zu lernen. Sie sollten sich daher näher mit der ausführlichen Dokumentation zu Icinga befassen.

Beachten Sie, dass Sie an einem Punkt, an dem Sie benutzerdefinierte check-Befehle benötigen, diese mithilfe einer globalen Konfigurationszone vom Master mit den Client-Knoten synchronisieren müssen. Weitere Informationen zu dieser Funktion finden Sie unter here.

Wenn Sie eine große Anzahl von Servern überwachen müssen, sollten Sie die Verwendung von Konfigurationsverwaltungssoftware in Betracht ziehen, um Ihre Icinga-Konfigurationsupdates zu automatisieren. Unsere Tutorial-Reihe Getting Started with Configuration Management bietet einen umfassenden Überblick über die Konzepte und die Software.