| Home Profil Fun |
#84 Linux 09.11.2009
Nagios 3 mit Failover auf SLES 11 mit NConf, NRPE, NSCA, PNP4Nagios und NagVisIn 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 ...bundleFalls 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 mysqlhttp://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 restartPNP4Nagios 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.cfgganz 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 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.0Fü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=2Und 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 |