Home   Profil   Fun
#84 Linux  09.11.2009

Nagios 3 mit Failover auf SLES 11 mit NConf, NRPE, NSCA, PNP4Nagios und NagVis


In diesem Tutorial wird Nagios 3 auf einem VMware-Gast mit SLES 11 installiert.
Folgende Erweiterungen werden ebenfalls eingerichtet:
NConf als grafisches Konfigurations-Frontend
NRPE zum überwachen nichtöffentlicher Parameter
NSCA für passive Checks
PNP4Nagios für rrdtool-Grafiken von Nagios-Performance-Daten
NagVis zur grafischen Darstellung des Netzwerkes

Anschließend wird der VMware-Gast dupliziert und so eingerichtet, dass er ein automatisches Failover macht für den Fall, dass der Haupt-Nagiosserver ausfallen sollte.
Überall wo Passwörter zu vergeben sind steht PASSWORT, diese sollten natürlich für jede Anwendung individuell gesetzt werden.


VMware SLES 11
DSH
Physischer Host auf dem die VMs laufen
Installation Nagios 3 Core
Installation Nagios-Plugins
Setup des Apache-Vhosts
NConf
Logos installieren
Skin für Nagios 3 installieren (optional)
NagVis
PNP4Nagios
NRPE
NSCA
Beispiel eines Checks per snmp
Überwachung von Logdateien
Notifications
Allgemeine Tips
Failover-Setup
Debugging



VMware SLES 11
Über http://www.vmware.com/products/player/ den VMware-Player downloaden. Es handelt sich um eine Datei mit der Endung .bundle.

Dies ausführbar machen und anschließend ausführen
chmod u+x ...bundle
Falls noch nicht geschehen das sles11-Iso-Image von Novell herunterladen und mit dem VMware-Player eine neue VM erstellen. Am besten mit X/Gnome, da sonst die VMware-Tools nicht installiert werden können. Nach der Installation in den Optionen für die VM, im Netzwerk auf Bridged (directly connect to the physical network) stellen. Innerhalb des VM die gewünschte IP, Defaultroute und den Nameserver eintragen. Anschließend ist der Gast wie ein eigenständiger Server im Netzwerk sichtbar.

Dann in Yast in der VM ein neues Repository hinzufügen:
http://packages.vmware.com/tools/esx/4.0/sles11/x86_64
und das Paket vmware-tools über Yast installieren.



DSH
Um Änderungen auf mehreren zu überwachenden Servern gleichzeitig zu machen verwendet man optimalerweise Puppet oder CFengine. Eine einfachere aber auch begrenztere Variante ist die dancers shell DSH:
cd /home/test/build
wget http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz
tar xfvp libdshconfig-0.20.9.tar.gz
cd libdshconfig-0.20.9
./configure
make
make install

cd /home/test/build
wget http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz
tar xfvp dsh-0.25.9.tar.gz
cd dsh-0.25.9
./configure
make
make install
ldconfig

vi /etc/profile.local
export MANPATH=$MANPATH:/usr/local/share/man
. /etc/profile.local

vi /usr/local/etc/dsh.conf
verbose=0
von rsh auf ssh ändern.

Dann die Liste der Server-IPaddressen eintragen.
vi /usr/local/etc/machines.list
root@IP1
root@IP2
...

Ausführen von 'uname -a' auf einem einzelnen Host:
dsh -m root@192.168.1.34 -- 'uname -a'

Ausführen von 'uname -a' auf allen Hosts in der machines.list:
dsh -a -M -- 'uname -a'



Physischer Host auf dem die VMs laufen
Beim Monitoring ist eine korrekt eingerichtete Systemzeit unabdingbar. Dies muss auf dem physischen Host gemacht werden. Entweder den NTP-Client über Yast einrichten, was leider neue offene Ports mit sich bringt oder einfach nur ntpdate verwenden.



Installation Nagios 3 Core
Über Yast apache2, gcc-c++, apache2-mod_php5, gd-devel, libpng-devel, libjpeg-devel installieren. (Wenn gd-devel, libpng-devel und libjpeg-devel nicht installiert werden, kann man keine Map und keine Trends sehen.)
Generell die Firewall komplett ausschalten.
su -
mkdir /home/test/build
cd /home/test/build
useradd nagios -p 'nagios' -m
groupadd nagios
usermod -G nagios nagios
groupadd nagcmd
usermod -G nagcmd nagios
usermod -G nagcmd wwwrun

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.0.tar.gz
tar xfvp nagios-3.2.0.tar.gz

cd nagios-3.2.0
./configure --prefix=/opt/nagios --enable-event-broker=yes --with-command-group=nagcmd
make all

make install
make install-init
make install-config
make install-commandmode

Für den Default-Kontakt die eigenen Email-Adresse eintragen:
sed -i -e 's/^.*email.*$/        email        YOUREMAIL@DOMAIN/' /opt/nagios/etc/objects/contacts.cfg

make install-webconf
(Es wird eine /etc/apache2/conf.d/nagios.conf angelegt.)

htpasswd2 -b -c /opt/nagios/etc/htpasswd.users nagiosadmin 'PASSWORT'
/etc/init.d/apache2 restart

vi /etc/hosts
127.0.0.1       localhost nagios.localnet nagios
#127.0.0.2

Die Rechte für das external command file setzen, sofern sie nicht bereits korrekt sind.
chown nagios:nagcmd /opt/nagios/var/rw
chmod u+rwx /opt/nagios/var/rw
chmod g+rwx /opt/nagios/var/rw
chmod g+s /opt/nagios/var/rw

