Table of Contents

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 git.nagiosprojects.org zu finden.

Aktuelle Snapshots aus dem GIT Repository:


Die NagVis Entwickler Lars Michelsen und Michael Lübben sowie der 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 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

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 ”JavaScript Object Notation”, aber keine Angst, es gibt genügend einfach zu verwendende Parser.

Beispiel PHP5:

<?php
$in = '/tmp/ndo2fs/VOLATILE/HOSTS/localhost/http/STATUS';
$data = file_get_contents($in);
$out = json_decode($data);
var_dump($out);
?>

Datenstruktur

Angenommen, /tmp/ndo2fs wird als Basisverzeichnis verwendet, so findet man nach dem Start von ndo2fs dort zwei Unterverzeichnisse.

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 <default> verwendet.

VOLATILE

Unterhalb von VOLATILE/default/ befinden sich somit die Daten der Instanz “default”.

PERSISTENT

Unterhalb von PERSISTENT/default/ befinden sich Daten, die zur Nagios-Laufzeit ermittelt, aber nicht beim Nagios-Neustart neu übermittelt werden.