Installation Nagios 2.3.1 auf debian 3r2

Hier das Howto über die Installation eines Nagios-Server auf debian. Bislang enthält es lediglich die Beschreibung einer Minimalkonfiguration, aber ich hoffe, das ich die angestrebten Erweiterungen (MySQL / NagVis etc.) ebenfalls dokumentiere ;-)

Derzeit arbeite ich mit Debian Etch und Nagios 3.x und die folgende Anleitung sollte auch dabei funktionieren !

Inhaltsverzeichnis

Allgemeines

Was ist Nagios

Verwendete Hardware

Verwendete Software

Installation

Betriebssystem installieren

Installierte Packete aus der Distribubion

Nagios installieren

Plugins installieren

Konfiguration

Apache2 für Nagios konfigurieren

Nagios konfigurieren

Erweitert

Zugriff auf Nagios absichern 


    Anbindung an MySQL

        Installieren der NDO Utils

        Anlegen der MySQL-Datenbank

        NDO2DB konfigurieren & starten

        NDOMOD in Nagios einbinden

    Installation von NagVis

 

Allgemeines

 

Was ist Nagios

Nagios ist ein Network Monitoring Programm für die Überwachung von Hosts, Services und Netzwerken.

Dieses Netz- und Systemüberwachungswerkzeug ist im Gegensatz zu den kostspieligen kommerziellen Lösungen, wie z.B. Tivoli von IBM oder OpenView von HP, völlig quelloffen (OpenSource) und steht unter GPL-Lizenz.

Es ist kostenlos und kann sehr individuell auf die jeweiligen Anforderungen „maßgeschneidert“ werden. Außerdem besteht inzwischen eine stetig wachsende Gemeinde von Nagios-Usern weltweit. Viele große Firmen sind inzwischen auf dieses System gewechselt, siehe http://www.nagios.org/userprofiles/quickstats.php. Sollte man auf programmspezifische Probleme stoßen, so wird einem in Foren und Mailing-Listen im Internet sehr schnell weiter geholfen.

Das Programm selbst besteht aus einem in C geschriebenem Daemon, der über eine Reihe von Konfigurationsdateien gesteuert wird, sowie einigen weiteren Komponenten. Statusinformationen gibt Nagios über ein Logfile, vor allem aber über ein übersichtliches Web-Frontend aus.

Die beschriebene Installation ist nicht allgemein gültig. Nimmt man eine „nackte“ Debian Installation und führt das HOWTO Schritt für Schritt durch, so sollte es Reibungslos funktionieren.

 

Verwendete Hardware

·         AMD Athlon XP 3000+ 2.1 GHz

·         768 MB Arbeitsspeicher

·         80GB IDE-Festplatten

·         Ethernet-Karte 10/100/ Mbit

 

Verwendete Software

