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
Installierte Packete aus der Distribubion
Apache2 für Nagios konfigurieren
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.
· AMD Athlon XP 3000+ 2.1 GHz
· 768 MB Arbeitsspeicher
· 80GB IDE-Festplatten
· Ethernet-Karte 10/100/ Mbit
· 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)
· Standard-Installation mit der Bootoption <linux26>
· Automatische partitionierung als Mehrbenutzer Arbeitsplatzrechner
· Installation des debian-Grundsystems
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
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
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/.
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
![]()
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
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.
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/
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;
mysql> exit;
So, die Datenbank ist
fertig, die Daten können kommen !
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.
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 found. Exiting."
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.
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 :-)