====== ndo2fs ====== **WORK IN PROGRESS** ndo2fs ist als Debugger für ndomod.o entstanden und nimmt die Daten von ndomod.o entweder über TCP- oder UNIX-Sockets entgegen. Ziel von ndo2fs ist es, die Nagios Daten strukturiert im Filesystem abzulegen. Dabei wurde darauf geachtet, dass die Daten mit einfachen Mitteln zu verarbeiten sind. Zusätzlich arbeite ich an einer PHP-Klasse, die den Zugriff auf die Daten von ndo2fs regelt. Dazu aber mehr unter [[ndo2fs-php]]. ===== Arbeitsweise ===== ndo2fs arbeitet wie ndo2db, ist jedoch im Gegensatz zu ndo2db in Perl geschrieben und speichert die Daten im Filesystem. Das ist bereits alles. ===== Download ===== Die aktuelle Version ist im GIT Repository unter [[http://git.nagiosprojects.org/?p=ndo2fs.git|git.nagiosprojects.org]] zu finden. \\ [[http://git.nagiosprojects.org/?p=ndo2fs.git;a=snapshot;h=0.2.1|GIT Snapshot ndo2fs-0.2.1]]\\ [[http://git.nagiosprojects.org/?p=ndo2fs.git;a=snapshot;h=refs/heads/master|GIT Snapshot Head]]\\ \\ Die [[http://www.nagvis.org|NagVis]] Entwickler Lars Michelsen und Michael Lübben sowie der [[http://www.my-plugin.de/wiki/de/projects/check_multi/start|check_multi]] Entwickler Matthias Flacke liefern zur Zeit wertvollen Input. Bei Fragen bitte einfach eine Mail an [[pitchfork@pnp4nagios.org]] ===== Installation ===== Noch keine! Es ist ein einzelnes Perl Script. Mit Version 0.1.13 wird das Perl Modul JSON::XS zum erstellen der JSON Files benötigt. Das Modul ist leider erst ab Debian Lenny als [[http://packages.debian.org/de/lenny/libjson-xs-perl|Paket]] verfügbar. Debian Etch User installieren das Modul über CPAN via perl -MCPAN -e install JSON::XS ===== ndomod data_processing_options ===== Die von ndomod zu verarbeitenden Daten lassen sich über die "data_processing_options" in der ndomod.cfg minimieren. ndo2fs verarbeitet nur einen Teil der anfallenden Daten. PROCESS_HOST_CHECK_DATA 128 PROCESS_STATECHANGE_DATA 8388608 PROCESS_HOST_STATUS_DATA 4096 PROCESS_CONTACT_STATUS_DATA 16777216 PROCESS_SERVICE_STATUS_DATA 8192 PROCESS_COMMENT_DATA 256 PROCESS_MAIN_CONFIG_DATA 524288 PROCESS_ACKNOWLEDGEMENT_DATA 4194304 PROCESS_RETENTION_DATA 2097152 PROCESS_OBJECT_CONFIG_DATA 262144 PROCESS_DOWNTIME_DATA 512 PROCESS_PROGRAM_STATUS_DATA 2048 PROCESS_SERVICE_CHECK_DATA 64 PROCESS_PROCESS_DATA 1 data_processing_options = 32259009 ===== TODO ===== * Daemon Code * Prüfungen * Getopts für die wichtigsten Optionen Von Wolfgang erledigt * Code aufräumen ===== Performance ===== 1,4 Mio Zeilen entsprechen 10 Minuten Daten auf meinem Prod System. wc -l ndo.dat 1406535 ndo.dat Diese Daten habe ich via NetCat an ndo2fs übergeben. time cat ndo.dat | nc -q1 -n 127.0.0.1 5668 real 0m19.561s user 0m0.004s sys 0m0.064s Dies ergibt 67MB Daten im ndo2fs Verzeichnis du -s -h /tmp/ndo2fs 67M /tmp/ndo2fs Das Ergebnis stammt von einer Debian 4 VM auf meinem MacBook Pro. ===== Datenformat ===== Die Daten werden im Filesystem im JSON-Format gespeichert. JSON steht für "[[http://www.json.org|JavaScript Object Notation]]", aber keine Angst, es gibt genügend einfach zu verwendende Parser. Beispiel PHP5: ===== Datenstruktur ===== Angenommen, ''/tmp/ndo2fs'' wird als Basisverzeichnis verwendet, so findet man nach dem Start von ndo2fs dort zwei Unterverzeichnisse. * ndo2fs * VOLATILE * PERSISTENT Das Verzeichnis VOLATILE enthält flüchtige Daten, die beim Start von Nagios neu geschrieben werden. VOLATILE kann somit auf ein TMPFS ausgelagert werden. PERSISTENT enthält dagegen Daten, die zur Laufzeit von Nagios entstehen und die über Neustarts hinweg erhalten bleiben. Die nächste Ebene bildet die Nagios-Instanz. Für jede Nagios-Instanz wird es hier ein Verzeichnis mit dem entsprechenden Namen geben. Im Folgenden wird die Instanz verwendet. ==== VOLATILE ==== Unterhalb von VOLATILE/default/ befinden sich somit die Daten der Instanz "default". * **default** * **HOSTS** # Verzeichnis für Hosts/Service Status und Config * **** # Verzeichnis pro Host * //CONFIG// # Config * //STATUS// # Aktueller Status * **** # Service Verzeichnis * //CONFIG// # Config * //STATUS// # Status * **HOSTGROUPS** * **** * //META// # Meta Informationen über die Hostgroup * **SERVICEGROUPS** * **** * //META// * **CONTACTGROUPS** * **** * //META// # Meta Informationen über die Contactgroup * ____ # Für jedes Mitglied in der Gruppe zeigt ein Symlink auf den entsprechenden Contact * **CONTACTS** * //// # Pro Contact eine Datei * **AUTH** * **HOST** * **** * ____ # Symlink auf den Host Status * **SERVICE** * **** * **** * ____ # Symlink auf den Service Status * **HOSTAUTH** * ____ # Array aller Hosts für den der Contact berechtigt ist * **SERVICEAUTH** * ____ # Array aller Hosts/Services für die der Contact berechtigt ist * **HOSTSTATE** * **** # Verzeichnis pro Status ( UP,DOWN,UNREACHABLE ) * **** * __STATUS__ # Symlink auf die STATUS-Datei des Hosts * **SERVICESTATE** * **** # Verzeichnis pro Status ( OK,WARNING,CRITICAL,UNKNOWN ) * **** * **** * __STATUS__ # Symlink auf die STATUS-Datei des Services * **VIEWS** * //HOSTLIST// # Liste aller Hosts * //SERVICELIST// # Liste aller Services * //HOSTROUPLIST// # Liste aller Hostgroups * //SERVICEGROUPLIST// # Liste aller Servicegroups * //PARENTLIST// # Liste der Parent-Beziehungen zwischen Hosts ==== PERSISTENT ==== Unterhalb von PERSISTENT/default/ befinden sich Daten, die zur Nagios-Laufzeit ermittelt, aber nicht beim Nagios-Neustart neu übermittelt werden. * **default** * **DOWNTIMES** # Verzeichnis für Hosts/Service Status und Config * //// # Jede Downtime in einer eigenen Datei. Dateiname ist die Downtime-ID * **COMMENTS** * //// # Eine Datei pro Comment. Dateiname ist dabei die Comment-ID * //::// # Eine Datei pro Comment. Dateiname setzt sich aus Hostname und Servicedesc. zusammen. * **LOGS** * //YYYYMMDD.log// # Eine Logdatei pro Tag