·         Debian Release 3.2 mit kernel 2.6.8-2-386 (http://www.debian.org)

·         Nagios Version 2.3.1 als Tarball (http://www.nagios.org)

·         Nagios Plugins Version 1.4.3 als Tarball (http://www.nagios.org)

·         NagVis Version 0.9b2 als Tarball (http://www.nagvis.org)

 

Installation

 

Betriebssystem installieren

·         Standard-Installation mit der Bootoption <linux26>

·         Automatische partitionierung als Mehrbenutzer Arbeitsplatzrechner

·         Installation des debian-Grundsystems

Installierte Packete aus der Distribubion

Wenn man so wie ich nur die erste CD von Debian nutzt und den Rest direkt aus dem Internet bezieht, sollte man darauf achten, das man mit apt-setup die Quelle für neue Pakete einstellt und ein apt-get update durchführt, da sonst benötigte Pakete nicht gefunden werden !

Die Installation der einzelnen Packete wurde mit apt-get durchgeführt. Hierbei werden direkt alle Abhängigkeiten berücksichtigt, d.h. führt man ein

apt-get install apache2


aus, so werden weitere benötigte Packete wie apache2-common, apache2-mpm-wo etc. mitinstalliert.

Als Web-Server verwenden wir Apache2

Zudem benötigen wir PHP4 , also brauchen wir für Apache2 das entsprechende Modul

Dann brauchen wir für PHP4 auch das gd-Modul um Grafiken wie gif / jpeg etc zu verarbeiten

Zudem benötigt Nagios das dev-Packet von gd

Eine Installation von Sourcen geschieht durch stets nach dem gleichen Prinzip:

 

./configure

make all

make install

 

Beim ./configure wird ein C-Compiler benötigt, der noch installiert werden muss.

 

apt-get install gcc

 

und natürlich brauchen wir das Programm make

 

apt-get install make

 

Nagios installieren

Für die Folgenden Arbeiten ist es notwendig, das man root-Rechte besitzt, da Benutzer angelegt und Konfigurationen geändert werden.

Da Nagios 2.3.1 nicht in der Distribution von Debian stable enthalten ist, downloaden wir die Datei nagios-2.3.1.tar.gz aus dem Internet in das Verzeichnis /usr/src.

o        Auspacken des Archives

cd /usr/src

tar xvzf nagios-2.3.1.tar.gz

o        Benutzer einrichten unter dem der Dienst laufen soll

adduser nagios

o        Verzeichnis erstellen, in dem Nagios installiert werden soll

mkdir /usr/local/nagios

o        Besitzer des erstellten Verzeichnisses ist natürlich nagios

chown nagios.nagios /usr/local/nagios

Da wir über das WEB-Interface externe Kommandos ausführen wollen, muß der WEB-Server Zugriffsrechte haben. Hierfür erstellen wir eine Benutzergruppe, deren Mitglieder der Benutzer des WEB-Servers und der Benutzer des Nagios sind.

o        Feststellen, unter welchem Benutzer der WEB-Server (Apache) läuft

grep "^User" /etc/apache2/apache2.conf

(bei debian www-data)

o        Die neue Benutzergruppe nennen wir nagcmd

groupadd nagcmd

o        Nun machen wir die Benutzer nagios und www-data zu Mitgliedern der Gruppe nagcmd

usermod -G nagcmd www-data

usermod -G nagcmd nagios

Kommen wir nun zum eigentlich Teil, dem Kompilieren. Zuvor muss man jedoch Variablen konfigurieren und ein Makefile erstellen. Dies geschieht durch den Aufruf von ./configure.

Hier können folgende Parameter mit übergeben werde:

--prefix=prefix für das Verzeichnis wo Nagios installiert werden soll. Per default ist /usr/local/nagios eingestellt, also brauchen wir diesen Parameter nicht

--with-cgiurl=cgiurl ist das Verzeichnis in dem der WEB-Server die cgi-Dateien findet. Per default ist /nagios/cgi-bin eingestellt

(ACHTUNG ! am Ende darf kein slash (/) stehen)

--with-htmurl=htmurl steht für die URL über die man Nagios erreichen soll. Per default ist /nagios/ eingestellt

--with-nagios-user=someuser steht für den Benutzer unter dem der Nagios-Dienst laufen soll. Per default wird nagios verwendet

--with-nagios-group=somegroup steht für die Benutzergruppe die Zugriff auf die Nagios-Dateien bekommen soll. Per default wird nagios verwendet

--with-command-group=cmdgroup cmdgroup steht für die Benutzergruppe unter der der WEB-Server läuft.. Per default wir hier nagios verwendet, aber wir haben ja eine neue Gruppe erstellt in der sowohl der WEB-Server als auch Nagios Mitglieder sind. Also benötigen wir hier den Parameter

--with-command-group=nagcmd

Wir führen also in unserem Verzeichnis /usr/src/nagios-2.3.1 folgenden Befehl aus

./configure --prefix=/usr/local/nagios \

--with-cgiurl=/nagios/cgi-bin \

--with-htmurl=/nagios/ \

--with-htmurl=/nagios/ \

--with-nagios-user=nagios \

--with-nagios-group=nagios \

--with-command-group=nagcmd

Da wir jedoch meist den Default nutzen, reicht auch ein

./configure --with-command-group=nagcmd

 

Ist die Konfiguration fehlerfrei erfolgt, können wir nurn die Binaries und CGIs kompilieren

Hier reicht ein einfaches

make all

Um die kompilierten Dateien und HTML-Files zu installieren, folgt ein

make install

Und natürlich wollen wir auch ein init-script haben, mit dem wir Nagios starten und stoppen können

make install-init

Mit der Anweisung

make install-commandmode

erstellen wir das command-file und setzen die entsprechenden Zugriffsrechte für das Verzeichnis

Jetzt fehlt nur noch das Konfigurationsverzeichnis und einige Beispieldateien

make install-config

Im Verzeichnis /usr/local/nagios sind jetzt 5 Unterverzeichnisse:

·         bin/ –> Das Programm

·         etc/ –> Konfigurationsdateien

·         sbin/ –> CGIs

·         share/ –> HTML files

·         var/ –> Log files, Status files

Plugins installieren

Soweit zur Installation von Nagios, jetzt brauchen wir erst mal die Plugins von Nagios. Die Plugins laden wir wieder aus dem Internet und legen sie ins Verzeichnis /usr/src und packen sie dort mit

tar xvzf nagios-plugins-1.4.3.tar.gz

aus.Wir wechseln in das neu erstellte Verzeichnis /usr/src/nagios-plugins-1.4.3 und führen dort zuerst wieder die Konfiguration durch.

./configure

Ist die Konfiguration ordentlich ausgeführt (man beachte die Meldungen mit WARNING), so können wir die Plugins kompilieren.

make

und anschließend installieren

make install

Die Plugins befinden sich anschließend im Verzeichnis /usr/local/nagios/libexec/.

Konfiguration

Apache2 für Nagios konfigurieren

Im folgenden müssen wir den WEB-Server noch etwas konfigurieren.

Im Verzeichnis /etc/apache2/ gibt es zwei Unterverzeichnisse:

sites-available/ und sites-enabled/

Im Verzeichnis /etc/apache2/sites-available/ befinden sich die Konfigurationen aller verfügbaren Webseiten des Apache2. Im Verzeichnis /etc/apache2/sites-enabled/ werden für aktive Webseiten Links auf das Verzeichnis /etc/apache2/sites-available/ angelegt.

Erstellen wir also für Nagios eine neue Konfigurationsdatei

touch /etc/apache2/sites-available/nagios

Standardmäßig darf man keine CDI-Scripte in der DocumentRoot einer Webseite ausführen. Für CGI-Scripte gibt es dafür außerhalb des Verzeichnisses der Webseite ein seperates Verzeichnis namens cgi-bin, welches unter der ServerRoot liegt.

Unsere CGI-Scripte für Nagios liegen jedoch im Verzeichnis /usr/local/nagios/sbin/ und werden aufgerufen mit http://localhost/nagios/cgi-bin/CGI-SCRIPT

Leiten wir also den Aufruf eines CGI-Sriptes unter Nagios um, indem wir in die erstellte Datei /etc/apache2/sites-available/nagios folgende Zeile Einfügen

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

Da unser Verzeichnis mit den HTML-Dateien für Nagios außerhalb des DocumentRoot liegt, müssen wir dem WEB-Server noch sagen, das er bei einem Aufruf von http://localhost/nagios das Verzeichnis /usr/local/nagios/share/ heranziehen soll. Dies erreichen wir durch den folgenden Eintrag in die Datei /etc/apache2/sites-available/nagios

Alias /nagios "/usr/local/nagios/share"

Der Apache2 ist soweit vorbereitet, allerdings noch nicht aktiviert. Wir müssen noch die Konfigurationsdatei /etc/apache2/sites-available/nagios aktivieren indem wir im Verzeichnis /etc/apache2/sites-enabled einen Link erzeugen

ln –s /etc/apache2/sites-available/nagios /etc/apache2/sites-enabled/001-nagios

Wenn wir jetzt den WEB-Server neu starten, sollten wir mit einem Browser folgendes Bild sehen wenn wir http://localhost/nagios aufrufen. Wie man feststellen kann, gibt es bislang keine Zugriffsbeschränkung. Das nehmen wir dann später in Angriff, wir wollen ja erst einmal ein Erfolgserlebnis J

 

 

 

Nagios konfigurieren

Die WEB-Darstellung funktioniert schon mal, jetzt kommt noch die Konfiguration.

Fangen wir damit an, das man eigentlich Konfigurationsdateien im Verzeichnis /etc/ sucht, also erstellen wir (vorerst der Schönheit halber) einen Link

ln –s /usr/local/nagios/etc /etc/nagios

Bei der Installation haben wir zwar Beispielkonfigurationen erstellt, die wollen wir an dieser Stelle größtenteils ignorieren und sichern sie in ein Verzeichnis

cd /etc/nagios

mkdir samples

mv *.sample samples

Die Hauptkonfigurationsdatei wird meist nagios.cfg genannt. Nehmen wir uns also die Beispieldatei nagios.cfg-sample als Vorlage.

cp /etc/nagios/samples/nagios.cfg-sample /etc/nagios/nagios.cfg

Zudem nutzen wir einige weitere Beispieldateien

cp /etc/nagios/samples/resource.cfg-sample /etc/nagios/resource.cfg

cp /etc/nagios/samples/checkcommands.cfg-sample /etc/nagios/checkcommands.cfg

cp /etc/nagios/samples/misccommands.cfg-sample /etc/nagios/misccommands.cfg

cp /etc/nagios/samples/cgi.cfg-sample /etc/nagios/cgi.cfg

Wir arbeiten derzeit noch ohne Authentifizierung und müssen somit Nagios davon in Kenntnis setzen. Hierzu ändern wir in der Datei /etc/nagios/cgi.cfg folgende Zeile

use_authentication=1

in

use_authentication=0

Die Authentifizierung zu deaktivieren ist sicher keine gute Idee und sollte lediglich in einer reinen Testumgebung gemacht werden !!

Jetzt bearbeiten wir noch die Datei /etc/nagios/nagios.cfg ein wenig

Folgende Zeile muss auskommentiert oder entfernt werden

cfg_file=/usr/local/nagios/etc/minimal.cfg

Dann finden wir in der Datei noch Beispiele von Konfigurationsanweisungen die jedoch auskommentiert sind. Folgende Anweisungen werden müssen wir, durch Entfernung des Hash (#), aktivieren

cfg_file=/usr/local/nagios/etc/contactgroups.cfg

cfg_file=/usr/local/nagios/etc/contacts.cfg

cfg_file=/usr/local/nagios/etc/hostgroups.cfg

cfg_file=/usr/local/nagios/etc/hosts.cfg

cfg_file=/usr/local/nagios/etc/services.cfg

cfg_file=/usr/local/nagios/etc/timeperiods.cfg

 

Da es diese Dateien allerdings noch nicht gibt, werden wir sie in einer Minimalausführung kurz erstellen.

/usr/local/nagios/etc/contactgroups.cfg

define contactgroup{

contactgroup_name Administratoren

alias Alle Netzwerk Administratoren

members markus

}

 

/usr/local/nagios/etc/contacts.cfg

define contact{

contact_name markus

alias Markus Peters

service_notification_period 24x7

host_notification_period 24x7

service_notification_options w,u,c,r

host_notification_options d,u,r

service_notification_commands notify-by-email

host_notification_commands host-notify-by-email

email mp@localhost

}

/usr/local/nagios/etc/hostgroups.cfg

define hostgroup{

hostgroup_name Alle

alias Alle IP-Geräte

members TestHost

}

 

/usr/local/nagios/etc/hosts.cfg

define host{

host_name TestHost

alias Testrechner

address 192.168.81.2

check_command check-host-alive

max_check_attempts 1

process_perf_data 0

retain_nonstatus_information 0

contact_groups Administratoren

notification_interval 30

notification_period 24x7

notification_options d,u,r

}

 

/usr/local/nagios/etc/services.cfg

define service{

host_name TestHost

service_description Host Alive

check_command check-host-alive

max_check_attempts 3

normal_check_interval 1

retry_check_interval 1

check_period 24x7

notification_interval 20

notification_period 24x7

notification_options w,c,u,r

contact_groups Administratoren

}

/usr/local/nagios/etc/timeperiods.cfg

define timeperiod{

timeperiod_name 24x7

alias 24 Stunden

sunday 00:00-24:00

monday 00:00-24:00

tuesday 00:00-24:00

wednesday 00:00-24:00

thursday 00:00-24:00

friday 00:00-24:00

saturday 00:00-24:00

}

Wenn wir jetzt den Nagios-Serverdienst mit

/etc/init.d/nagios start

starten, sollten wir auf der WEB-Seite auf Hosts gehen können und (sofern der eingerichtete TestHost mit der IP-Adresse erreichbar ist) folgendes Bild sehen

Und damit Nagios nach einem Neustart direkt mitgestartet wird, aktivieren wir das Startscript im entsprechenden Runlevel (für Runlevel 2 mit S91apache2).

ln -s ../init.d/nagios /etc/rc2.d/S90nagios

Erweitert

Zugriff auf Nagios absichern

Zuerst müssen wir Nagios mitteilen, das wir jetzt mit Authentifizierung arbeiten wollen. Hierfür ändern wir die Datei /etc/nagios/cgi.cfg

aktivieren der Authentifizierung

use_authentication=1

Zuweisen von Berechtigungen

In der Konfigurationsdatei /etc/nagios/contacts.cfg haben wir den Benutzer markus als Kontaktperson eingetragen, diesen nutzen wir jetzt als Nagios-Administrator, der alles darf. Die genauen Bedeutungen der einzelnen findet man in der Dokumentation.

authorized_for_system_information=markus

authorized_for_configuration_information=markus

authorized_for_system_commands=markus

authorized_for_all_services=markus

authorized_for_all_hosts=markus

Kommen wir wieder zum Apache und erweitern unsere Nagios-Konfigurationsdatei /etc/apache2/sites-available/nagios wie folgt

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

<Directory /usr/local/nagios/sbin/>

    Options None

    AllowOverride AuthConfig

</Directory>

Alias /nagios "/usr/local/nagios/share"

<Directory /usr/local/nagios/share/>

    Options None

    AllowOverride AuthConfig

</Directory>

Jetzt benötigen wir noch eine Datei mit dem Namen .htaccess im Nagios-WEB-Verzeichnis /usr/local/nagios/share/ mit folgendem Inhalt:

AuthName "Nagios Access"

AuthType Basic

AuthUserFile /usr/local/nagios/etc/htpasswd.users

require valid-user

Und damit das CGI-Verzeichnis /usr/local/nagios/sbin/ ebenfalls über die Anmeldung der Benutzer in Kenntnis gesetzt wird, erstellen wir dort einen Link auf die gleiche Datei

ln -s /usr/local/nagios/share/.htaccess /usr/local/nagios/sbin/.htaccess

Fehlt noch die Passwortdatei die wir bei AuthUserFile angegeben haben. Diese erstellen wir mit dem Programm htpasswd2

htpasswd2 –c /usr/local/nagios/etc/htpasswd.users markus

Ein Neustart von Apache & Nagios und schon sollte beim Zugriff auf die Nagios-WEB-Seite eine Passwortabfrage erscheinen.

 

Anbindung an MySQL

Installieren der NDO Utils


In der "alten" Version (1.x) von Nagios war es möglich, die Daten direkt in eine Datenbak zu schreiben, was jedoch nicht empfohlen wurde, da es sich als Fehlerhaft herausstellte. In der Version 2.x fehlt diese Anbingung gänzlich, aber auch hierfür hat sich etwas gefunden. Die Lösung heißt NDO Utils.

Für die Anbindung an die MySQL-Datenbank benötigen wir die Entwicklerpackete von MySQL und, da wir den lokalen MySQL-Server verwenden werden, den MySQL Server & Client. Diese müssen also noch mit

apt-get install mysql-server-4.1 libmysqlclient14-dev

installiert werden.

Jetzt brauchen wir wieder die Software als Tarball (ndoutils-1.3.1.tar.gz) die wir im Verzeichnis /usr/src/ ablegen. Hier wird es mit 

tar xvzf ndoutils-1.3.1.tar.gz 

ausgepackt. Jetzt wechseln wir in das neu erstellte Verzeichnis /usr/src/ndoutils-1.3.1/ und führen dort ein ./configure und anschließend ein einfaches make aus.

Wichtig ist, das die Development-Files für MySQL installiert sind. Ist das nicht der Fall, kommt es zu einer Fehlermeldung.

Hat alles funktioniert, so können wir unsere kompilierte Software installieren, was leider noch von Hand geschehen muss.

Im Verzeichnis /usr/src/ndoutils-1.3.1/src/ finden wir eine Datei mit der Bezeichnung ndo2db-2x. Dabei handelt es sich um das kompilierte Binary für Nagios 2.x. Dieses kopieren wir in das bin-Verzeichnis von Nagios und benenn es dabei gleich um.

cp /usr/src/ndoutils-1.3.1/src/ndo2db-2x /usr/local/nagios/bin/ndo2db

Dann haben wir noch eine Objekt-Datei ndomod-2x.o welche von Nagios geladen werden muss. Hierfür legen wir im Nagios-Verzeichnis ein eigenes Verzeichnis an

mkdir /usr/local/nagios/ndo

und kopieren die Datei als ndomod.o dorthin

cp /usr/src/ndoutils-1.3.1/src/ndomod-2x.o /usr/local/nagios/ndo/ndomod.o

Die passenden Konfigurationsdateien kopieren wir aus dem Verzeichnis /usr/src/ndoutils-1.3.1/config/ in das etc-Verzeichnis von Nagios.

cp /usr/src/ndoutils-1.3.1/config/ndo2db.cfg /usr/local/nagios/etc/
cp /usr/src/ndoutils-1.3.1/config/ndomod.cfg /usr/local/nagios/etc/

Anlegen der MySQL-Datenbank


Um die Daten in einer MySQL-Datenbankabzulegen benötigen wir auch eine Datenbank die wir noch erstellen müssen. Hierzu gibt es eine leere Vorlage im Verzeichnis /usr/src/ndoutils-1.3.1/db/ welche wir gleich einlesen werden.
Aber bevor wir eine Datenbank mit leben füllen, müssen wir sie erstellen.

mysqladmin create nagios

erzeugt eine leere Datenbank Namens nagios.

mysql -u root -p nagios < /usr/src/ndoutils-1.3.1/db/mysql.sql

erstellt die einzelnen Tabellen in der neuen Datenbank. Mit diesem Befehl melden wir uns als root
an den MySQL-Server an und schreiben die vorhanden leere Vorlage in die Datenbank. Der Parameter -p
besagt, das nach einem Passwort gefragt werden soll. Nach der Installation ist jedoch noch kein Passwort für den Benutzer root im MySQL-Server hinterlegt, also drücken wir bei der Passwortabfrage einfach ENTER.

Da die NDO Utils aber nicht als Benutzer root auf die Datenbank zugreifen soll, benötigen wir einen neuen Benutzer, den wir, wie sollte es anders sein, nagios taufen und das Passwort nagios geben.

mysql -u root -p

mysql  
GRANT USAGE ON * . * TO 'nagios'@'localhost' IDENTIFIED BY 'nagios'
                    WITH MAX_QUERIES_PER_HOUR 0
                    MAX_CONNECTIONS_PER_HOUR 0
                    MAX_UPDATES_PER_HOUR 0 ;

Jetzt erfolgt noch die Rechtevergabe für unseren neuen Datenbanknutzer

mysql>  GRANT SELECT , INSERT , UPDATE , DELETE ON `nagios`.* TO 'nagios'@'localhost';


Und damit MySQL die Änderungen auch zur Kenntnis nimmt, soll er die Einstellungen neu einlesen.

mysql>  FLUSH PRIVILEGES;

mysqlexit;

So, die Datenbank ist fertig, die Daten können kommen !

NDO2DB konfigurieren & starten

Die Konfigurationsdatei /etc/nagios/ndo2db.cfg bedarf eigentlich kaum einer Anderung. Es gibt nur eine Stelle, die geändert werden muss, das Prefix für die Datenbank. Die Vorlage, aus der wir die Datenbank erstellt haben, hat Tabellen erstellt mit Namen wie ndo_objects, es steht immer ein ndo_ vorweg. Dies müssen wir in der Konfigurationsdatei angeben.

Der Abschintt

# DATABASE TABLE PREFIX
# Determines the prefix (if any) that should be prepended to table names.

db_prefix=
#db_prefix=ndo_

wird geändert in

# DATABASE TABLE PREFIX
# Determines the prefix (if any) that should be prepended to table names.

#db_prefix=
db_prefix=ndo_

Der Name der Datenbank stimmte ja überein (nagios), aber der Benutzer und das Passwort sind noch falsch:

# DATABASE USERNAME/PASSWORD
# This is the username/password that will be used to authenticate to the DB.
# The user needs at least SELECT, INSERT, UPDATE, and DELETE privileges on
# the database.

db_user=ndouser
db_pass=ndopassword

wird zu

# DATABASE USERNAME/PASSWORD
# This is the username/password that will be used to authenticate to the DB.
# The user needs at least SELECT, INSERT, UPDATE, and DELETE privileges on
# the database.

db_user=nagios
db_pass=nagios


Das war es auch schon an Konfiguration, zumindest für uns reicht es ;-) und wir können NDO2DB starten.
Beim starten ist es überaus wichtig, das NDO2DB unter dem gleichen Benutzer wie Nagios läuft, also starten wir als Benutzer nagios ndo2db.

nagios@nagios:~$/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg

Es sollte nun ein Prozess ndo2db auftauchen und ein Socket /usr/local/nagios/var/ndo.sock sollte angelegt worden sein.

NDOMOD in Nagios einbinden

Jetzt haben wir einen Prozeß, der alle Daten, die in einem Socket auflaufen, in eine Datenbank schreibt, aber es kommen keine Daten. Logisch, wir müssen Nagios ja auch noch sagen, das er, alles was er so hat, zusätzlich in dieses Socket schreiben soll.

Dazu gibt es sog. broker_module Einträge in der Nagios-Konfigurationsdatei.

Tragen wir also folgende Zeile in die Datei /etc/nagios/nagios.cfg ein:

broker_module=/usr/local/nagios/ndo/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg

Nach einem kleinen Neustart des Nagios

/etc/init.d/nagios restart

sollte es soweit sein, die Daten sollten in die Datenbank geschrieben werden. Schauen wir doch mal nach:

Melden wir uns als nagios bei MySQL an und öffnen die Datenbank nagios

mysql -u nagios -p nagios

Als Passwort hatten wir ja nagiospwd festgelegt !

mysql> select name1,name2 from ndo_objects WHERE objecttype_id =2 ;
+----------+------------+
| name1    | name2      |
+----------+------------+
| TestHost | Host Alive |
+----------+------------+
1 row in set (0.00 sec)

Was jetzt noch nicht funktioniert, ist der automatische Start von ndo2db, da muß ich mir noch einer saubere Lösung einfallen lassen ;-)

OK, bevor ich mein Hirn anwerfen konnte, erreichte mich schon eine E-Mail mit dem geändertetn Nagios-init-Script. Danke Howie, funktioniert.

Da im init-Script gawk verwendet wird, müssen wir das noch nachinstallieren.

apt-get install gawk

Und dann können wir das Script /etc/init.d/nagios wie folgt modifizieren:


prefix=/opt/nagios
exec_prefix=${prefix}
NagiosBin=${exec_prefix}/bin/nagios
NagiosCfgFile=${prefix}/etc/nagios.cfg
NagiosStatusFile=${prefix}/var/status.dat
NagiosTempFile=${prefix}/var/nagios.tmp
NagiosRetentionFile=${prefix}/var/retention.dat
NagiosCommandFile=${prefix}/var/rw/nagios.cmd
NagiosVarDir=${prefix}/var
NagiosRunFile=${prefix}/var/nagios.lock
NagiosLockDir=/var/lock/subsys
NagiosLockFile=nagios
NagiosCGIDir=${exec_prefix}/sbin
NagiosUser=nagios
NagiosGroup=nagios
NDOBin=${prefix}/bin/ndo2db
NDOCfgFile=${prefix}/etc/ndo2db.cfg
NDOPidFile=${prefix}/var/ndo2db.pid



# Check that nagios exists.
if [ ! -f $NagiosBin ]; then
    echo "Executable file $NagiosBin not foundExiting."
    exit 1
fi

# Check that nagios.cfg exists.
if [ ! -f $NagiosCfgFile ]; then
    echo "Configuration file $NagiosCfgFile not found.  Exiting."
    exit 1
fi

# Check that ndo2db exists.
if [ ! -f $NDOBin ]; then
    echo "Executable file $NDOBin not found.  Exiting."
    exit 1
fi

# Check that ndo2db.cfg exists.
if [ ! -f $NDOCfgFile ]; then
    echo "Configuration file $NDOCfgFile not found.  Exiting."
    exit 1
fi


# See how we were called.
case "$1" in

        start)
               
echo "Starting nagios database connection"
                su - $NagiosUser -c "$NDOBin -c $NDOCfgFile"
                if [ $? -ne 0 ]; then
                        echo "Error starting database connection"
                        exit 1
                else
                        echo `ps -ef | grep ndo2db | grep -v 'grep' | gawk '{ print $2 }' ` > $NDOPidFile
                fi


                echo "Starting network monitor: nagios"
                $NagiosBin -v $NagiosCfgFile > /dev/null 2>&1;
                if [ $? -eq 0 ]; then
                        su - $NagiosUser -c "touch $NagiosVarDir/nagios.log $NagiosRetentionFile"
                        rm -f $NagiosCommandFile
                        touch $NagiosRunFile
                        chown $NagiosUser:$NagiosGroup $NagiosRunFile
                        $NagiosBin -d $NagiosCfgFile
                        if [ -d $NagiosLockDir ]; then touch $NagiosLockDir/$NagiosLockFile; fi
                        #sleep 1
                        #status_nagios nagios
                        exit 0
                else
                        echo "CONFIG ERROR!  Start aborted.  Check your Nagios configuration."
                        exit 1
                fi
                ;;

        stop)
                echo "Stopping network monitor: nagios"
                killproc_nagios nagios

                # now we have to wait for nagios to exit and remove its
                # own NagiosRunFile, otherwise a following "start" could
                # happen, and then the exiting nagios will remove the
                # new NagiosRunFile, allowing multiple nagios daemons
                # to (sooner or later) run - John Sellens
                echo -n 'Waiting for nagios to exit .'
                for i in 1 2 3 4 5 6 7 8 9 10 ; do
                    if status_nagios > /dev/null; then
                        echo -n ' .'
                        sleep 1
                    else
                        break
                    fi
                done
                if status_nagios > /dev/null; then
                    echo ''
                    echo 'Warning - running nagios did not exit in time'
                else
                    echo ' done.'
                fi

                rm -f $NagiosStatusFile $NagiosTempFile $NagiosRunFile $NagiosLockDir/$NagiosLockFile $NagiosCommandFile

               
echo "Stopping nagios database connection"
                if test ! -f $NDOPidFile; then
                        echo "No lock file found in $NDOPidFile"
                        return 1
                fi
                NDOPID=`head -n 1 $NDOPidFile`
                kill $2 $NDOPID
                rm -f $NDOPidFile

                ;;

        status)
                status_nagios nagios
                ;;

        restart)
                printf "Running configuration check..."
                $NagiosBin -v $NagiosCfgFile > /dev/null 2>&1;
                if [ $? -eq 0 ]; then
                        echo "done"
                        $0 stop
                        sleep 5
                        $0 start
                else
                        #$NagiosBin -v $NagiosCfgFile
                        echo " FAILED!  Restart aborted.  Check your Nagios configuration."
                        exit 1
                fi
                ;;

        reload|force-reload)
                printf "Running configuration check..."
                $NagiosBin -v $NagiosCfgFile > /dev/null 2>&1;
                if [ $? -eq 0 ]; then
                        echo "done"
                        if test ! -f $NagiosRunFile; then
                                $0 start
                        else
                                NagiosPID=`head -n 1 $NagiosRunFile`
                                if status_nagios > /dev/null; then
                                        printf "Reloading nagios configuration..."
                                        killproc_nagios nagios -HUP
                                        echo "done"
                                else
                                        $0 stop
                                        sleep 5
                                        $0 start
                                fi
                        fi
                else
                        #$NagiosBin -v $NagiosCfgFile
                        echo " FAILED!  Reload aborted.  Check your Nagios configuration."
                        exit 1
                fi
                ;;

        *)
                echo "Usage: nagios {start|stop|restart|reload|force-reload|status}"
                exit 1
                ;;