Ein Backup der Original-Konfiguration erstellen
cp -rp /opt/nagios/etc /opt/nagios/etc_orig

Nagios soll beim Serverstart automatisch gestartet werden.
insserv nagios



Installation Nagios-Plugins
cd /home/test/build
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.14.tar.gz
tar xfvp nagios-plugins-1.4.14.tar.gz
cd nagios-plugins-1.4.14
./configure --prefix=/opt/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-openssl=/usr/include/openssl
(Falls später Plugins 'fehlen' oder Features von Plugins fehlen, hier im configure nachschauen, ob und wie sie gebaut wurden.)
make
make install

Jetzt kann man einmal prüfen, ob die Konfiguration von Nagios Fehler oder Warnungen enthält.
/opt/nagios/bin/nagios -v /opt/nagios/etc/nagios.cfg

Switch/Router kann man über check_snmp monitoren (wird nur gebaut wenn das Pakete net-snmp-devel vorhanden ist)

Falls man Windowsserver prüfen möchte geht das mit dem Plugin check_nt(Nagioshost) und NSClient++(Remotehost).



Setup des Apache-Vhosts
cd /etc/apache2/vhosts.d/
cp vhost.template nagios.conf
vi nagios.conf
<VirtualHost *:80>
    ServerAdmin YOUREMAIL@DOMAIN
    ServerName nagios.localnet
    DocumentRoot /srv/www/vhosts/nagios.localnet/htdocs

    ErrorLog /var/log/apache2/nagios.localnet-error_log
    CustomLog /var/log/apache2/nagios.localnet-access_log combined

    HostnameLookups Off
    UseCanonicalName Off
    ServerSignature On

    <IfModule mod_userdir.c>
        UserDir public_html
        Include /etc/apache2/mod_userdir.conf
    </IfModule>

    <Directory "/srv/www/vhosts/nagios.localnet/htdocs">
        Options -Indexes -FollowSymLinks
        AllowOverride AuthConfig
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

mkdir -p /srv/www/vhosts/nagios.localnet/htdocs

/etc/init.d/nagios start
/etc/init.d/apache2 restart

Jetzt kann man bereits Nagios aufrufen und die Default-Checks für localhost anschauen.
http://nagios.localnet/nagios/

Login mit:
nagiosadmin
PASSWORT



NConf
Über Yast php5-mysql, perl-DBD-mysql installieren.
/etc/init.d/apache2 restart

vi /etc/php5/apache2/php.ini
date.timezone = Europe/Berlin
short_open_tag = On
register_globals = Off
magic_quotes_gpc = Off 

cd /srv/www/vhosts/nagios.localnet/htdocs/
wget http://downloads.sourceforge.net/project/nconf/nconf/1.2.5-0/nconf-1.2.5-0.tgz
tar xfv nconf-1.2.5-0.tgz
rm nconf-1.2.5-0.tgz
cd nconf
chown wwwrun ./config ./output/ ./static_cfg ./temp

/etc/init.d/mysql start
mysqladmin -uroot password 'PASSWORT'
mysql -uroot -p
  create database nconf;
  grant all on nconf.* to nconf@localhost identified by 'PASSWORT';

insserv mysql
http://nagios.localnet/nconf/INSTALL.php
(Daten von grant, siehe oben, keine Authentifizierung)

rm -r INSTALL INSTALL.php UPDATE UPDATE.php 

vi .htaccess
AuthType Basic
AuthName "Welcome to NConf"
AuthUserFile /opt/nagios/etc/htpasswd.users
require valid-user 

vi /etc/apache2/default-server.conf
ServerName nagios.localnet
/etc/init.d/apache2 restart

chown nagios:nagcmd /opt/nagios/var/spool/checkresults

Um neue Konfigurationen von NConf zu aktivieren kann man ein Skript erstellen:
cd /srv/www/vhosts/nagios.localnet/htdocs
vi nconfrun.sh

#!/bin/bash

backupname='etc_'
date=`date +%Y-%m-%d_%H:%M:%S`
backupname=$backupname$date

/etc/init.d/nagios stop

cp -rp /opt/nagios/etc /home/test/backup/$backupname

rm -r /opt/nagios/etc/NagiosConfig.tgz
rm -r /opt/nagios/etc/Default_collector
rm -r /opt/nagios/etc/global

cp /srv/www/vhosts/nagios.localnet/htdocs/nconf/output/NagiosConfig.tgz /opt/nagios/etc
cd /opt/nagios/etc
tar xfvp ./NagiosConfig.tgz

/etc/init.d/nagios restart

chown wwwrun ./nconfrun.sh

Dieses Skript manuell als root von der Shell ausführen, nachdem man mit NConf eine neue Konfiguration exportiert hat.



Logos installieren
Um individuelle Grafiken für Betriebssysteme zu erhalten installieren wir das entsprechende Paket.
cd /srv/www/vhosts/nagios.localnet/htdocs/nconf/img/logos
wget http://www.monitoringexchange.org/attachment/download/Artwork/Image-Packs/Base-Images/imagepak-base.tar.tar
mv imagepak-base.tar.tar ./imagepak-base.tar.gz
gunzip imagepak-base.tar.gz
tar xfv imagepak-base.tar


