====== 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