Nagios3 unter Debian Linux

Aus Laub-Home Wiki

Installation Nagios3

aptitude install nagios3 nagios3-common nagios-plugins nagios-plugins-basic nagios-plugins-standard

Aktivieren der nagios.cmf

Kommt es zu folgender Fehlermeldung beim Anstoßen eines Nagios Checks:

Error: Could not stat() command file '/var/lib/nagios3/rw/nagios.cmd'!

Helfen folgende Befehle:

/etc/init.d/nagios3 stop 
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 
/etc/init.d/nagios3 start

Debugging Refresh Problem bei Nagios 3.2

Bei Nagios 3.2.x gibt es das Problem, dass wenn man auf Refresh im Browser klickt, man immer auf der Startseite landet. Dieser Bug kann folgendermaßen behoben werden:

Debug Lösung 1

Folgende Zeile der Nagios index.php an oberster stelle hinzufügen: /usr/share/nagios3/htdocs/index.php

<?php header("Cache-Control: max-age=7200,> public"); ?>

sieht dann so aus:

<?php header("Cache-Control: max-age=7200,> public"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

<html>
<head>
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
<title>Nagios Core</title>
<link rel="shortcut icon" href="images/favicon.ico" type="image/ico">
</head>

<?php
.....

Dann ganz wichtig den Browsercache leeren oder den Browser neustarten. Und schon sollte es gehen, falls nicht probiert die Debug Lösung 2

Debug Lösung 2

mv /usr/share/nagios3/htdocs/index.php /usr/share/nagios3/htdocs/index.html

In folgender Datei die index.html als DirectoryIndex hinzufügen:
/etc/apache2/conf.d/nagios3.conf

DirectoryIndex index.php index.html

und nun den Apache neustarten:

apache2ctl restart

Konfiguration Nagios3

chmod +s /usr/lib/nagios/plugins/check_icmp

/etc/nagios3/nagios.cfg

check_external_command=1
/etc/init.d/nagios3 stop
dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
/etc/init.d/nagios3 start

Performance Tuning

was ein wenig Performance bringt ist das Überprüfen der Hosts mit check_host und nicht mit check_ping:
/etc/nagios-plugins/config/ping.cfg

# 'check-host-alive' command definition
define command{
        command_name    check-host-alive
        #command_line   /usr/lib/nagios/plugins/check_ping -H '$HOSTADDRESS$' -w 5000,100% -c 5000,100% -p 1
        command_line    /usr/lib/nagios/plugins/check_host -H '$HOSTADDRESS$' -w 5000,100% -c 5000,100% -p 1
        }

Das zusätzliche erstellen eines Ping oder ICMP Services für einen Host ist nicht nötig!
Enable Performance Tweaks:
/etc/nagios3/nagios.cfg

# LARGE INSTALLATION TWEAKS OPTION
# This option determines whether or not Nagios will take some shortcuts
# which can save on memory and CPU usage in large Nagios installations.
# Read the documentation for more information on the benefits/tradeoffs
# of enabling this option.
# Values: 1 - Enabled tweaks
#         0 - Disable tweaks (default)

use_large_installation_tweaks=1

NConf Installation

Webseite des Herstellers: http://www.nconf.org

Abhängigkeiten installieren

Folgende Pakete müssen vor der Installation auf dem System vorhanden sein:

  • Apache Webserver
  • PHP4.4 oder höher mit php-mysql (bei LDAP Auth auch php-ldap)
  • MySQL 5.0.2 inkl. InnoDB
  • Perl 5.6 oder höher mit perl-DBI und perl-dbd-mysql
  • ein Nagios Binary

Diese können mittels aptitude ggf. nachinstalliert werden.

Datenbank vorbereiten

am Datenbankserver anmelden:

mysql -u root -p

Und nun die Datenbank anlegen:

create database nconf;
grant select, insert, update, delete, create, drop, alter ON `nconf`.* to 'nconf'@'hostname' identified by 'nconfpass';

Nconf Installieren

Zuerst von der Downloadpage des Herstellers auf den Server laden und entpacken:

cd /usr/src/
wget http://sourceforge.net/projects/nconf/files/nconf/1.2.6-0/nconf-1.2.6-0.tgz/download
tar -xzvf nconf-1.2.6-0.tgz

Nun in den Apache vhost kopieren und die richtigen Rechte setzten:

mv nconf /var/www/
cd /var/www/
chown www-data:www-data ./config ./output ./temp

Nun kann die Datenbank gefüttert werden:

mysql -u root -p -D nconf < /var/www/INSTALL/create_database.sql

Nconf Konfigurieren

Zum konfigurieren kann nun folgender Pfad in einem Browser geöffnet werden:

http://<HOSTNAME>/nconf/INSTALL.php 

Hier werden dann die Abhängigkeiten geprüft und bei einem Klick auf next kommt man zur Datenbankeinrichtung. Bei einem weiteren Klick auf next prüft er die Datenbankverbindung. Ist diese erfolgreich gelangt man weiter zur General configuration. Diese habe ich auf den Default Werten stehen gelassen. Genau wie die nächste Seite Authentication configuration, hier brauche ich nichts einstellen, da der ganze vhost eh Passwortgeschützt ist. Nachdem nochmals alles geprüft wird und die Configfiles angelegt wurden sollten folgende Dateien gelöscht werden:

cd /var/www/nconf
rm INSTALL.php
rm UPDATE.php
rm -rf INSTALL
rm -rf UPDATE

Nun noch das Nagios Binary in den richtigen Ordner kopieren:

/var/www/nconf/bin/nagios

Dieses sollte bei einem nagios3 unter /usr/sbin/nagios3 zu finden sein.

Nconf starten

Beim folgendem Aufruf begrüßt einen die NCONF Startpage:

http://<HOSTNAME>/nconf/

Autodeployment

Hier der Link zur Dokumentation, wie man direkt von NConf deployen kann.

NRPE - Der Linux Nagios Client

Installation:

aptitude install nagios-nrpe-server

Konfiguration:
/etc/nagios/nrpe_local.cfg

allowed_hosts=127.0.0.1,192.168.50.10
command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 10% -c 5%
command[check_apt_distupgrade]=/usr/lib/nagios/plugins/check_apt -d
command[check_mysql_cmdlinecred]=/usr/lib/nagios/plugins/check_mysql -H localhost -u username -p password
command[check_mailq_postfix]=/usr/lib/nagios/plugins/check_mailq -w 3 -c 5 -M postfix
command[check_clamav]=/usr/lib/nagios/plugins/check_clamav -w 3 -c 4
command[check_swap]=/usr/lib/nagios/plugins/check_swap -w 20% -c 10%
command[check_ntp]=/usr/lib/nagios/plugins/check_ntp_time -H 0.debian.pool.ntp.org

NSClient - Der Windows Nagios Client

Herunterladbar ist er hier:

hier dann das aktuelleste .msi Pakete herunterladen und installieren.
Bei Allowed Hosts die Nagios Server Ip eintragen. Passwort kann leer bleiben, dann den Haken bei nsclient setzten. Zum Schluss den Haken setzten Start the Service.

USV mit apcupsd und Nagios überwachen

Zuerst das check_apcupsd Plugin in den Ordner /usr/lib/nagios/plugins herunterladen:
Download Link: http://wiki.laub-home.de/images/1/15/Check_apcupsd.zip

cd /usr/src/
wget http://wiki.laub-home.de/images/1/15/Check_apcupsd.zip
unzip Check_apcupsd.zip
cp check_apcupsd /usr/lib/nagios/plugins/
chmod +x /usr/lib/nagios/plugins/check_apcupsd

Nun die Plugin Konfigdatei erstellen:
/etc/nagios-plugins/config/apcupsd.cfg

# 'check_apcupsd' command definition
define command{
        command_name    check_apcupsd
        command_line    /usr/lib/nagios/plugins/check_apcupsd
        }

und zum Schluss noch den Service Check dem Host hinzufügen:

# check usv
define service {
        host_name                       Rechnername
        service_description             USV Test
        check_command                   check_apcupsd
        use                             shorttime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

Webseite hinter Digest Auth überwachen

Hat man eine Webseite welche per Digest Passwortschutz geschützt ist, so kann man das folgende Plugin verwenden:

ESX Server mit Nagios und dem check_esx3 Plugin überwachen

Das Überwachen einer VI bzw. eines ESX Server ist mittels des check_esx3.pl Plugins von OP5 möglich:

Das Plugin benötigt das VMWare PerlToolkit. Hier die Anleitung zur Installation:

Das Plugin dann einfach herunterladen und in den Nagios Plugin Ordner /usr/lib/nagios/plugins kopieren und dem Plugin nachträglich das Ausführrecht geben:

chmod +x /usr/lib/nagios/plugins/check_esx3.pl

der folgende Aufruf des Skriptes liefert einem die kompletten Optionen des Plugins:

/usr/lib/nagios/plugins/check_esx3.pl --help

Ich habe folgende Nagios Plugin Konfigurationsdatei angelegt:
/etc/nagios-plugins/config/esx3.cfg

#Commands for ESX(i) servers or data center
define command {
        command_name    check_esx3_host_cpu_usage
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l cpu -s usage -w $ARG3$ -c $ARG4$
}
define command {
        command_name    check_esx3_host_mem_usage
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l mem -s usage -w $ARG3$ -c $ARG4$
}
define command {
        command_name    check_esx3_host_swap_usage
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l mem -s swap -w $ARG3$ -c $ARG4$
}
define command {
        command_name    check_esx3_host_net_usage
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l net -s usage -w $ARG3$ -c $ARG4$
}
define command {
        command_name    check_esx3_host_vmfs
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l vmfs -s $ARG3$ -w $ARG4$ -c $ARG5$
}
define command {
        command_name    check_esx3_host_runtime_status
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l runtime
}
define command {
        command_name    check_esx3_host_runtime_issues
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l runtime -s issues
}

# Commands for virtual hosts
define command {
        command_name    check_esx3_vm_cpu_usage
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l cpu -s usage -w $ARG4$ -c $ARG5$
}
define command {
        command_name    check_esx3_vm_mem_usage
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l mem -s usage -w $ARG4$ -c $ARG5$
}
define command {
        command_name    check_esx3_vm_swap_usage
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l mem -s swap -w $ARG4$ -c $ARG5$
}
define command {                                               
        command_name    check_esx3_vm_net_usage
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l net -s usage -w $ARG4$ -c $ARG5$
}
define command {
        command_name    check_esx3_vm_runtime_cpu
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s cpu -w $ARG4$ -c $ARG5$
}
define command {
        command_name    check_esx3_vm_runtime_mem
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s mem -w $ARG4$ -c $ARG5$
}
define command {
        command_name    check_esx3_vm_runtime_status
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s status
}
define command {
        command_name    check_esx3_vm_runtime_state
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s state
}
define command {
        command_name    check_esx3_vm_runtime_issues
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s issues
}
define command {
        command_name    check_esx3_vm_runtime_tools
        command_line    /usr/lib/nagios/plugins/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -N $ARG3$ -l runtime -s tools
}

In der Host Konfigurationsdatei habe ich dann folgende Monitore eingerichtet:

#Überprüft die CPU Usage (Alarmierung bei 95% Last)
define service {
        host_name                       ESXSERVER
        service_description             CPU Usage
        check_command                   check_esx3_host_cpu_usage!esx_user!esx_pass!85!95
        use                             longtime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
# Überprüfung der Ramauslastung (Alarmierung bei 95%)
define service {
        host_name                       ESXSERVER
        service_description             Memory Usage
        check_command                   check_esx3_host_mem_usage!esx_user!esx_pass!85!95
        use                             longtime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
# Überprüfung des Swap (Alarmierung bei 1200MB)
define service {
        host_name                       ESXSERVER
        service_description             Swap Usage
        check_command                   check_esx3_host_swap_usage!esx_user!esx_pass!1000!1200
        use                             longtime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
# Überwachung eines VMFS Volumes (Alarmierung bei weniger als 15000MB)
define service {
        host_name                       ESXSERVER
        service_description             VMFS Usage 1
        check_command                   check_esx3_host_vmfs!esx_user!esx_pass!VMFS_NAME!7000:!15000:
        use                             longtime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
# Überwachung des Globalen Systemstatus
define service {                                              
        host_name                       ESXSERVER
        service_description             Runtime Status
        check_command                   check_esx3_host_runtime_status!esx_user!esx_pass
        use                             longtime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
# Überwachung von einer Virtuellen Maschine (CPU/MEM/SWAP)
define service {
        host_name                       ESXSERVER
        service_description             VMNAME CPU Usage
        check_command                   check_esx3_vm_cpu_usage!esx_user!esx_pass!VMNAME!90!95
        use                             longtime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
define service {
        host_name                       ESXSERVER
        service_description             VMNAME Mem Usage
        check_command                   check_esx3_vm_mem_usage!esx_user!esx_pass!VMNAME!90!95
        use                             longtime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}
define service {
        host_name                       ESXSERVER
        service_description             VMNAME Swap Usage
        check_command                   check_esx3_vm_swap_usage!esx_user!esx_pass!VMNAME!90!95
        use                             longtime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

SMS Benachrichtigungen verschicken mit Nagios & Gnokii

Installation Gnokii

aptitude install gnokii

Konfiguration Gnokii

Ich nutze ein Sony Ericsson K530i am USB Port, hier meine Konfig.
/etc/gnokiirc

[global]
port = /dev/ttyACM0
model = AT
initlength = default
connection = serial
use_locking = yes
serial_baudrate = 19200
smsc_timeout = 10
[xgnokii]
allow_breakage = 0
[gnokiid]
bindir = /usr/sbin/
[connect_script]
TELEPHONE = 12345678
[disconnect_script]
[logging]
debug = off
rlpdebug = off
xdebug = off

Konfigurationstest:

gnokii --config /etc/gnokiirc --monitor once

hier sollte ungefähr folgende Ausgabe kommen:

GNOKII Version 0.6.26
Entering monitor mode...
Network: D2, Germany (262 07)
LAC: a102 (4xx1x), CellID: 00xxea2x (5xx3x)
RFLevel: 16
Battery: 89
Power Source: AC-DC
SIM: Used 20, Free 730
Phone: Used 65, Free 2435
DC: Used 11, Free 19
LD: Used 11, Free 19
MC: Used 12, Free 18
ON: Used 0, Free 1000
RC: Used 7, Free 23
CALL0: IDLE
CALL1: IDLE
Leaving monitor mode...

Eine Test SMS kann so verschickt werden:

echo "Hello world" | gnokii --config /etc/gnokiirc --sendsms 01721234456 -r

Konfiguration der Nagios SMS Benachrichtigung

Zuerst das Skript anlegen welches für den SMS Versand zuständig ist:
/usr/lib/nagios/plugins/sms_notification_by_gnokii

#!/bin/sh
#
# Gnokii Plugin script
# (c) Horst venzke
# v 0.1 - 17.01.2004

mess=$2
number=$1
echo "${mess}" | gnokii --sendsms ${number}

Dann noch dem Skript das Ausführrecht geben:

chmod +x /usr/lib/nagios/plugins/sms_notification_by_gnokii

Nun kann die SMS Benachrichtigung in die Nagios Konfiguration aufgenommen werden. Hierfür müssen folgende Zeilen in die /etc/nagios3/commands.cfg in der NOTIFICATION COMMANDS Sektion eingefügt werden:

define command {
        command_name service-notify-by-gnokii
        command_line $USER1$/sms_notification_by_gnokii $CONTACTPAGER$ "$NOTIFICATIONTYPE$ - $HOSTNAME$/$SERVICEDESC$ is $SERVICESTATE$ - $SERVICEOUTPUT$"
        }

define command {
        command_name host-notify-by-gnokii
        command_line $USER1$/sms_notification_by_gnokii $CONTACTPAGER$ "Nagios Host Alert - $HOSTALIAS$ is $HOSTSTATE$; $OUTPUT$; $DATETIME$"
        }

So, nun kann die neue SMS Benachrichtigung in der Kontakt Datei verwendet werden:
/etc/nagios3/conf.d/contacts_nagios2.cfg

define contact{
        contact_name                    contact_mail_sms
        alias                           Admin Mail and SMS
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    c
        host_notification_options       d
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        email                           mail@domain.de
        service_notification_commands   service-notify-by-gnokii
        host_notification_commands      host-notify-by-gnokii
        pager                           +491744556677
        }

define contactgroup{
        contactgroup_name       smsmailadmins
        alias                   SMS and Mail Administrators
        members                 contact_mail_sms
        }

Nun kann man die "smsmailadmins" Gruppe in den Services zur Alarmierung nutzen:
Ich habe hierfür einen neuen Service "critical-service" angelegt:
/etc/nagios3/conf.d/generic-service_nagios2.cfg

define service{
        name                            critical-service ; The 'name' of this service template
        active_checks_enabled           1       ; Active service checks are enabled
        passive_checks_enabled          1       ; Passive service checks are enabled/accepted
        parallelize_check               1       ; Active service checks should be parallelized (disabling this can lead to major performance problems)
        obsess_over_service             1       ; We should obsess over this service (if necessary)
        check_freshness                 0       ; Default is to NOT check service 'freshness'
        notifications_enabled           1       ; Service notifications are enabled
        event_handler_enabled           1       ; Service event handler is enabled
        flap_detection_enabled          1       ; Flap detection is enabled
        failure_prediction_enabled      1       ; Failure prediction is enabled
        process_perf_data               1       ; Process performance data
        retain_status_information       1       ; Retain status information across program restarts
        retain_nonstatus_information    1       ; Retain non-status information across program restarts
                notification_interval           0               ; Only send notifications on status change by default.
                is_volatile                     0
                check_period                    24x7
                normal_check_interval           3
                retry_check_interval            2
                max_check_attempts              4
                notification_period             24x7
                notification_options            w,u,c,r
                contact_groups                  smsmailadmins
        register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }

Dieser kann dann zum Beispiel bei der DNS Server Abfrage verwendet werden:

define service {
        host_name                       hostname
        service_description             DNS
        check_command                   check_dns
        use                             critical-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

Handy Verbindung mit dem Server überwachen

Da ich ab und an das Problem hatte das die USB Verbindung vom Handy zum Server unterbrochen wurde oder gar ganz weg war, hab ich hier ein kleines Nagios Plugin geschrieben, welches überwacht ob das Handy für gnokii auslesbar ist.
check_phone.sh

#!/bin/sh
#########################################################################################
#check_phone.sh
#by A. Laub andreas@laub-home.de
#this Script reads a Backup Logfile which contains one line in this format:
#       201005131629 ERROR: Backup has Problems
#   or
#       201005131629 SUCCESS: Backup runs well
#date Format is: date +%Y%m%d%H%M
#
#run script:
#       check_phone.sh [LOGFILE] [TIME]
#
#License:
#This program is free software: you can redistribute it and/or modify it
#under the terms of the GNU General Public License as published by the
#Free Software Foundation, either version 3 of the License, or (at your option)
#any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
#or FITNESS FOR A PARTICULAR PURPOSE.
########################################################################################

#Load the Pathes
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH

/usr/bin/gnokii --config /etc/gnokiirc --monitor once > /dev/null 2>&1
ERRORCODE=$?

if [ $ERRORCODE = 5 ]; then
        echo "OK - Mobile Phone is connected"
        exit 0
fi
if [ $ERRORCODE = 2 ]; then
        echo "CRITICAL - Mobile Phone is not connected"
        exit 2
fi
echo "CRITICAL - other Error"
exit 2

Dieses Script sollte am besten nach /usr/lib/nagios/plugins/ kopiert werden und das Ausführecht bekommen.
Nun die Plugin Konfigurationsdatei unter /etc/nagios-plugins/config anlegen:
check_phone.cfg

# 'check_mobile' command definition
define command{
        command_name    check_phone
        command_line    /usr/lib/nagios/plugins/check_phone.sh
        }

Und nun das ganze in die Nagios Konfiguration des Hostes:
zum Beispiel:

# check mobile phone
define service {
        host_name                       nagios-server
        service_description             Mobile Phone
        check_command                   check_phone
        use                             longtime-service
        notification_interval           0 ; set > 0 if you want to be renotified
}

Nun noch die Rechte vergeben:

usermod nagios -G dialout

Quellen