Nagios
Inhaltsverzeichnis
Nagios Server
Anmerkung
Nagios dient zur Überwachung von Server und PC-Systemen und deren Dienste
Version
OS: Debian Etch / Lenny Nagios: Debian Etch / Lenny Stable Version
Doku-Links
- Nagios Homepage
- Nagios Quick Start Guides
- Nagios2 (PDF)
- Nagios3 (PDF)
- Nagios Wiki DE
- Nagios-Wiki.org
- Plugin check_gneric
Installation
Pakete installieren
aptitude update aptitude upgrade aptitude install nagios3 nagios-nrpe-plugins nagios-nrpe-server
Einrichten von Nagios
Benutzer kontrollieren/anlegen/anpassen
Kontrolle des Users nagios und der Gruppe nagios. Wenn nicht vorhanden, werden diese angelegt.
In die Gruppe nagios muss noch der Benutzer des Webservers (Debian www-data) angefügt werden.
# cat /etc/passwd | grep nagios nagios:x:103:104::/var/run/nagios2:/bin/false
# cat /etc/group | grep nagios nagios:x:104:www-data
Weboberfläche für Nagios einrichten
Nagios 2
Im Verzeichnis /etc/nagios2/ liegt die Apache-Konfiguratiuon füe Nagios apache2.conf.
Diese wird ins Webserververzeichnis verlinkt:
# ln -s /etc/nagios2/apache2.conf /etc/apache2/sites-available/001-nagios # ln -s /etc/apache2/sites-available/001-nagios /etc/apache2/sites-enabled/001-nagios
Jetzt noch einen Benutzer anlegen, damit man sich bei der Weboberfläche von Nagios anmelden kann.
htpasswd -c /etc/nagios2/htpasswd.users admin
Nagios kann nun mittels Browser aufgreufen werden. Die URL lautet
http://Servername oder IP/nagios2
Ob man sich an der Nagios Verwaltungsseite anmelden muss, oder nicht kann in der Datei
/etc/nagios2/cgi.cfg konfiguriert werden:
use_authentication=0 # 0 = Anmeldung ausgeschaltet 1 = Anmeldung eingeschaltet
Nagios 3
Erstellen Sie einen Apache Webcontainer. Danach wird folgende Erweiterung eingefügt:
#-- Nagios3 Erweiterung ScriptAlias /cgi-bin/nagios3 /usr/lib/cgi-bin/nagios3 ScriptAlias /nagios3/cgi-bin /usr/lib/cgi-bin/nagios3 Alias /nagios3/stylesheets /etc/nagios3/stylesheets Alias /nagios3 /usr/share/nagios3/htdocs <DirectoryMatch (/usr/share/nagios3/htdocs|/usr/lib/cgi-bin/nagios3)> Options FollowSymLinks Indexes Order Allow,Deny Allow From All AuthName "Nagios Access" AuthType Basic AuthUserFile /etc/nagios3/htpasswd.users require valid-user </DirectoryMatch>
Konfiguration von Nagios
Wichtige Verzeichnise und Dateien
In folgenden Ordner kann die Konfiguration von Nagios angepasst werden: Hauptordner mit den wichtigsten Config-Dateien
/etc/nagios2/ /etc/nagios3/
Config-Dateien (zB für Hosts oder Services)
/etc/nagios2/conf.d/ /etc/nagios3/
Hier liegen die Perlskripte zu den Plugins
/usr/lib/nagios/plugins/
Config-Dateien der Plugins
/etc/nagios-plugins/config/
Tips und Tricks
Externe Kommandos über die Nagios Webseite ausführen
Nagios 2
in der Konfiguration von Nagios müssen diese Kommandos erlaubt sein:
# vi /etc/nagios2/nagios.cfg # vi /etc/nagios3/nagios.cfg check_external_commands=0 # 0 = Aus | 1 = Ein
Weiter muss der benutzer des Webservers (bei Debian www-data) in der Gruppe nagios sein:
# vigr ... nagios:x:104:www-data ...
Weiter gibt es noch einen Fehler bei den Rechten im Dateisystem:
# ls -la /var/lib/nagios2/ -rw-rw-r-- 1 nagios www-data 238 2007-11-12 11:16 comments.dat -rw-rw-r-- 1 nagios www-data 239 2007-11-12 11:16 downtime.dat -rw------- 1 nagios www-data 35122 2007-11-17 09:04 retention.dat drwx------ 2 nagios www-data 4096 2007-11-17 09:05 rw
Beim Verzeichnis rw fehlt das x bei der Gruppe, sonst darf der Webserver nich in das Verzeichnis wechseln:
# chgrp g+w rw drwx--x--- 2 nagios www-data 4096 2007-11-17 09:05 rw
Nagios 3
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
Nagios Clients
Windows Agent
NSClient++ installieren
- Download the latest stable version of the NSClient++ addon from http://sourceforge.net/projects/nscplus
- Unzip the NSClient++ files into a new C:\Programme\NSClient++ directory
- Open a command prompt and change to the C:\Programme\NSClient++ directory
- Register the NSClient++ system service with the following command:
nsclient++ /install
- Install the NSClient++ systray with the following command ('SysTray' is case-sensitive):
nsclient++ -install SysTray
NSClient++ konfigurieren
NSClient++ Links
NRPE
Folgende Einstellungen müssen in der nsc.ini angepasst werden:
- [modules]
FileLogger.dll CheckSystem.dll CheckDisk.dll ; NSClientListener.dll NRPEListener.dll ; SysTray.dll CheckEventLog.dll CheckHelpers.dll CheckWMI.dll
; Script to check external scripts and/or internal aliases. CheckExternalScripts.dll
- [Settings]
obfuscated_password= password= allowed_hosts=[IP-NAGIOS-SERVER]/32 use_file=1 shared_session=1
- [log]
Hier kann man die Einstellungen aktivieren wenn es Probleme gibt, ansonsten nicht
- [NRPE]
command_timeout=60 allow_arguments=0 allow_nasty_meta_chars=0
- [External Script]
command_timeout=60 allow_arguments=0 allow_nasty_meta_chars=0
check_nrpe Version 3x und höher
Ab dieser Version benötigt ein Windows Client auf dem NSClient++ läuft einen längern DH Key. Dieser wird auf einem Linux PC folgendermaßen erzeugt:
openssl dhparam -C 2048
Den erzeugten Key unter
c:\Program Files\Nsclient++\security\nrpe_dh_2048.pem
auf dem Windows Client speichern und in der Datei
c:\Program Files\Nsclient++\nsclient.ini in der Sektion [/settings/NRPE/server] hinzufügen ; DH KEY - dh = ${certificate-path}/nrpe_dh_2048.pem
NRPE - Nagios Plugin Executor
Installation
Unter Debian Etch werden folgende Pakete installiert
# aptitude install nagios-nrpe-server nagios-plugins
Konfiguration
Die Konfiguration von NRPE wird in den folgenden Dateien durchgeführt:
NRPE-Programm: /usr/sbin/nrpe NRPE-Konfiguraton /etc/nagios/nrpe.cfg Plugins /usr/lib/nagios/plugins/
Einstellungen auf dem Cllient
In der Konfigurationsdatei /etc/nagios/nrpe.cfg können grundlegende Einstellungen vorgenommen werden.
Die Konfiguration ist aber so ausgelegt, dass Sie funktioniert. Als einziges müssen die CeckCommandos definiert werde.
Es befinden sich aber vordefinierte Checks in dieser Datei. Hier ein auszug:
cat /etc/nagios/nrpe.cfg server_port=5666 nrpe_user=nagios nrpe_group=nagios allowed_hosts=127.0.0.1,172.21.70.1 dont_blame_nrpe=0 debug=0 command_timeout=60 include_dir=/etc/nagios/conf.d include=/etc/nagios/nrpe_local.cfg
Die fett makierten Zeilen habe ich angepasst:
- allowed_hosts - Zugriffskontrolle auf IP-Basis
- dont_blame_nrpe - 1 = Es können vom Server Attribute mit dem Checkkommando übergeben werden
- include_dir=/etc/nagios/conf.d - Dateien die in diesem Verzeichnis liegen und die Endung .cfg haben, werden includiert
Dieser Aufruf überprüft die Festplattenbelegung. Die Werte werden hier fest definiert. || dont_blame_nrpe=0
command[check_disk1]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /
Das selbe Komando, nur das als Werte Variablen angegeben wurden. Diese müssen dann mit dem Aufruf vom Server gefüllt werden
! ACHTUNG, da es hier zur Übergabe von Daten vom Server an den Client kommt, sollte diese Möglichkeit aus Sicherheitsgründen nicht verwendet werde.
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
Einstellungen auf dem Server
Grafiksymbole
Konfiguration
Die Hosts und Services können mit externen Infos und Grafiksymbolen aufgewertet werden.
- [NAGIOS]/global/externeInfos/extinfo_nagios.cfg
# Windows Server define hostextinfo{ hostgroup_name windows-server notes Windows Server notes_url https://[URL zu einer Beschreibung oder Doku] icon_image base/win40.png icon_image_alt Windows Server vrml_image win40.png statusmap_image base/win40.gd2 }
- Dann noch eine Hostgruppe erstellt
- [NAGIOS]/site/groups/host_groups.cfg
define hostgroup { hostgroup_name windows-server alias Windows Server members Server01, Server02, Server03 }
- Oder statt einer Hostgroup einen Host verwenden
define hostextinfo{ host_name windows-server-dc01 notes Windows Server DC01 notes_url https://[URL zu einer Beschreibung oder Doku] icon_image base/win40.png icon_image_alt Windows Server vrml_image win40.png statusmap_image base/win40.gd2 }
Bilder
Nun müssen nur noch die Bilder erstellt und auf dem Server Nagiosserver gespeichert werden.
Bilder erstellen
Die Bilder sollten ein Größe von ca. 60x60px haben. Wie in der Konfiguration zu sehen, werden PNG und GD2 Dateien benötigt. Um aus einem PNG eine GD2 Datei zu erstellen, kann unter Debian das Paket libgd-tools verwenden
|Quellfile|Zielfile |Optionen| pngtogd2 eshop.png eshop.gd2 cs fmt
Bilder speichern
Die Bilder legt man nun in folgendes Verzeichnis:
/usr/share/nagios/htdocs/images/logos/base/
Plugins
Hier einige Seiten, bei denn Nagios-Plugins verfügbar sind
chek_multi check_generic check_nagios_performance
Perlmodul Nagios::Plugin
Diese Perlmodul wird für einige zusätzliche Plugins benötigt.
Die Installation ist sehr einfach, wenn Perl und CPAN auf dem Rechner installiert sind.
perl -MCPAN -e 'install Nagios::Plugin'
check_generic
Mit diesem Plugin lassen sich beliebige Scripte aufrufen.
Der Rückgabewert dieser Scripte wird dann an Nagios übermittelt
check_pcmeasure2.pl
Diese Plugin die zur Abfrage von MessPC
Voraussetzung ist das Perlmudul Nagios::Plugin
- Download
- Beispiel
./check_pcmeasure2.pl -H 192.168.1.199 -S com1.1 -l temp -F "Temperatur: %.1f°C" -w 21:23 -c 20:24
Exchange 2010 Mailqueue abfragen
Nagios Grapher
Installation
aptitude install nagiosgrapher autoconf perl-modules \ libcalendar-simple-perl libgd-gd2-perl \ perlmagick librrds-perl liburi-perl
Konfiguration
- Wichtige Verzeichnisse
/etc/nagiosgrapher /var/lib/nagiosgrapher /etc/nagios3/
/etc/nagiosgrapher
/etc/nagiosgrapher/nagios3/commands.cfg
Diese Datei wird in das Nagiosverzeichnis -/global/commands/ kopiert.
cd /etc/nagiosgrapher cp nagios3/commands.cfg /etc/nagios3/BLB/global/commands/nagiosgrapher_commands.cfg
/etc/nagiosgrapher/nagios3/serviceext
Im Verzeichnis serviceext werden von NagiosGrapher die ServieInfo-Dateien angelegt
Damit Nagios diese Dateien einlesen kann, muss in /etc/nagios3/nagios.cfg ein weiterer cfg_dir Eintrag eingetragen werden.
vi /etc/nagios3/nagios.cfg cfg_dir=/etc/nagiosgrapher/nagios3/serviceext
/etc/nagiosgrapher/ngraph.d
Hier finden sich die Templates für die Graphen der einzelnen Services
Hier gilt das selbe Prinzip wie bei den Nagios-Konfigurationen. Alle Konfigurationsdateien
die mit .ncfg enden werde recursive eingelesen. Ob dies sinvoll ist, sollte man sich genau überlegen.
Ich habe die Templates in an ein anderes Verzeichniss kopiert um nur die von mir benötigten
Templates in das Verzeichniss ngraph.d zu kopieren.
/etc/nagiosgrapher/ngraph.d/nmgraph.ncfg
Diese Konfigurationsdatei definiert die Graphen-Darstellung
Sie wird mitgeliefert und ist funktionsfähig.
Beispiel
/etc/nagiosgrapher/ngraph.ncfg
/var/lib/nagiosgrapher
/etc/nagios3/
Shibboleth zur Authentifizierung verwenden
/etc/nagios3/apache2.conf
<DirectoryMatch (/usr/share/nagios3/htdocs|/usr/lib/cgi-bin/nagios3)> Options FollowSymLinks DirectoryIndex index.html AllowOverride AuthConfig Order Allow,Deny Allow From All AuthType Shibboleth ShibRequireSession On ShibRequireAll On Require user ~ ^.+$ Require entitlement https://www.example.de/entitlement/nagios Options None </DirectoryMatch>
Über das Attribut entitlement wird geprüft, ob der Nutzer überhaupt das Recht hat, auf Nagios zuzugreifen.
/etc/shibboleth2/
In folgenden Dateien müssen Einstellungen vorgenommen werden:
- /etc/shibboleth2/shibboleth2.conf
- Hier wird die der Shibboleth SP eingerichtet
- /etc/shibboleth2/attribute-map.xml
- Mapping der Attribute
- /etc/shibboleth2/attribute-policy.xml
- Hier wird geregelt, welche Attribute angenommen werden und wie diese aussehen müssen
/etc/shibboleth2/shibboleth2.conf
/etc/shibboleth2/attribute-map.xml
<Attributes xmlns="urn:mace:shibboleth:2.0:attribute-map" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Attribute name="urn:mace:dir:attribute-def:eduPersonEntitlement" id="entitlement"/> <Attribute name="urn:oid:1.3.6.1.4.1.5923.1.1.1.7" id="entitlement"/> <Attribute name="urn:mace:dir:attribute-def:uid" id="uid"/> <Attribute name="urn:oid:0.9.2342.19200300.100.1.1" id="uid"/> </Attributes>
/etc/shibboleth2/attribute-policy.xml
- Dies ist ein Beispiel. Hier werden zwei Attribute geprüft.
- (1) Die "AttributeFilterPolicy" kann mehrfach hintereinander verwendet werden
- (2) Die "PolicyRequirementRule" lässt nur Attribute zu die von einem Bestimmten IDP kommen
- (3) Beim Entitlement wird geprüft, ob dieses einen bestimmten Wert enthält, ansonsten wird es nicht angenommen.
- (4) Bei dem Attribut uid wird geprüft, dass kein "@-Zeichen vorkommt, ansonsten wird es verworfen"
<afp:AttributeFilterPolicyGroup xmlns="urn:mace:shibboleth:2.0:afp:mf:basic" xmlns:afp="urn:mace:shibboleth:2.0:afp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- (1) AttributeFilterPolicy regelt den Zugriff --> <afp:AttributeFilterPolicy> <!-- (2) PolicyRequirementRule - Regelt die Voraussetzungen, dass Attribute angenommen werden In diesem Fall werden Attribute nur von dem IDP AttributeIssuerString = https://idp.example.de/idp/shibboleth angenommen. --> <afp:PolicyRequirementRule xsi:type="AttributeIssuerString" value="https://idp.example.de/idp/shibboleth" /> <!-- (3) AttributeRule - Hier wird das Attribut entitlement überprüft. Es wird nur verwendent wenn das entitlemaent den wert "https://www.example.de/entitlement/nagios". <afp:AttributeRule attributeID="entitlement"> <afp:PermitValueRule xsi:type="AttributeValueString" value="https://www.example.de/entitlement/nagios" /> </afp:AttributeRule> <!-- (4) AttributeRule - Hier wird das Attribut uid überprüft. Es wird nur verwendent wenn es kein "@-Zeichen" enthält --> <afp:AttributeRule attributeID="uid"> <afp:PermitValueRule xsi:type="NOT"> <Rule xsi:type="AttributeValueRegex" regex="@"/> </afp:PermitValueRule> </afp:AttributeRule> </afp:AttributeFilterPolicy> </afp:AttributeFilterPolicyGroup>
SMS-Versand
Über Webschnittstelle
Hier habe ich einen guten SMS-Provider gefunden, der auch ein Perlscript zur Verfügung stellt, dass mann in Nagios einbinden kann.
Perlscript zur einbindung in Nagios
Das Script habe ich in /usr/lib/nagios/plugins/ abgespeichert. Folgene Berechtigungen werden benötigt:
chmod 755 /usr/lib/nagios/plugins/NagiosSendSMS.pl
global/commands/commands.cfg
- In die commands.cfg wird entsprechen des email-Eintrages die unten aufgeführten Zeilen eingefügt
# -- SMSprovider define command{ command_name notify-by-sms command_line /usr/bin/perl /usr/lib/nagios/plugins/NagiosSendSMS.pl [BENUTZER] [PASSWORT] $CONTACTPAGER$ "Host $HOSTSTATE$ State: $SERVICEDESC$ alert for $HOSTNAME$! ** Info: $HOSTOUTPUT$ $SERVICEOUTPUT$" }
SMS-Kontakt anlegen
- Nun noch einen Contact anlegen der für den SMS-Versand genutzt wird
define contact{ contact_name smsName alias Vorname Nachname service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-by-sms host_notification_commands notify-by-sms pager 0160xxxxxxx }
Nun muss man den Kontakt nur noch in die Gruppe hinzufügen.