Best Practices für Nagios-Server?


10

Ich betreibe einen mittelgroßen Nagios-Server. Es überwacht derzeit rund 40 Server mit 180 Diensten und wächst nur von Tag zu Tag.

Ich bin von einem alten Nagios-Setup migriert, das sehr esoterisch konfiguriert war, und habe mich gezwungen, alles von Grund auf neu zu konfigurieren.

Jetzt, da der Server läuft und für das meiste funktioniert, wofür wir ihn benötigen , möchte ich ihn etwas skalierbarer machen. Derzeit ist jeder Host eine eigene Datei /etc/nagios/hosts/, und jeder Host hat alle seine Dienste in derselben Datei. Dies ist offensichtlich nicht optimal, verschleiert aber auch nicht meine gesamte Konfiguration in Hunderte verschiedener Dateien.

Meine Frage lautet also: Was ist für erfahrene Nagios-Administratoren der beste Weg, Hostgruppen / Servicegruppen zu nutzen, ohne die Konfiguration zu komplizieren?

Antworten:


13

Hostgruppen und Vorlagen.

Mit Vorlagen können Sie Klassen für Ihre Hosts und Dienste definieren, z. B. "normaler Dienst", "kritischer Dienst", "Host mit niedriger Priorität". Sie dienen auch als nützliche Methode zum Aufteilen von Verantwortlichkeiten, wenn Sie mehrere Teams mit unterschiedlichen Verantwortlichkeiten haben. Sie können also eine "Linux-Host" -Vorlage und eine "Windows-Host" -Vorlage haben, wobei jedes die entsprechenden Kontaktinformationen definiert.

Sie können mehrere Vorlagen für eine einzelne Ressource verwenden, um entsprechend orthogonale Vorlagen zu erstellen. Zum Beispiel können Sie haben

host foo {
    use windows-host,normal-priority-host
    ...
}

Dadurch werden die Kontaktinformationen (und Eskalationen) für das Windows-Team sowie die Abfrageraten und Schwellenwerte für einen "normalen" Host abgerufen.

Mit Hostgruppen können Sie alle Prüfungen für eine Teilmenge Ihrer Hosts zusammenfassen. Haben Sie Dinge wie "Baseline-Linux-Hosts", die die Last, den Speicherplatz, die sshFähigkeiten und alle anderen Dinge überprüfen, die auf jedem von Ihnen überwachten Host vorhanden sein sollten. Fügen Sie Gruppen wie "https-Server" hinzu, um die HTTP-Konnektivität, die HTTPS-Konnektivität und das Ablaufdatum des SSL-Zertifikats zu überprüfen. "Dateiserver" mit Überprüfungen der NFS- und SMB-Zugänglichkeit und möglicherweise aggressiveren Festplattenprüfungen; oder "virtuelle Maschinen" mit Überprüfungen, ob die VM-Eingabehilfen ordnungsgemäß ausgeführt werden.

Fügen Sie jeden Host und jede Hostgruppe in eine eigene Datei ein. Diese Datei sollte zuerst die Host- oder Hostgruppendefinition enthalten, gefolgt von den Definitionen der Dienste, die für sie gelten.

Wenn Sie die cfg_dirDirektive in Ihrer nagios.cfgDatei verwenden, durchsucht Nagios dieses Verzeichnis rekursiv. Nutzen Sie das. Für eine Einstellung von cfg_dir=/etc/nagios/conf.dkönnen Sie einen Verzeichnisbaum wie den folgenden haben:

  • /etc/nagios/conf.d/
    • befehle.d /
      • http.cfg
      • nrpe.cfg
      • smtp.cfg
      • ssh.cfg
    • hosts.d /
      • host1.cfg
      • host2.cfg
      • host3.cfg
    • hostgroups.d /
      • hostgroup1.cfg
      • hostgroup2.cfg

Ich neige dazu, ein Verzeichnis für jeden Ressourcentyp (Befehle, Kontaktgruppen, Kontakte, Eskalationen, Hostgruppen, Hosts, Servicegruppen, Zeiträume) zu erstellen, mit Ausnahme von Diensten, die mit den Hosts oder Hostgruppen gruppiert werden, die sie verwenden.

Die genaue Struktur kann je nach Ihren organisatorischen Anforderungen variieren. Bei einem früheren Job habe ich hosts.dfür jede Site Unterverzeichnisse unter verwendet . In meinem aktuellen Job werden die meisten Nagios-Hostdefinitionen von Puppet verwaltet. Daher gibt es ein Verzeichnis für von Puppet verwaltete Hosts und ein separates für handverwaltete Hosts.

Beachten Sie, dass die oben genannten Befehle auch in mehrere Dateien unterteilt werden, im Allgemeinen nach Protokoll. Somit wird das nrpe.cfgwürde Datei die Befehle check_nrpeund check_nrpe_1arg, während http.cfgkönnte check_http, check_http_port, check_https, check_https_port, und check_https_cert. 1

Ich habe normalerweise keine enorme Anzahl von Vorlagen, daher habe ich normalerweise nur eine hosts.d/templates.cfgDatei und eine services.d/templates.cfgDatei. Wenn Sie sie häufiger verwenden, können sie in Dateien mit entsprechendem Namen in einem templates.dVerzeichnis abgelegt werden .

1 Ich möchte auch einen check_http_blindlyBefehl haben, der im Grunde ist check_http -H $HOSTADDRESS$ -I $HOSTADDRESS$ -e HTTP/1.; Es gibt OK zurück, auch wenn es einen 403-Antwortcode erhält.


