Nagios

Aus Doku-Wiki
Zur Navigation springenZur Suche springen

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


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:

  1. allowed_hosts - Zugriffskontrolle auf IP-Basis
  2. dont_blame_nrpe - 1 = Es können vom Server Attribute mit dem Checkkommando übergeben werden
  3. 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

./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

Beispiele

/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.