NConf erstellt nur eine Konfiguration für Nagios, wenn es einen Syntax-Check ohne Fehler ausgeführt hat. Für den Syntax-Check muss es aber das Nagios-Binary ausführen dürfen. Das stellt natürlich ein Sicherheitsrisiko dar. Hier muss man sich eine geeignete Lösung ausdenken. Zum Testen kann man das Binary für alle ausführbar machen, wie gesagt nur zum Testen, sowas nie auf einem Produktionssystem machen!
chmod o+x /opt/nagios/bin/nagios
ln -s /opt/nagios/bin/nagios /srv/www/vhosts/nagios.localnet/htdocs/nconf/bin/nagios
Über
http://nagios.localnet/nconf
nagiosadmin
PASSWORT
kann man nun NConf betreten. Links oben befindet sich der Menüpunkt "Generate Nagios config". Klickt man darauf wird der besagte Syntax-Check ausgeführt und sofern keine Fehler aufgetreten sind folgende Datei erstellt:
/srv/www/vhosts/nagios.localnet/htdocs/nconf/output/NagiosConfig.tgz

Die Original-Konfiguration von Nagios entfernen und die neue von NConf auspacken:
rm -r /opt/nagios/etc/*
cp /opt/nagios/etc_orig/cgi.cfg /opt/nagios/etc
cp /opt/nagios/etc_orig/nagios.cfg /opt/nagios/etc
cp /opt/nagios/etc_orig/htpasswd.users /opt/nagios/etc
cp /opt/nagios/etc_orig/resource.cfg /opt/nagios/etc
(Sicherstellen, dass diese Dateien o+r gesetzt haben)
cp /srv/www/vhosts/nagios.localnet/htdocs/nconf/output/NagiosConfig.tgz /opt/nagios/etc/
cd /opt/nagios/etc
tar xfv NagiosConfig.tgz 

vi /opt/nagios/etc/nagios.cfg
Die folgenden Zeilen hinzufügen:
cfg_dir=/opt/nagios/etc/global
cfg_dir=/opt/nagios/etc/Default_collector
alle andere cfg_dir UND cfg_file Zeilen auskommentieren ! (sodass Nagios nur die von NConf generierten verwendet)

Die Logos, die bereits für NConf installiert wurden kann man auch Nagios zur Verfügung stellen:
cp -rp /srv/www/vhosts/nagios.localnet/htdocs/nconf/img/logos /opt/nagios/share/images/
/etc/init.d/nagios restart



Skin für Nagios 3 installieren (optional)
Wer möchte kann einen alternativen Style für die die Nagios-Oberfläche installieren. Ich persönlich finde aber das Original übersichtlicher, wenn es auch optisch nicht so viel hergibt.

Vautour Style herunterladen
http://www.monitoringexchange.org/cgi-bin/page.cgi?g=Detailed%2F2969.html;d=1
und nach /opt/nagios/share kopieren
cp -rp /opt/nagios/share /opt/nagios/share_orig
cd /opt/nagios/share
unzip vautour_style.zip

Bei mir hat die Breite des linken Frames nicht ganz ausgereicht, daher habe ich in der index.html und index.php die Breite des Sidebar-Frames von 200 auf 210 vergrößert:
<frameset frameborder="0" framespacing="0" cols="210,*">



NagVis
Für NagVis ist SLES SDK 11 erforderlich (für das libmysqlclient-devel-Paket). Dieses muss also von Novell heruntergeladen werden.

Mit Yast libmysqlclient-devel, php5-gd, php5-gettext, php5-mbstring und tcpd-devel installieren.

Zuerst müssen die NDO-Utils von Nagios installiert werden. Die NDO-Utils speichern Nagios-Daten in einer Datenbank. Sie ersetzen jedoch nicht die textbasierte Konfiguration von Nagios, man kann also damit nicht auf Nagios einwirken.

Sollte es bei den nachfolgenden Kommandos zu Problemen kommen müssen eventuell noch verschiedene 32bit-Entwicklungs-Pakete über Yast installiert werden.
cd /home/test/build
wget http://sourceforge.net/projects/nagios/files/ndoutils-1.x/ndoutils-1.4b9/ndoutils-1.4b9.tar.gz/download
tar xfv ndoutils-1.4b9.tar.gz
cd ndoutils-1.4b9
./configure --prefix=/opt/nagios/ndo --with-init-dir=/etc/init.d --enable-mysql
make all
make fullinstall

mysql -uroot -p
create database ndo;
grant all on ndo.* to ndo@localhost identified by 'PASSWORT';
cd ./db
./installdb -uroot -proot -d ndo

cd /opt/nagios/ndo/etc
mv ndo2db.cfg-sample ndo2db.cfg
mv ndomod.cfg-sample ndomod.cfg

In /opt/nagios/etc/nagios.cfg die folgende Zeile einfügen:
broker_module=/opt/nagios/ndo/bin/ndomod.o config_file=/opt/nagios/ndo/etc/ndomod.cfg

chown nagios.nagios /opt/nagios/ndo/bin/*
chmod 0775 /opt/nagios/ndo/bin/*

Ein Init-Skript (/etc/init.d/ndo) wird mit dem Paket mitgeliefert: daemon-init.in. Man kann aber auch das Template in /etc/init.d/ verwenden. Prinzipiell wird NDO wie folgt gestartet:
/opt/nagios/ndo/bin/ndo2db -c /opt/nagios/ndo/etc/ndo2db.cfg

chmod 755 /etc/init.d/ndo
insserv ndo

mkdir /opt/nagios/ndo/var
chown nagios.nagios /opt/nagios/ndo
chown nagios.nagios /opt/nagios/ndo/var

vi /opt/nagios/ndo/etc/ndo2db.cfg
db_name=ndo
db_user=ndo
db_pass=PASSWORT

vi /etc/my.cnf
bind-address = 127.0.0.1
/etc/init.d/mysql restart

/etc/init.d/ndo start

Der Nagios-Daemon muss in den Socket schreiben können:
chown nagios.nagios /opt/nagios/ndo/var/ndo.sock

Immer zuerst NDO starten, danach Nagios.
Ein erfolgreicher Start sieht in /var/log/messages so aus:
ndomod: NDOMOD 1.4b9 (10-27-2009) Copyright (c) 2009 Nagios Core Development Team and Community Contributors
Successfully connected to MySQL database
ndomod: Successfully connected to data sink.  0 queued items to flush.
Event broker module '/opt/nagios/ndo/bin/ndomod.o' initialized successfully.
Finished daemonizing... (New PID=3852)

Jetzt kann man mit der eigentlichen Installation von NagVis weitermachen.
cd /home/test/build
wget http://downloads.sourceforge.net/project/nagvis/NagVis%201.4%20%28stable%29/NagVis-1.4.4/nagvis-1.4.4.tar.gz
tar xfv nagvis-1.4.4.tar.gz
cd nagvis-1.4.4/
chmod +x install.sh
./install.sh -m /opt/nagios/ndo/bin/ndo2db
 Do you want to use backend ndo2db [n]: y

vi /opt/nagios/nagvis/etc/nagvis.ini.php
[paths]
base="/opt/nagios/nagvis/"
htmlbase="/nagvis"
htmlcgi="/nagios/cgi-bin"

[automap]
showinlists=1

[wui]
allowedforconfig=EVERYONE

[backend_ndomy_1]
backendtype="ndomy"
dbhost="localhost"
dbport=3306
dbname="ndo"
dbuser="ndo"
dbpass="PASSWORT"
dbprefix="nagios_"
dbinstancename="default"
maxtimewithoutupdate=180
htmlcgi="/nagios/cgi-bin"

[rotation_demo]
maps="demo,Demo2:demo2"
interval=15

vi /etc/apache2/conf.d/nagios.conf 
Hinzufügen:

Alias /nagios "/opt/nagios/share"
Alias /nagvis "/opt/nagios/nagvis"

<Directory "/opt/nagios/share">
#  SSLRequireSSL
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /opt/nagios/etc/htpasswd.users
   Require valid-user
</Directory>

<Directory "/opt/nagios/nagvis">
#  SSLRequireSSL
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /opt/nagios/etc/htpasswd.users
   Require valid-user
</Directory>

/etc/init.d/apache2 restart
/etc/init.d/nagios restart
/etc/init.d/ndo stop (bzw. den Prozess ndo2db killen sofern man noch kein richtiges Init-Skript hat)
/etc/init.d/ndo start

chown wwwrun /opt/nagios/nagvis/var
chown wwwrun /opt/nagios/nagvis/var/*
chown wwwrun /opt/nagios/nagvis/etc/maps
chown wwwrun /opt/nagios/nagvis/etc/maps/*

NagVis aufrufen mit:
http://nagios.homenet/nagvis/wui/index.php
http://nagios.homenet/nagvis/nagvis/index.php

In /var/log/messages schauen ob da Fehler sind.

NagVis automap-Konfigurationsdatei:
vi /opt/nagios/nagvis/etc/maps/__automap.cfg
Die Automap liefert eine automatisch generierte Map der Nagiosobjekte.

Neue Map erstellen:
http://nagios.homenet/nagvis/wui/index.php
rechte-Maus-Taste, Manage, Maps

Über http://nagios.homenet/nagvis/wui/index.php kann man dann z.B. einer Map einen Host hinzufügen:
rechte-Maus-Taste, Open Map, NamederMap, rechte-Maus-Taste, Add object, Icon, Host
Auswahl: localhost
iconset: std_medium

Zurück zur WUI: Select map: Overview, dann Edit current map anklicken.

Man kann eine Map in der Overview nur anklicken/auswählen, wenn ein Background für die Map gesetzt wurde!

Das Gadget Speedometer verwenden:
Gadgets kann man nur für Services verwenden.
Dazu den Service in NagVis editieren und by view_type gadget und bei gadget_url
std_speedometer.php auswählen.



PNP4Nagios
Hier wird nur der "Synchronous Mode" gezeigt, die allereinfachste Variante des Setups für PNP4Nagios. Diese ist nur für kleine Nagios-Installationen geeignet. Für größere Setups sollte man den "Bulk Mode mit NPCD" verwenden, welcher auf der Homepage von PNP4Nagios beschrieben ist.

Mit Yast rrdtool, rrdtool-devl, php5-zlib installieren.

cd /home/test/build
wget http://sourceforge.net/projects/pnp4nagios/files/PNP-0.6/pnp4nagios-0.6.rc6.tar.gz
tar xfv pnp4nagios-0.6.rc6.tar.gz
cd pnp4nagios-0.6.rc6

mkdir -p /opt/nagios/pnp4nagios/spool

./configure \
--prefix=/opt/nagios/pnp4nagios \
--libdir=/opt/nagios/pnp4nagios/lib \
--libexecdir=/opt/nagios/pnp4nagios/libexec \
--with-layout=suse \
--with-perfdata-logfile=/opt/nagios/pnp4nagios/pnp4nagios.log \
--with-perfdata-dir=/opt/nagios/pnp4nagios \
--with-perfdata-spool-dir=/opt/nagios/pnp4nagios/spool \
--with-rrdtool=/usr/bin/rrdtool \
--with-debug

make all
make install
make install-config
make install-webconf

vi /etc/apache2/conf.d/pnp4nagios.conf
AuthUserFile /opt/nagios/etc/htpasswd.users

vi /opt/nagios/etc/nagios.cfg
process_performance_data=1
enable_environment_macros=1
host_perfdata_command=process-host-perfdata
service_perfdata_command=process-service-perfdata

vi /opt/nagios/etc/global/misccommands.cfg
Ändern auf:
define command {
       command_name    process-service-perfdata
       command_line    /usr/bin/perl /opt/nagios/pnp4nagios/libexec/process_perfdata.pl
}

define command {
       command_name    process-host-perfdata
       command_line    /usr/bin/perl /opt/nagios/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA
}

cp /opt/nagios/pnp4nagios/etc/process_perfdata.cfg-sample /opt/nagios/pnp4nagios/etc/process_perfdata.cfg
mkdir -p /opt/nagios/pnp4nagios/var/perfdata

vi /opt/nagios/pnp4nagios/etc/process_perfdata.cfg
LOG_LEVEL=2

Die PNP4Nagios-Konfiguration prüfen, bei anderem Modus statt "Synchronous Mode" muss -m xxx entsprechend gesetzt werden.
vi /opt/nagios/pnp4nagios/libexec/verify_pnp_config.pl
anpassen:
my $basedir = "/opt/nagios";
my $PNPdir = "/opt/nagios/pnp4nagios";  # PNP root directory

/etc/init.d/nagios restart

/opt/nagios/pnp4nagios/libexec/verify_pnp_config.pl -m sync

Das Apache-Module mod_rewrite muss geladen werden.
vi /etc/sysconfig/apache2 
APACHE_MODULES="... rewrite"

SuSEconfig 

cd /opt/nagios/pnp4nagios
chown -R nagios.nagios *

/etc/init.d/apache2 restart
PNP4Nagios mit der folgenden URL aufrufen:
http://nagios.homenet/pnp4nagios/
Wenn wirklich alles grün ist, oben und unten:
mv /opt/nagios/pnp4nagios/share/install.php /opt/nagios/pnp4nagios/share/install.php_off

Damit man aus Nagios heraus gleich auf den richtigen Performance-Graphen kommt kann folgendes ergänzen. Dadurch erscheint in der Nagios-Oberfläche am jeweiligen Objekt ein neues Symbol, welches ein Link auf die zugehörigen PNP4Nagios-Grafiken ist.
In der vi /opt/nagios/etc/Default_collector/hosts.cfg
ganz oben als erstes einfügen:
define host {
   name       host-pnp
   action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=_HOST_
   register   0
}
In der etc/Default_collector/services.cfg
ganz oben als erstes einfügen:
define service {
   name       srv-pnp
   action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
   register   0
}

Oder man fügt diese Templates in ein eigenes Template-File ein und gibt dieses in der nagios.cfg an.

Dann die Hosts und Services für die man die Links in Nagios direkt haben möchte mit den neuen Templates erweitern:
hosts.cfg:
use host-pnp

services.cfg:
use srv-pnp

/etc/init.d/nagios restart



NRPE
Nagios-Host:
Dort wo Nagios läuft wird nur das Plugin check_nrpe benötigt.
cd /home/test/build
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
tar xfvp nrpe-2.12.tar.gz
cd nrpe-2.12
./configure --enable-ssl --enable-command-args
make all
cp src/check_nrpe /opt/nagios/libexec/
chown nagios.nagios /opt/nagios/libexec/check_nrpe

Auf jedem Host, den man mit NRPE überwachen möchte wird er NRPE-Daemon benötigt:
cd /home/test/build
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
tar xfvp nrpe-2.12.tar.gz
cd nrpe-2.12
./configure --enable-ssl --enable-command-args
make all
mkdir -p /opt/nrpe/bin
cp src/nrpe /opt/nrpe/bin
mkdir /etc/nrpe
cp ./sample-config/nrpe.cfg /etc/nrpe/nrpe.cfg

Initskript mit folgendem Aufruf bauen
#!/bin/bash
/opt/nrpe/bin/nrpe -c /etc/nrpe/nrpe.cfg -d

insserv nrpe
chmod 0755 /etc/init.d/nrpe

vi /etc/nrpe/nrpe.cfg
server_port=5666
server_address=192.168.1.34
# nrpe lässt sich nicht als root starten.
# Bei Bedarf stattdessen sudo zusammen mit nrpe-checks verwenden.
nrpe_user=nrpe
nrpe_group=nrpe
allowed_hosts=192.168.1.55,192.168.1.50
debug=1
dont_blame_nrpe=1
command[check_users]=/opt/nagios/libexec/check_users -w $ARG1$ -c $ARG2$
command[check_load]=/opt/nagios/libexec/check_load -w $ARG1$ -c $ARG2$
command[check_disk]=/opt/nagios/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
command[check_procs]=/opt/nagios/libexec/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$

Es ist sinnvoll die Nagios-Plugins ebenfalls zu installieren, denn diese können von NRPE verwendet werden.
cd /home/test/build
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.14.tar.gz
tar xfvp nagios-plugins-1.4.14.tar.gz
cd nagios-plugins-1.4.14
mkdir /opt/nagios
./configure --prefix=/opt/nagios --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

useradd nrpe
/etc/init.d/nrpe start

Bei Problemen:
rm /var/run/nrpe.pid; /etc/init.d/nrpe restart
tail -f /var/log/daemon.log
tail -f /var/log/debug

Manueller Test vom Nagios-Host:
/opt/nagios/libexec/check_nrpe -H 192.168.1.34 -c check_users -a 8 10

In der Nagios-Konfiguration entspricht das dann:
define command{
        command_name    check_nrpe
        command_line    /opt/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
        }

define service{
        host_name                             remotehost
        service_description                   nrpe_check_users_8_10
        check_command                         check_nrpe!check_users!8 10
        check_period                          24x7
        notification_period                   24x7
        contact_groups                        admins
        max_check_attempts                    3
        normal_check_interval                 5
        retry_check_interval                  1
        notification_interval                 15
        notification_options                  w,u,c,r
        active_checks_enabled                 1
        passive_checks_enabled                0
        notifications_enabled                 1
        check_freshness                       0
        freshness_threshold                   86400
        }

define host {
                host_name                             remotehost
                alias                                 remotehost.localnet
                address                               192.168.1.34
                check_command                         check-host-alive
                max_check_attempts                    3
                notification_interval                 15
                notification_options                  d,u,r
                active_checks_enabled                 1
                passive_checks_enabled                0
                notifications_enabled                 1
                check_period                          24x7
                notification_period                   24x7
                contact_groups                        admins
}



NSCA
Nagios-Host:
Mit Yast libmycrypt-devel installieren.

cd /home/test/build
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nsca-2.7.2.tar.gz
tar xfvp nsca-2.7.2.tar.gz
cd nsca-2.7.2
./configure
make all

mkdir -p /opt/nsca/bin/
cp src/nsca /opt/nsca/bin
mkdir /etc/nsca
cp sample-config/nsca.cfg /etc/nsca
chmod 0444 /etc/nsca/nsca.cfg

Die IP-Adresse des Servers angeben worauf der NSCA-Daemon läuft, also die des Nagios-Hosts:
vi /etc/nsca/nsca.cfg
server_address=192.168.1.55
debug=1
command_file=/opt/nagios/var/rw/nagios.cmd
alternate_dump_file=/opt/nagios/var/rw/nsca.dump
password=PASSWORT
decryption_method=1

Initskript mit folgendem Aufruf erstellen.
#!/bin/bash
/opt/nsca/bin/nsca -c /etc/nsca/nsca.cfg --daemon

insserv nsca

Nagios zum passiven Empfang von Checks konfigurieren:
vi /opt/nagios/etc/nagios.cfg
accept_passive_service_checks=1

Für jeden Host der passiv geprüft werden soll, die folgende Zeile in der hosts.cfg hinzufügen.
vi /opt/nagios/etc/Default_collector/hosts.cfg
passive_checks_enabled 1

Der NSCA-Daemon sollte selbst auch überwacht werden.


Auf jedem Host, der Checks an den Nagios-Server senden soll:
Mit Yast libmcrypt-devel installieren.
cd /home/test/build
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nsca-2.7.2.tar.gz
tar xfvp nsca-2.7.2.tar.gz
cd nsca-2.7.2
./configure
make all

mkdir -p /opt/nagios/bin
cp src/send_nsca /opt/nagios/bin
mkdir /etc/nsca
cp sample-config/send_nsca.cfg /etc/nsca/
chmod 0444 /etc/nsca/send_nsca.cfg

vi /etc/nsca/send_nsca.cfg
password=PASSWORT
encryption_method=1

Beispielskript zum Senden der Disk-Überwachungsdaten.
vi nscadisk.sh
#!/bin/bash
send_nsca=/opt/nagios/bin/send_nsca
send_nsca_cfg=/etc/nsca/send_nsca.cfg
nagioshost=192.168.1.55
host=$1
service=$2
plugin=/opt/nagios/libexec/check_disk
# ab wieviel % freiem disk space
warn=80%
crit=90%
output=`$plugin -w $warn -c $crit`
# Returnwert des letzten Kommandos ($plugin -w $warn -c $crit)
rc=$?
# Das Ergebnis tab-getrennt in send_nsca pipen
echo -e "$host\t$service\t$rc\t$output"|$send_nsca -H $nagioshost -c $send_nsca_cfg
exit 0

Auf dem Nagios-Server einen Service anlegen, damit Nagios den Service kennt für den Daten kommen, check_period kann auf none gesetzt werden, da es diese Direktive nur für aktive Checks gilt.
define service{
         host_name              remotehost
         service_description    remotedisk
         active_checks_enabled  0
         passive_checks_enabled 1                               # We want only passive checking
         flap_detection_enabled 0
         register               1
         is_volatile            0
         check_period           none
         max_check_attempts     1
         normal_check_interval  5
         retry_check_interval   1
         check_freshness        0
         contact_groups         admins
         check_command          check_dummy!0
         notification_interval  120
         notification_period    24x7
         notification_options   w,u,c,r
         stalking_options       w,c,u
         }

define command{
        command_name check_dummy
        command_line $USER1$/check_dummy $ARG1$
        }



Auf dem Remotehost geht es weiter:
chmod u+x ./nscadisk.sh

Manuell einmal einen Check ausführen und an den Nagios-Server schicken
./nscadisk.sh remotehost remotedisk
1 data packet(s) sent to host successfully.
(remotehost und remotedisk muss exakt mit dem in Nagios konfigurierten
host_name und service_description übereinstimmen, damit Nagios
weiß von wo der Check kommt und für welchen Service die Daten sind:
host_name remotehost
service_description remotedisk
)



Beispiel eines Checks per snmp
cp  /usr/share/doc/packages/net-snmp/EXAMPLE.conf /etc/snmp/snmpd.conf 

vi /etc/snmp/snmpd.conf 
COMMUNITY (local) auf public
/etc/init.d/snmpd restart

Beispiel nur ums zu zeigen, macht ja eigentlich nicht so viel Sinn die Anzahl der NICs zu überwachen
snmpget -v1 -c public localhost interfaces.ifNumber.0
Für weitere Beispiele in die snmpd.conf schauen.

Die numerische OID ermitteln:
snmpwalk -v2c -On -c public localhost IF-MIB::ifNumber.0
.1.3.6.1.2.1.2.1.0 = INTEGER: 2

/opt/nagios/libexec/check_snmp -H localhost -o .1.3.6.1.2.1.2.1.0 -w 1 -c 2 -C public -P 1
SNMP WARNING - *2* | IF-MIB::ifNumber.0=2 
Und in Nagios eintragen.
define command {
                command_name                          check_snmp_interfaces
                command_line                          $USER1$/check_snmp -H $HOSTADDRESS$ -o .1.3.6.1.2.1.2.1.0 -w 2 -c 3 -C public -P 1
}

define service {
                service_description                   check_snmp_interfaces
                check_command                         check_snmp_interfaces
                host_name                             localhost
                check_period                          24x7
                notification_period                   24x7
                contact_groups                        admins
                max_check_attempts                    3
                normal_check_interval                 5
                retry_check_interval                  1
                notification_interval                 15
                notification_options                  w,u,c,r
                active_checks_enabled                 1
                passive_checks_enabled                0
                notifications_enabled                 1
                check_freshness                       0
                freshness_threshold                   86400
}



Überwachung von Logdateien
http://labs.consol.de/nagios/check_logfiles/
cd /home/test/build
http://labs.consol.de/wp-content/uploads/2009/09/check_logfiles-3.0.4.tar.gz
tar xfvp check_logfiles-3.0.4.tar.gz
cd check_logfiles-3.0.4
./configure
make
cp plugins-scripts/check_logfiles /opt/nagios/libexec/
cp t/etc/check_somelogfiles.cfg /opt/nagios/etc/check_logfiles.cfg

Hinweis:
Die folgenden Patterns sind reguläre Ausdrücke.
Das Plugin prüft nur ob es NEUE Einträge seit dem letzten Check gibt.
Das heist, entsteht ein neuer passender Eintrag und der Servicecheck läuft,
gibt es ein critical. Läuft er das nächste mal ohne dass es aktuellere passende
Einträge gibt, sagt er ok.
vi /opt/nagios/etc/check_logfiles.cfg

# where the state information will be saved.
$seekfilesdir = '/opt/nagios/tmp';

# where protocols with found patterns will be stored.
$protocolsdir = '/opt/nagios/tmp';

# where scripts will be searched for.
$scriptpath = '/opt/nagios/tmp';

@searches = (
  {
    tag => 'ssh logins',
    logfile => '/var/log/messages',
    rotation => 'linux',
    criticalpatterns => ['Accepted keyboard-interactive/pam for root'],
    warningpatterns => ['Authentication failure for root'],
  }
);

Diese Beispiel überwacht /var/log/messages auf Loginversuche von root. Es gibt ein warning
wenn root versucht sich einzuloggen aber ein falsches Passwort angibt. Es gibt ein critical
wenn er sich erfolgreich eingeloggt hat.
mkdir /opt/nagios/tmp
chown nagios /opt/nagios/tmp

Manuell zum Testen lässt es sich so aufrufen:
/opt/nagios/libexec/check_logfiles -f /opt/nagios/etc/check_logfiles.cfg

In Nagios muss es dann entsprechend konfiguriert werden:
define command {
                command_name                          check_ssh_root_logins
                command_line                          $USER1$/check_logfiles -f /opt/nagios/etc/check_logfiles.cfg
}

define service {
                service_description                   check_ssh_root_logins
                check_command                         check_ssh_root_logins
                host_name                             localhost
                check_period                          24x7
                notification_period                   24x7
                contact_groups                        admins
                max_check_attempts                    3
                normal_check_interval                 5
                retry_check_interval                  1
                notification_interval                 15
                notification_options                  w,u,c,r
                active_checks_enabled                 1
                passive_checks_enabled                0
                notifications_enabled                 1
                check_freshness                       0
                freshness_threshold                   86400
}

Das ganze dient nur dazu, das Prinzip deutlich zu machen. Normalerweise kann Nagios
die /var/log/messages nicht lesen, sollte er auch nicht können.



Notifications
Für die Notifications kann man Postfix als Relayclient konfigurieren.

Die bestehende main.cf aufmachen und den ganzen unteren Teil (wo keine Kommentare sind) entfernen,
dafür einfügen:
# sample_directory: The location of the Postfix sample configuration files.
# This parameter is obsolete as of Postfix 2.1.
#
sample_directory = /usr/share/doc/packages/postfix-doc/samples

myhostname = nagios.localnet
smtp_helo_name = nagios.localnet
relayhost = [MAILSERVER]
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_sasl_mechanism_filter = plain, login
smtp_sasl_security_options = noanonymous
sender_canonical_maps = hash:/etc/postfix/sender_canonical

vi /etc/postfix/sasl_passwd
[smtp.servername.of.your.provider]  username:password

Danach wie immer die map erzeugen.
postmap hash:/etc/postfix/sasl_passwd

Die Senderadresse umschreiben.
vi /etc/postfix/sender_canonical
localuser@yourserver.domain emailaddressofrelayaccount

Anschließend wird wieder die map erstellt:
postmap hash:/etc/postfix/sender_canonical
postfix reload

Noch die
Notification-Kommandos ändern (ist für SLES nicht notwendig, für einige andere Distributionen schon):

!!! Achtung !!!
vi /opt/nagios/etc/global/contacts.cfg
Jeweils das 'n' entfernen falls vorhanden, sonst werden an den Kontakt gar keine Notifications versandt.
host_notification_options d,u,r,f,n
service_notification_options w,u,c,r,f, n



Allgemeine Tips
Bei der Angabe von Parents in der Nagios-Konfiguration muss der Servername angegeben werden, mit der IP geht das nicht.

Availability-Report
Werte vor den Klammern: stellen die Gesamtzeit dar inklusive unknown Zeiten.
Werte in den Klammern: stellen die Gesamtzeit dar OHNE unknown Zeiten
unknown: Zeiten in der der Nagios-Server nicht lief



Failover-Setup
Hier eine einfache Möglichkeit Nagios mit Failover zu konfigurieren, wie in der offiziellen Nagios-Dokumentation beschrieben.

Ausgangspunkt ist der NRPE-Daemon, welcher mit Hilfe des Plugins check_nagios prüft ob Nagios läuft. Dieser Check wird dann vom Nagiosslave aufgerufen. Die IP des Slaves muss in der nrpe.cfg angegeben, damit der Slave Zugriff bekommt. Die IP des Masters muss ebenfalls angegeben werden.
vi /etc/nrpe/nrpe.cfg
allowed_hosts=192.168.1.56,192.168.1.55

Der direkte Aufruf des Plugins sieht so aus:
/opt/nagios/libexec/check_nagios -F /opt/nagios/var/status.dat -e 1 -C '/opt/nagios/bin/nagios -d /opt/nagios/etc/nagios.cfg'
Das muss dann entsprechend in die nrpe.cfg eingetragen werden.
Ansonsten muss nrpe wie schon vorher beschrieben als Daemon auf dem Nagiosmaster installiert werden.

Auf dem Nagiosslave läuft zwar der Nagios-Daemon, er ist jedoch so konfiguriert, dass er weder Checks ausführt, noch Notifications sendet (nagios.cfg):
execute_service_checks=0
enable_notifications=0
check_external_commands=1

Jetzt erstellen wir auf dem Slave einen Cronjob welcher ein Skript ausführt, das den Status des Nagiosmasters prüft und
sofern er nicht läuft die Checks und Notifications auf dem Slave aktiviert:
cronjob einrichten:
vi /etc/crontab
* * * * * nagios /opt/nagios/libexec/setslavestatus.sh

vi /opt/nagios/libexec/setslavestatus.sh

#!/bin/sh

RESULT=`/opt/nagios/libexec/check_nrpe -H 192.168.1.55 -c check_nagios`
RV=$?

now=`date +%s`
commandfile='/opt/nagios/var/rw/nagios.cmd'

case "$RV" in
0|1)
/usr/bin/X11/printf "[%lu] DISABLE_NOTIFICATIONS\n" $now > $commandfile
/usr/bin/X11/printf "[%lu] STOP_EXECUTING_HOST_CHECKS\n" $now > $commandfile
/usr/bin/X11/printf "[%lu] STOP_EXECUTING_SVC_CHECKS\n" $now > $commandfile
;;
2)
/usr/bin/X11/printf "[%lu] ENABLE_NOTIFICATIONS\n" $now > $commandfile
/usr/bin/X11/printf "[%lu] START_EXECUTING_HOST_CHECKS\n" $now > $commandfile
/usr/bin/X11/printf "[%lu] START_EXECUTING_SVC_CHECKS\n" $now > $commandfile
;;
esac

chown nagios.nagios /opt/nagios/libexec/setslavestatus.sh 
chmod u+x /opt/nagios/libexec/setslavestatus.sh 

Tip:
Wenn man irgendein Kommando für das external command file herausfinden möchte, einfach in der nagios.log
schauen, wenn man etwas auf der Nagiosoberfläche anklickt.



Debugging
Falls man einmal testen möchte ob sich ein gebautes Nagios-Modul laden lässt, kann man folgendes kleines Programm verwenden.
vi test.c

#include <dlfcn.h>
#include <stdlib.h>
#include <stdio.h>

int main(){

  void *module_handle=(void *)dlopen("/home/test/build/libtooltest/ndomod.o",RTLD_NOW|RTLD_GLOBAL);

  if(module_handle==NULL){

    printf("error\n");

  }else{

    printf("ok\n");
    lt_dlclose(module_handle);
  }

  exit(0);
}

gcc -l ltdl -o test test.c
chmod u+x ./test
./test


SLES Administration
Nagios und Cacti
Nagios-Training