6

Nutzen Sie Service- und Hostgruppen sowie Vorlagen in großem Umfang. Erstellen Sie Hostgruppen und weisen Sie den Hostgruppen Dienste zu. Verwenden Sie Servicegruppen für Abhängigkeiten, Eskalationen und logische Gruppierungen in der Web-Benutzeroberfläche.

Wenn Sie Gruppen für alles haben, besteht das Hinzufügen eines neuen Hosts nur aus 3 oder 4 Zeilen: Name, Adresse, Vorlage (n) und (optional) Hostgruppen. Alles kann als Vorlage verwendet werden.

Lesen Sie unbedingt die Dokumente zur Vererbung sowie die Seite mit den zeitsparenden Tricks . Mehrfachvererbung kann schwierig werden, aber bei richtiger Verwendung spart es viel Zeit.


Ich möchte ein Gleichgewicht mit der Konfiguration finden. Zu viel Vererbung kann schwierig werden, wenn ein anderer Administrator den Server abholen muss (ich bin ein Praktikant, daher werde ich dies nicht mehr lange ausführen).
Michael Pobega

1
Halten Sie sich dann wahrscheinlich von Mehrfachvererbung fern. Verwenden Sie einfach kaskadierende Vorlagen, wenn Sie es einfach halten möchten (ish).
Keith

1

Ich wurde verwendet, um meine Nagios-Server (bevor ich zu Icinga gewechselt bin) auf diese Weise zu konfigurieren, und es gibt keinen Mangel an Leistung, bis Sie mindestens mit einem 512-MB-Speicher / 1-CPU-Server mehr als 500 Dienste erreichen. Hostgruppen und Servicegruppen können vollständig getrennt behandelt werden, und ich würde diesen Ansatz empfehlen, da eine Datei pro Server (Dienste für diesen Server in dieser Datei definiert) und dann eine Datei pro Hostgruppe / Servicegruppe vorhanden ist. Dies ist nur verständlicher / klarer.

Wenn Sie auf Skalierbarkeitsprobleme stoßen, sollten Sie sich nagios-nrpe-server ansehen, das clientseitige Überprüfungen durchführt und bei dem Ihr Nagios-Server nur nach Ergebnissen fragt. die die Ressource des Schecks schonen. (Nagios startet check_nrpe, der Client wird angefordert, führt lokal Überprüfungen durch und antwortet zurück auf nagios). Beachten Sie, dass nicht alle Prüfungen auf diese Weise behandelt werden können (z. B. SNMP).

Abschließend möchte ich vorschlagen, auf Icinga umzusteigen, das viel skalierbarer ist und von einer stärkeren Community unterstützt wird, die sich wirklich um die Implementierung neuer Funktionen und die Benutzerunterstützung kümmert. Die Konfiguration ist dieselbe (gleiche Konfigurationsdateien, gleiche Syntax).


Mit skalierbar meinte ich wirklich die Konfiguration, nicht wirklich Skalierbarkeitsprobleme; Ich mache mir keine Sorgen, jemals diese Schwelle zu erreichen. Was genau meinst du mit den Hostgruppen / Servicegruppen? Ich verstehe deine Erklärung nicht.
Michael Pobega

1

Ich benutze dieses Schema:

  • Gastgeber,
  • Hostgruppen,
  • Ferndienste,
  • lokale Dienstleistungen.

Jede Entität hat ihre eigene Datei. Außerdem können Sie mit den Vorlagen Ihre Konfiguration immer besser lesbar machen. Beispielsweise können Sie auf jedem Host einen durchschnittlichen Auslastungsgrad, Speicherplatz und Speicher haben. Es ist also ganz einfach und praktisch, eine generische Vorlage zu erstellen und zu verwenden.


1

Sie können die Konfiguration nicht durch das Erstellen von Gruppen erschweren. Wie Asciiphil sagt, erstellen Sie eine Datei oder Sie können dieselben Gruppen in einigen der vorhandenen Dateien wie (hosts.cfg oder was auch immer) definieren, und Sie erstellen diese Datei oder Sie sagen Nagios, dass diese Datei aktiv ist (dies ist, wenn Sie erstellen ein neues Feld, falls es nicht bereits aktiv ist. Dies befindet sich in der Datei nagios.cfg, in der Sie den Pfad der neu erstellten Datei angeben. "cfg_file = / usr / local / nagios / etc / properties / NEW_FILE.cfg"

Die andere Sache ist nur, Gruppen abhängig von Ihrer Infrastruktur zu bilden. Wenn ich zum Beispiel Linux und Windows Server habe, werde ich zwei verschiedene Gruppen bilden, eine für Linux und eine für Windows. So ist es auch mit den Dienstleistungen. Je nachdem, wie Sie konfigurieren und sehen möchten, wann Sie auf dem Monitor überwachen, wie möchten Sie sie als Gruppen sehen.

Und für die Datei oder den Teil, wie man eine Gruppe erstellt, ist es einfach.

    define hostgroup{
    hostgroup_name novell-servers
    alias Novell Servers
    members netware1,netware2,netware3,netware4
    }

Und in der Hostkonfiguration / oder wenn Sie eine Vorlage verwenden oder wenn Sie bereits eine Hostvorlage oder einen Dienst definiert haben und die Verwendung verwenden, können Sie allen Hosts / Windows- oder Linux-Hosts automatisch mitteilen, dass sie Mitglieder einer von Ihnen erstellten definierten Hostgruppe sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.