esac

# End of this script


Und damit das init-Script richtig funktioniert und man eine Kontrolle darüber hat, sollte man jetzt einmal rebooten.


Installation von NagVis

Bislang haben wir nur einen einzelnen Host zum testen in unser Nagios eingebunden, aber wenn will man ein größeres Netzwerk überwachen, so kann es doch schnell etwas unübersichtlich werden. Hier gibt es mal wieder eine kleine Erweiterung, mit der es möglich ist, eigene Bildchen zu malen und darauf dann die Hosts zu positionieren. Ein Bild sagt mehr als tausend Worte, schaut euch die Sreenshoots an www.nagvis.org.

NagVis arbeitet mit php4 und greift auf die mysql-Datenbank zu, so das wir noch ein zusätzliches Paket installieren müssen

apt-get install php4-mysql

Eigentlich ist die Installation recht einfach, wir laden uns das Tarball aus dem Internet und deponieren es, wie alle anderen Sourcen, wieder im Verzeichnis /usr/src/.

Da wir aber nichts kompilieren müssen, können wir es direkt ins richtige Zielverzeichnis entpacken

tar xvzf nagvis_0_9b2.tgz -C /usr/local/nagios/share/


Und da sich die Dateien im Nagios-Verzeichnis befinden, machen wir nagios auch zum Besitzer und zur Gruppe

