====== NPCD ====== NPCD (Nagios-Perfdata-C-Daemon) wurde geschrieben um die asynchrone Bearbeitung von Nagios Performancedaten 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 Performancedaten 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 [[pnp::config::#bulk_mode|Bulk Mode]] verwenden, wobei die Performancedaten 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 Performancedatendateien lediglich durch das Verschieben der Dateien in ein Spool-Verzeichniss 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 Performancedatenverarbeitung durch das schnelle Verschieben der Datei bereits erledigt, aber das bringt die Performancedaten noch nicht in die RRD-Datenbank. Um den Transport der Performancedatendateien kümmert sich nun der NPCD-Daemon, abseits vom Nagios Prozess, in dem 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 Spoolverzeichnisses und startet für jede gefundene Datei einen Thread zur weiteren Verarbeitung mittels dem ''perfdata_file_run_cmd'' und dem optionalen ''perfdata_file_run_cmd_arg'' als zusätzliches Argument. Da das Format der Performancedatendateien dem Format der 'normalen' PNP Bulkmodus Dateien gleicht, kann NPCD nun für jede gefundene Datei also ''process_perfdata.pl'' im [[pnp::modes::#bulk_mode|Bulk Modus]] aufrufen. ===== Vor- und Nachteile ===== **Pro:** * bessere Performance für Nagios * Aufgrund der vom Nagios-Prozess getrennten Verarbeitung der Performancedaten hat Nagios mehr Zeit für die wichtigen Dinge * Kein Datenverlust * Solange Nagios-Performancedatendateien 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 Performancedaten * Aufgrund des Rhythmusses, wann Nagios die Performancedatendateien verschiebt (''service_perfdata_file_processing_interval'') * Nach jedem Lauf durch alle Dateien des Spoolverzeichnisses 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: /usr/local/nagios/bin/npcd -f /usr/local/nagios/etc/pnp/npcd.cfg oder /usr/local/nagios/bin/npcd -d -f /usr/local/nagios/etc/pnp/npcd.cfg 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/nagios/var/npcd.log max_logfile_size = 10485760 log_level=0 # Processing Options perfdata_spool_dir = /usr/local/nagios/var/spool/perfdata/ perfdata_file_run_cmd = /usr/local/nagios/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 * NPCD versucht die Userberechtigung zu diesem User zu wechseln. * **Default:** nagios * group * NPCD versucht die Gruppenberechtigung zu dieser Gruppe zu wechseln. * **Default:** nagios * **Logging-Optionen** * log_type oder * Log-Type, den NPCD zum Loggen verwenden wird * **Default:** syslog * log_file * Falls ''log_type = file'' wird diese Logdatei verwendet * **Default:** /usr/local/nagios/var/npcd.log * max_logfile_size * NPCD wird nach Erreichen der hier angegebenen Dateigröße eigenständig eine Logrotation durchführen * **Default:** 10485760 = 10 MByte * log_level * 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 * Das Verzeichnis, in das Nagios die Dateien verschiebt * **Default:** /usr/local/nagios/var/spool/perfdata/ * perfdata_file_run_cmd * Das Programm, welches Nagios für jede Datei aufrufen soll * **Default:** /usr/local/nagios/libexec/process_perfdata.pl * perfdata_file_run_cmd_args