User Tools

Site Tools


de:pnp-0.6:npcd

NPCD

NPCD (Nagios-Perfdata-C-Daemon) wurde geschrieben, um die asynchrone Bearbeitung von Nagios Performance-Daten zu ermöglichen.

Einleitung

In großen Nagios-Installationen kann es zu nicht akzeptierbaren Verspätungen seitens der Checks kommen. Das bedeutet, dass Nagios einen Check zum Zeitpunkt x ausführen soll, diesen aber erst y Sekunden später tatsächlich ausführt.

Wenn man dem Nagios-Daemon mitteilt, dass man nach jedem einzelnen Check auch die Performance-Daten verarbeiten möchte, so geht dies bis zu einem bestimmten Grad gut, ab einer gewissen Anzahl von Checks pro Sekunde allerdings kommt man relativ schnell zu den sog. Latency-Problemen.

Um die Anzahl der Aktionen pro Check zu verringern, kann man nun PNP im Bulk-Mode verwenden, wobei die Performance-Daten zunächst vom Nagios-Prozess gesammelt und anschließend ebenfalls vom Nagios-Prozess selbst verarbeitet werden.

Man kann aber auch dem Nagios-Prozess mitteilen, dass die Verarbeitung der Performance-Daten lediglich durch das Verschieben der Dateien in ein Spool-Verzeichnis geschehen soll, welches für den Nagios-Prozess selbst eine sehr schnelle Aktion ist und die Performance nicht nennenswert beeinflusst und somit dem Core mehr Zeit für seine eigentliche Arbeit lässt: weitere Checks ausführen, Alamierungen bereitstellen, etc.

Wie NPCD arbeitet

Wie bereits erwähnt, ist die Arbeit der Performance-Daten-Verarbeitung durch das schnelle Verschieben der Datei bereits erledigt, aber das bringt die Performance-Daten noch nicht in die RRD-Datenbank.

Um den Transport der Performance-Daten-Dateien kümmert sich nun der NPCD-Daemon, unabhängig vom Nagios-Prozess, indem er regelmäßig in das Spool-Verzeichnis guckt und für jede dort gefundene Datei eine Aktion ausführt.

Nachdem NPCD gestartet wurde, erstellt er sich eine Liste von Dateinamen des Spool-Verzeichnisses und startet für jede gefundene Datei einen Thread zur weiteren Verarbeitung mit Hilfe des perfdata_file_run_cmd und dem optionalen perfdata_file_run_cmd_arg als zusätzlichem Argument.

Da das Format der Performance-Daten-Dateien dem Format der 'normalen' PNP-Bulk-Modus-Dateien gleicht, kann NPCD nun für jede gefundene Datei also process_perfdata.pl im Bulk Modus aufrufen.

Vor- und Nachteile

Pro:

  • bessere Performance für Nagios
    • aufgrund der vom Nagios-Prozess getrennten Verarbeitung der Performance-Daten hat Nagios mehr Zeit für die wichtigen Dinge
  • kein Datenverlust
    • solange Nagios Performance-Daten-Dateien im Spool-Verzeichnis ablegt, gehen keine Daten verloren. Selbst wenn der NPCD mal nicht laufen sollte (Bsp. nach Neustart des Systems), werden die Dateien nach Wiederanlauf in chronologischer Reihenfolge bearbeitet ($TIMET$ Makro beim verschieben ins Spool-Verzeichnis)

Kontra:

  • Keine Echtzeitverarbeitung der Performance-Daten
    • aufgrund des Rhythmusses, wann Nagios die Performance-Daten-Dateien verschiebt (service_perfdata_file_processing_interval)
    • nach jedem Lauf durch alle Dateien des Spool-Verzeichnisses wartet NPCD 10 Sekunden lang auf neue Dateien

NPCD Config

NPCD muss zwangsläufig über eine Konfigurationsdatei gesteuert werden. Eine Beispielkonfiguration liegt der PNP-Installation als npcd.cfg-sample bei.

Nach Umbenennen der -sample Datei zu npcd.cfg kann NPCD nun wie folgt gestartet werden:

<code_bash>/usr/local/pnp4nagios/bin/npcd -f /usr/local/pnp4nagios/etc/npcd.cfg</code> oder <code_bash>/usr/local/pnp4nagios/bin/npcd -d -f /usr/local/pnp4nagios/etc/npcd.cfg</code> um NPCD im Hintergrund als Daemon laufen zu lassen.

Hinweis: Die -sample Datei sollte in jedem Fall in npcd.cfg umbenannt werden, da sie sonst bei einem Update von PNP überschrieben werden könnte.

npcd.cfg-sample

Dies sind die essentiellen Konfigurationsdirektiven für NPCD:

# Privilege Options
user = nagios
group = nagios

# Logging Options
log_type = syslog
log_file = /usr/local/pnp4nagios/var/npcd.log
max_logfile_size = 10485760
log_level=0

# Processing Options
perfdata_spool_dir = /usr/local/pnp4nagios/var/spool/perfdata/
perfdata_file_run_cmd = /usr/local/pnp4nagios/libexec/process_perfdata.pl
perfdata_file_run_cmd_args = -b

# Thread Options
npcd_max_threads=5

# greedy options
use_load_threshold = 0
load_threshold = 10.0

# Process Options
pid_file=/var/run/npcd.pid

Die Direktiven

  • Privilege-Optionen
    • user <username>
      • NPCD versucht die Userberechtigung zu diesem User zu wechseln.
      • Default: nagios
    • group <groupname>
      • NPCD versucht die Gruppenberechtigung zu dieser Gruppe zu wechseln.
      • Default: nagios
  • Logging-Optionen
    • log_type <syslog> oder <file>
      • Log-Type, den NPCD zum Loggen verwenden wird
      • Default: syslog
    • log_file </pfad/zu/datei>
      • Falls log_type = file wird diese Logdatei verwendet
      • Default: /usr/local/pnp4nagios/var/npcd.log
    • max_logfile_size <bytes>
      • NPCD wird nach Erreichen der hier angegebenen Dateigröße eigenständig eine Logrotation durchführen
      • Default: 10485760 = 10 MByte
    • log_level <integer>
      • Wie viel soll aufgezeichnet werden, möglich ist:
        • 0 = Kein Log - außer Fehlern
        • 1 = wenig Log - etwas mehr Aufzeichnen
        • 2 = Mehr Log (aktuell ALLES)
        • -1 = DEBUG Mode - Es wird alles aufgezeichnet und die Bearbeitung wird verlangsamt
      • Default: 0
  • Bearbeitungs-Optionen
    • perfdata_spool_dir </path/to/spool/dir/>
      • Das Verzeichnis, in das Nagios die Dateien verschiebt
      • Default: /usr/local/pnp4nagios/var/spool/
    • perfdata_file_run_cmd </path/to/bin/filename>
      • Das Programm, welches Nagios für jede Datei aufrufen soll
      • Default: /usr/local/pnp4nagios/libexec/process_perfdata.pl
    • perfdata_file_run_cmd_args <option>
      • Das Argument, welches optional an perfdata_file_run_cmd angehängt wird
      • Default: “-b”
      • :!: Die Kommandozeile wird nach folgendem Schema aufgebaut:
        <perfdata_file_run_cmd> <perfdata_file_run_cmd_args> <filename_from_perfdata_spool_dir>
  • Thread-Optionen
    • npcd_max_threads <integer value>
      • Anzahl der maximal zu startenden parallelen Threads
      • Default: 5
  • Greedy-Optionen
    • use_load_threshold <0 oder 1>
      • definiert, ob NPCD bei Erreichen des load_thresholds die Anzahl der Threads begrenzen soll
        • 0 = ausschalten (weitere Threads starten)
        • 1 = einschalten
      • Default: 0
    • load_threshold <float value>
      • wenn use_load_threshold auf 1 gesetzt ist, werden bei Erreichen dieses load limits keine neuen Threads gestartet
      • Default: 10.0
  • Process-Optionen
    • pid_file </path/to/pid.file>
      • Pfad zum PID File
      • Default: /var/run/npcd.pid

zurück zur Übersicht | Wrapper-Script

de/pnp-0.6/npcd.txt · Last modified: 2022/01/21 14:37 by 127.0.0.1