chown -R nagios.nagios /usr/local/nagios/share/nagvis

Der WEB-Server (www-data) benötigt einige Berechtigungen für NagVis, also ordnen  wir den Verzeichnissen

chgrp -R www-data /usr/local/nagios/share/nagvis/etc/maps/
chgrp -R www-data /usr/local/nagios/share/nagvis/maps/

und der Konfigurationsdatei

chgrp -R www-data /usr/local/nagios/share/nagvis/etc/config.ini.php

die Gruppe www-data zu .

Jetzt ist es noch wichtig, das Nagios externe Kommandos zulässt. Das aktivieren wir in der Datei /usr/local/nagios/etc/nagios.cfg

check_external_commands=1


NagVis benötigt zudem Zugriff auf alle Daten von Nagios, also richten wir einen eigenen Benutzer ein, der alles darf.

authorized_for_system_information=markus,nagvis
authorized_for_configuration_information=*
authorized_for_all_services=*
authorized_for_all_hosts=*
authorized_for_all_service_commands=markus,nagvis
authorized_for_all_host_commands=markus,nagvis


Folgende Konfigurationen könnten wir jetzt schon über die WEB-Oberfläche ändern

http://localhost/nagios/nagvis/config.php


Mit der rechten Maustatste klicken und dann NagVis config auswählen.

Oder aber wie bisher über die Konsole und die Datei

/usr/local/nagios/share/nagvis/etc/config.ini.php

editieren und die Einstellungen überprüfen.

Geändert werden muss auf jeden Fall das Passwort für die mysql-Datenbank nagios

; password for NDO-db
dbpass="nagios"

; with this user, the script reads the CGIs
cgiuser="nagvis"


Das war es auch schon. Die Installation von NagVis ist erledigt :-)