Nagios Installation/Nagios installieren

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

Navigation

Einleitung

Diese Seite beschäftigt sich ausschließlich nur mit der Installation und Grundkonfiguration der jeweiligen Programme, Tools und AddOns. Die eigentliche Konfiguration erfolgt auf der nachfolgenden Seite.

Nagios 3 installieren

Die Grundinstallation von Nagios ist in wenigen Zügen möglich. Bei dem Übersetzen des Nagios-Kerns muss jedoch darauf geachtet werden, dass die entsprechenden Entwicklerpakete vorhanden sind. Dazu zählen nicht nur die Klassiker wie GCC, sondern vor allem die Bibliotheken wie OpenSSL, GD und Co.
Fangen wir an:

Nagios kompilieren

  • Nagios auspacken und übersetzen
Da ich gern alles beieinander habe, kopiere ich die Quellcode Pakete nach /usr/src/nagios/ und entpacke sie dort:
Gnome-terminal.png
master :~# cd /usr/src/nagios
master :/usr/src/nagios# tar xzf nagios-3.0.6.tar.gz
master :/usr/src/nagios# cd nagios-3.0.6
master :/usr/src/nagios/nagios-3.0.6#


Messagebox info.png

Damit check_multi seine Arbeit korrekt ausführen kann, muss der Buffer erhöht werden:

master :/usr/src/nagios/nagios-3.0.6# vi include/nagios.h -> #define MAX_PLUGIN_OUTPUT_LENGTH 8192
master :/usr/src/nagios/nagios-3.0.6# vi include/common.h -> #define MAX_INPUT_BUFFER 8192

  • Benutzer und Gruppe
Als nächstes möchten wir Nagios übersetzen und nach /usr/local/nagios installieren lassen. Vorher müssen noch einige Vorkehrungen getroffen werden. Wir benötigen einen entsprechenden Benutzer und zwei Gruppen für Nagios. Eine für Nagios selbst und eine, in der auch der Apache Webserver sein wird.
Gnome-terminal.png
master :~# groupadd nagios
master :~# groupadd nagcmd
master :~# usermod -G nagcmd www-data                                  <-- (Bei SuSE wwwrun anstatt www-data)
master :~# useradd -d /usr/local/nagios -s /bin/bash -g nagios nagios
Nun fehlen noch die entsprechend nötigen Pakete zum Kompilieren, sowie Apache zzgl. PHP, und dann kann übersetzt werden:
  • Debian
Debian-term.png
 master :~# apt-get install apache2 build-essential libgd-dev libperl-dev php5-mysql libapache2-mod-php5 php5-gd 
 master :/usr/src/nagios/nagios-3.0.6# ./configure --enable-embedded-perl \ 
--enable-event-broker --with-httpd-conf=/etc/apache2/conf.d/ --with-command-group=nagcmd
 master :/usr/src/nagios/nagios-3.0.6# make all
 master :/usr/src/nagios/nagios-3.0.6# make fullinstall
 master :/usr/src/nagios/nagios-3.0.6# make install-init install-config install-commandmode
  • SuSE
Suse-term.png
 master :~# yast -i gcc apache2 gd-devel apache2-mod_php5 php5-gd php5-mysql
 master :/usr/src/nagios/nagios-3.0.6# ./configure --enable-embedded-perl  \
--enable-event-broker --with-httpd-conf=/etc/apache2/conf.d/ --with-command-group=nagcmd
 master :/usr/src/nagios/nagios-3.0.6# make fullinstall
 master :/usr/src/nagios/nagios-3.0.6# make install-init und make install-config install-commandmode

Nagios-Plugins kompilieren

  • Auspacken und übersetzen
Gnome-terminal.png
master:/usr/src/nagios# tar xzf nagios-plugins-1.4.11.tar.gz 
master:/usr/src/nagios# cd nagios-plugins-1.4.11


Je nach dem, welche Plugins zum Einsatz kommen, werden unterschiedlich viele Entwicklerpakete benötigt. In diesem Fall verwende ich folgende Pakete
  • Debian
Debian-term.png
 master :~# apt-get install libssl-dev libmysqlclient15-dev libsnmp-base  snmp  libnet-snmp-perl
 master :/usr/src/nagios/nagios-plugins-1.4.11# ./configure
 master :/usr/src/nagios/nagios-plugins-1.4.11# make install  
  • SuSE
Suse-term.png
master :~# yast -i openssl-devel net-snmp perl-Net-SNMP mysql-devel
master :/usr/src/nagios/nagios-plugins-1.4.11# ./configure
master :/usr/src/nagios/nagios-plugins-1.4.11#  make install


Nagios Grundkonfiguration

Ist Nagios selbst mit seinen Plugins installiert worden, kann es auch schon an die Grundkonfiguration gehen. Da Nagios über eine Weboberfläche verfügt, über die zuvor eine Authentifizierung erfolgen muss, müssen wir zuerst die Benutzerdatenbank erstellen.
Gnome-terminal.png
master :~# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
<password>
<password>
master :~# /etc/init.d/nagios start
master :~# /etc/init.d/apache2 restart
Wird ein anderer Benutzername vorgezogen, so ist dies in der /usr/local/nagios/etc/cgi.cfg anzupassen.
Es sollte nach dieser Prozedur möglich sein, auf die Webseite http://master/nagios/ zuzugreifen und die Testkonfiguration in Augenschein nehmen. Um zu schauen, ob die Rechte in Ordnung sind, lohnt es sich, einen Servicecheck aufzurufen und die Notification zu deaktivieren od. einen neuen Check zu forcieren.
Damit Nagios automatisch startet, ist meistens notwendig, den Dienst in die Runlevels einzutragen.
  • Debian
Debian-term.png
master: ~# update-rc.d nagios defaults
  • SuSE
Suse-term.png
master: ~# insserv -d nagios

Nagios Datenbank Support - NDOUtils

Hat die Installation bis zu diesem Punkt geklappt, kann nun der Datenbank-Support eingerichtet werden. Die NDOUtils unterstützen zwar MySQL und PostgreSQL, doch ist letzteres noch nicht ausgereift genug. Es empfiehlt sich daher, vorläufig auf MySQL zu setzen, solang wie die Codeteile für PostgreSQL noch in der Entwicklung sind.

Installation

  • Auspacken und übersetzen
  • Debian
Debian-term.png
master:/usr/src/nagios# tar xzf ndoutils-1.4b7.tar.gz 
master:/usr/src/nagios# cd ndoutils-1.4b7
master:/usr/src/nagios/ndoutils-1.4b7# apt-get install mysql-server
master:/usr/src/nagios/ndoutils-1.4b7# ./configure && make
  • SuSE
Suse-term.png
master:/usr/src/nagios# tar xzf ndoutils-1.4b7.tar.gz 
master:/usr/src/nagios# cd ndoutils-1.4b7
master:/usr/src/nagios/ndoutils-1.4b7# yast -i mysql perl-DBD-mysql
master:/usr/src/nagios/ndoutils-1.4b7# ./configure && make
  • Dann die folgenden Dateien an die jeweiligen Orte kopieren:
Gnome-terminal.png
master:/usr/src/nagios/ndoutils-1.4b7# cp src/ndo2db-3x /usr/local/nagios/bin/ndo2db
master:/usr/src/nagios/ndoutils-1.4b7# cp src/ndomod-3x.o /usr/local/nagios/bin/ndomod.o
master:/usr/src/nagios/ndoutils-1.4b7# cp config/misccommands.cfg /usr/local/nagios/etc/objects/
master:/usr/src/nagios/ndoutils-1.4b7# cp config/ndo2db.cfg /usr/local/nagios/etc/
master:/usr/src/nagios/ndoutils-1.4b7# cp config/ndomod.cfg /usr/local/nagios/etc/

ndo2db ist der Daemon, der die Verbindung zwischen SQL und Nagios herstellt, und ndomod.o ist das Modul, welches über den eventhandler von Nagios aufgerufen wird.

Dialog-warning.png

Es muss unbedingt das zur Nagios-Version passende Modul sein. Für Nagios3 ist es ndomod-3x.o und ndo2db-3x Die Dateien mit -2x sind für das ältere Nagios in der Version 2!

  • Datenbank initialisieren
Als nächstes erfolgt das Einrichten der Datenbank. Dazu sollte ein Benutzer nagios und eine Datenbank nagios in MySQL existieren. Der Benutzer benötigt nur SELECT, INSERT, UPDATE, DELETE-Rechte auf diese eine Datenbank.
Gnome-terminal.png
master:/usr/src/nagios/ndoutils-1.4b7# mysqladmin create nagios -p
master:/usr/src/nagios/ndoutils-1.4b7# cd db
master:/usr/src/nagios/ndoutils-1.4b7/db# ./installdb -u root -p secret  -h localhost -d nagios
** Creating tables for version 1.4b7
     Using mysql.sql for installation...
** Updating table nagios_dbversion
Done!
  • Syntax: -u = user; -p = password; -h = Datenbankserver; -d = MySQL DB
Der Befehl mysqlshow nagios sollte dann eine lange Liste von Tabellen auflisten.
  • MySQL Benutzer erzeugen:
Da es schlecht ist, mit dem Benutzer Root auf die Datenbank zuzugreifen, erstellen wir einen dedizierten Benutzer, der über nur sehr eingeschränkte Rechte verfügt.
Hier erstellen wir den MySQL Benutzer nagios, der von localhost auf die Datenbank nagios mit dem Kennwort secret zugreifen darf:
Gnome-terminal.png
master:~# mysql

mysql> GRANT SELECT,INSERT,UPDATE,DELETE
    -> ON nagios.*
    -> TO 'nagios'@'localhost'
    -> IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.01 sec)

mysql> quit
Bye
  • Den neu erstellen Account können wir nun testen:
Gnome-terminal.png
master:~# mysql -unagios -psecret -Dnagios
...
mysql> show tables;
Hat dies geklappt, kann nun mit der Konfiguration fortgefahren werden.

Konfiguration

Damit Nagios nun auch von seinem Glück etwas weiß, müssen wir ihm mitteilen, er möge doch bitte bei jeder Aktion ein Modul darüber informieren. Dazu öffnen wir die /usr/local/nagios/etc/nagios.cfg und passen sie ein wenig an:
  • /usr/local/nagios/etc/nagios.cfg
Ascii.png
event_broker_options=-1
broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg
Als nächstes erfolgt die Konfiguration der NDOUtils selbst. Die Utils verfügen über zwei Konfigurationsdateien. Eine kümmert sich nur um den Daemon, die Andere ist für das Nagios-Modul zuständig.
Für die Kommunikation zwischen dem Modul und dem Daemon existieren drei Möglichkeiten:
  • File - Es wird eine Datei geschrieben und gelesen
  • Unix - Die Kommunikation erfolgt über Unix Sockets
  • TCP - Hier wird TCP als Verbindungsglied genutzt
Normalerweise werden Unix-Sockets bevorzugt, da sie zumeist schneller sind als die Pakete über TCP zu senden, doch in diesem Fall verwenden wir TCP, da die Verbindung stabiler arbeitet:
  • /usr/local/nagios/etc/ndo2db.cfg
Ascii.png
ndo2db_user=nagios
ndo2db_group=nagios
socket_type=tcp
socket_name=/usr/local/nagios/var/ndo.sock
tcp_port=5668
db_servertype=mysql
db_host=localhost
db_port=3306
db_name=nagios
db_prefix=nagios_
db_user=nagios
db_pass=secret
max_timedevents_age=1440
max_systemcommands_age=10080
max_servicechecks_age=10080
max_hostchecks_age=10080
max_eventhandlers_age=44640
# Values: -1 = Everything
#          0 = Nothing
#          1 = Process info
#          2 = SQL queries
debug_level=1

# DEBUG VERBOSITY
# This option determines how verbose the debug log out will be.
# Values: 0 = Brief output
#         1 = More detailed
#         2 = Very detailed

debug_verbosity=0
debug_file=/usr/local/nagios/var/ndo2db.debug
max_debug_file_size=1000000
Benutzername, Datenbank und Passwort müssen natürlich den lokalen Gegebenheiten angepasst werden.
Bei Problemen empfiehlt sich den Debug-Modus zu aktivieren. Er gibt Auskunft darüber, was gerade vor sich geht.
Dialog-warning.png

Wurde der Debug-Modus aktiviert, verlangsamt dies Nagios beträchtlich und darf daher nicht vergessen werden, wieder zu deaktivieren.

Folgt nun als nächstes die Konfiguration des Moduls:
  • /usr/local/nagios/etc/ndomod.cfg
Ascii.png
instance_name=default
output_type=tcpsocket
output=127.0.0.1
tcp_port=5668
output_buffer_items=5000
buffer_file=/usr/local/nagios/var/ndomod.tmp
file_rotation_interval=14400
file_rotation_timeout=60
reconnect_interval=15
reconnect_warning_interval=15
data_processing_options=-1
config_output_options=2
Danach muss der NDO-Damon gestartet werden, am besten als Benutzer nagios:
Gnome-terminal.png
master:~# su - nagios -c "/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg"
Fehlt nur noch Nagios selbst neuzustarten:
Gnome-terminal.png
master:~# /etc/init.d/nagios restart
Ob das geklappt hat, lässt sich über folgenden MySQL-Befehl abfragen:
Gnome-terminal.png
master:~# mysql -p nagios -e 'select alias,address,display_name from nagios_hosts'
Eine mögliche Ausgabe kann so aussehen:
Gnome-terminal.png
+-----------+-------------+--------------+
| alias     | address     | display_name |
+-----------+-------------+--------------+
| localhost | 127.0.0.1   | localhost    | 
| master    | 192.168.5.1 | master       | 
+-----------+-------------+--------------+
Für einen Test habe ich eine Kopie angefertigt (cp /usr/local/nagios/etc/objects/localhost.cfg /usr/local/nagios/etc/objects/master.cfg) und in der Kopie werden die IP-Adressen von localhost auf die normale IP-Adresse geändert. Nach diesem Akt ist eine Zeile in der Nagios-Hauptkonfiguration nagios.cfg einzufügen, die die neue Konfig. Datei beinhaltet.
  • /usr/local/nagios/etc/nagios.cfg
Ascii.png
cfg_file=/usr/local/nagios/etc/objects/master.cfg
Nach einem Reload/Restart von Nagios muss der neue Host in der Tabelle oben vorhanden sein. Ist dies der Fall, so war die Konfiguration der NDOUtils erfolgreich.
  • Automatischer Start
Damit beim nächsten Start des Servers od. Nagios auch die NDOUtils laufen, erweitern wir das Startscript von Nagios selbst ein wenig. Dazu öffnen wir die /etc/init.d/nagios und erweitern sie:
  • /etc/init.d/nagios
Ascii.png
-- ~ Zeile 127 --
[...]
su - $NagiosUser -c "/usr/local/nagios/bin/ndo2db -c /usr/local/nagios/etc/ndo2db.cfg"
su - $NagiosUser -c "touch $NagiosVarDir/nagios.log $NagiosRetentionFile"
[...]
-- ~ Zeile 147 --
pid_nagios
killproc_nagios nagios
killall ndo2db
[...]

Nagios Process Business View

Für die spätere Verknüpfung einzelner Hosts und Services zu einem Ganzen, kommt nun das AddOn Nagios Process Business View an die Reihe.

Installation

Dieses benötigt einige Perl Module, welche - sofern vorhanden - von der Distribution übernommen werden können, od. aus dem CPAN Archiv.
Das Paket selbst kann von hier bezogen werden.
  • Auspacken und an Ort und Stelle verschieben
Gnome-terminal.png
master:/usr/src/nagios# tar xzf nagios-business-process-addon-0.9.1.tar.gz
mv nagios-ext/ /usr/local/
Es empfiehlt sich den Pfad /usr/local/nagios-ext' bei zu behalten, da sonst eine Menge Pfade innerhalb der CGI Dateien angepasst werden müssen.
  • Perl Module
  • Debian
Debian-term.png
master:~# apt-get install libcgi-simple-perl
  • Über CPAN
Gnome-terminal.png
master:~# perl -MCPAN -e 'install CGI::Simple'
  • Aus dem Archiv
Gnome-terminal.png
master:/usr/local/nagios # tar xvzf CGI-Simple.tar.gz
master:/usr/local/nagios # cd CGI-Simple
master:/usr/local/nagios # perl Makefile.pl
master:/usr/local/nagios # make && make install
Dann müssen nach dem entpacken und kopieren einige Perl Module in ein Perl Verzeichnis gelinkt werden. Welche Verzeichnisse von Perl beachtet werden, lässt sich mit folgendem Befehl anzeigen:
Gnome-terminal.png
master:~# perl -e 'print join("\n", @INC) . "\n"'

/etc/perl
/usr/local/lib/perl/5.8.8
/usr/local/share/perl/5.8.8
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.8
/usr/share/perl/5.8
/usr/local/lib/site_perl
.
In diesem Fall verwenden wir das /usr/lib/perl/5.8.8 Verzeichnis:
Gnome-terminal.png
master: ~# cd /usr/lib/perl/5.8.8
master: /usr/lib/perl/5.8.8# ln -s /usr/local/nagios-ext/sbin/nagiosBp.pm 
master: /usr/lib/perl/5.8.8# ln -s /usr/local/nagios-ext/sbin/ndodb.pm 
master: /usr/lib/perl/5.8.8# ln -s /usr/local/nagios-ext/sbin/bsutils.pm 

Konfiguration

Nun folgt die Datenbank Konfiguration. Die Daten sind die gleichen, wie sie die NDOUtils nutzen:
  • /usr/local/nagios-ext/etc/ndo_db_readonly.cfg
Ascii.png
ndodb_host=localhost
ndodb_port=3306
ndodb_database=nagios
ndodb_username=nagios
ndodb_password=secret
ndodb_prefix=nagios_
  • Impact Plugin
Das Impact Plugin kann eine Art Worst-Case' Szenario abbilden. Also was passiert wenn Host X und/oder Service Y ausfallen. Es dient allerdings in erster Linie dazu, die eigene Konfiguration zu kontrollieren, ob die Abhängigkeiten korrekt in der Konfiguration umgesetzt worden sind.
Damit diese Erweiterung arbeiten kann, wird ein Verzeichnis benötigt, auf welches der Webserver schreibend zugreifen kann. Das Verzeichnis kann über /usr/local/nagios-ext/sbin/nagios-bp.cgi gewählt werden:
  • Debian
  • /usr/local/nagios-ext/sbin/nagios-bp.cgi
Ascii.png
my $session_dir = "/var/www/nagios_bp.sessions";
Debian-term.png
master: ~# mkdir -p /var/www/nagios_bp.sessions
master: ~# chown www-data:www-data /var/www/nagios_bp.sessions
master: ~# chmod 750 /var/www/nagios_bp.sessions
  • SuSE
  • /usr/local/nagios-ext/sbin/nagios-bp.cgi
Ascii.png
my $session_dir = "/srv/www/nagios_bp.sessions";
Suse-term.png
master: ~# mkdir -p /srv/www/nagios_bp.sessions
master: ~# chown www-run:www /srv/www/nagios_bp.sessions
master: ~# chmod 750 /srv/www/nagios_bp.sessions
  • HTML Seite und Apache
Damit dieses neue Verzeichnis vom Apachen mit eingebunden wird, bedarf es einer Anpassung der von Nagios angelegten Konfiguration. Die Nachfolgenden Zeilen kommen an das Ende der /etc/apache2/conf.d/nagios Datei.
  • /etc/apache2/conf.d/nagios
Ascii.png
[...]
ScriptAlias /nagios-ext/cgi-bin /usr/local/nagios-ext/sbin
                <Directory "/usr/local/nagios-ext/sbin">
                    Options ExecCGI
                    AllowOverride None
                    Order allow,deny
                    Allow from all
                    AuthName "Nagios Access"
                    AuthType Basic
                    AuthUserFile /usr/local/nagios/etc/htpasswd.users
                    Require valid-user
                </Directory>
                Alias /nagios-ext /usr/local/nagios-ext/share
                <Directory "/usr/local/nagios-ext/share">
                    Options None
                    AllowOverride None
                    Order allow,deny
                    Allow from all
                    AuthName "Nagios Access"
                    AuthType Basic
                    AuthUserFile /usr/local/nagios/etc/htpasswd.users
                    Require valid-user
                </Directory>
  • Nun den Apache neustarten:
Gnome-terminal.png
master: ~# /etc/init.dapache2 reload
Damit nun auch der Zugriff bequem erfolgen kann, muss die Hauptseite von Nagios einige zusätzliche Links erhalten. Dazu öffnen wir die /usr/local/nagios/share/side.html und erweitern sie:
  • /usr/local/nagios/share/side.html
Ascii.png
--- Nach Zeile ~143 --
<tr>
  <td width=13><img src="images/greendot.gif" width="13" height="14" name="statuswrl-dot"></td>
  <td nowrap><a href="/nagios-ext/cgi-bin/nagios-bp.cgi" target="main" onMouseOver="switchdot('statuswrl-dot',1)" onMouseOut="switchdot('statuswrl-dot',0)" class="NavBarItem">Business Process View</a></td>
</tr>
<tr>
  <td width=13><img src="images/greendot.gif" width="13" height="14" name="statuswrl-dot"></td>
  <td nowrap><a href="/nagios-ext/cgi-bin/nagios-bp.cgi?mode=bi" target="main" onMouseOver="switchdot('statuswrl-dot',1)"onMouseOut="switchdot('statuswrl-dot',0)" class="NavBarItem">Business Impact</a></td>
</tr>
Nach dem neuladen der Seite im Browser (FF: Shift +F5), sollten zwei neue Links auftauchen. Dank der Beispiel Konfiguration können die ersten Klicks ausprobiert werden. Nicht verwundern sollte der Status, denn die dort angegebenen Hosts und Services existieren natürlich nicht. Aber die Funktion an sich wird damit bestätigt.

SNMP NagTrap

Wer über Geräte verfügt, die keinen direkten Zugriff per SNMP erlauben sondern nur Traps senden, der benötigt einen entsprechenden Empfänger und ein Programm zu ordnen der jeweiligen Traps.
Der Empfänger in diesem Fall ist der snmptrapd' und der Sortierer snmptt. Der snmptt schreibt die bekannten und (wenn gewünscht) unbekannten Traps in eine Datenbank.
Für die Weboberfläche ist dann NagTrap zuständig.:

NagTrap Installation

NagTrap selbst kann von hier besorgt werden.
Gnome-terminal.png
master:/usr/src/nagios# tar xzf nagtrap-0.1.2.tar.gz
master:/usr/src/nagios# mv nagtrap/nagtrap/ /usr/local/nagios/share/
master:/usr/src/nagios# cp  nagtrap/plugin/check_snmp_traps.pl /usr/local/nagios/libexec/check_snmp_traps
'snmptt verwendet wie bereits erwähnt eine eigene Datenbank. Diese muss natürlich zuerst erstellt werden, um diese dann zu füllen. Dazu findeen sich im entpackten Verzeichnis nagtrap/db/ drei SQL Dateien. Da wir die neueste snmptt verwenden wollen, enscheiden wir uns für nagtrap/db/snmptt-1.2.sql:
Gnome-terminal.png
master:/usr/src/nagios# tar xzf nagtrap-0.1.2.tar.gz
master:/usr/src/nagios# mv nagtrap/nagtrap/ /usr/local/nagios/share/
master:/usr/src/nagios# cp  nagtrap/plugin/check_snmptraps.pl /usr/local/nagios/libexec/check_snmp_traps
Nun erstellen wir die Datenbank zzgl. Benutzer:
Gnome-terminal.png
master:/usr/src/nagios# mysqladmin create snmptt -p
master:/usr/src/nagios# mysql snmptt < nagtrap/db/snmptt-1.2.sql -p
master:/usr/src/nagios# mysql

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON snmptt.* TO 'snmptt'@'localhost' IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.00 sec)

mysql> quit
  • Dann erfolgt der obligatorische Test.
Gnome-terminal.png
master:/usr/src/nagios# mysql -usnmptt -psecret -Dsnmptt

mysql> show tables;
+------------------+
| Tables_in_snmptt |
+------------------+
| snmptt           | 
| snmptt_archive   | 
+------------------+
2 rows in set (0.01 sec)

mysql> quit
Bye
Klappt also. Wer auch die unbekannten Traps in der Datenbank haben möchte, muss noch folgenden Befehl absetzen:
Gnome-terminal.png
master:/usr/src/nagios# mysql snmptt < nagtrap/db/snmptt_unknown.sql

NagTrap Konfiguration

Damit das Plugin nun von den neuen Gegebenheiten weiß, passen wir das Perl Plugin entsprechen an:
  • /usr/local/nagios/libexec/check_snmp_traps
Ascii.png
# ==================== Database connect information ====================
my $dbHost = "localhost";
my $dbName = "snmptt";
my $dbUser = "snmptt";
my $dbPass = "secret";
my $dbTable = "snmptt";
....
# ==================== Load Perl modules ====================
use strict;
use Getopt::Long;
use vars qw($PROGNAME);
use lib "/usr/local/nagios/libexec/"; # Pfad zur util.pm !!
  • NagTap Konfiguration
Folgt als nächstes die NagTrap Konfiguration selbst. Dazu begeben wir uns in das Verzeichnis von NagTrap und kopieren die Beispiel Konfig:
Gnome-terminal.png
master:~# cd /usr/local/nagios/share/nagtrap
master:/usr/local/nagios/share/nagtrap# cp etc/config.ini.php-dist etc/config.ini.php
Und passen sie gleich an:
  • /usr/local/nagios/share/nagtrap/etc/config.ini.php
Ascii.png
[global]
language = DE
useAuthentification = 1
allowedUser = nagiosadmin
useUnknownTraps = 0
step = 30
images = ./images/
iconStyle = dropline
cutTrapMessage = 100
illegalCharJavabox = <,>,'
[nagios]
prefix = /nagios
images = ../images/
[database]
host = localhost
user = snmptt
password = secret
name = snmptt
tableSnmptt = snmptt
tableSnmpttUnk = snmptt_unknown
[internal]
version = Version 0.1.2
title = NagTrap
  • HTML Link
Wir gewohnt, für den einfachen Zugriff auf die NatTrap Seite, der entsprechende Link in der side.htm.:
  • /usr/local/nagios/share/side.html
Ascii.png
-- ~ Nach Zeile 147 --
<tr>
  <td width=13><img src="images/greendot.gif" width="13" height="14" name="statuswrl-dot"></td>
  <td nowrap><a href="/nagios/nagtrap/index.php" target="main" onMouseOver="switchdot('statuswrl-dot',1)"onMouseOut="switchdot('statuswrl-dot',0)" class="NavBarItem">NagTrap</a></td>
</tr>

SNMP TrapReceiver

Um einen Trapreceiver einzurichten, benötigt es das Paket net-snmp, in dem das Programm snmptrapd enthalten ist. Dieser ist in allen Distributionen enthalten und kann daher einfach installiert werden:
  • Debian
Debian-term.png
master:~# apt-get install snmpd libconfig-inifiles-perl libsnmp-base libsnmp-perl
  • SuSE
Suse-term.png
master:~# yast -i net-snmp perl-Config-IniFiles
Letzteres Paket ist nötig, damit snmptt Dateien im "ini Stil lesen kann.
Nun kommt 'snmptt selbst. Er kann von hier besorgt werden. Da er nur aus einer Reihe von Perl Scripten besteht, reicht ein auspacken, um die Dateien anschließend in die jeweiligen Verzeichnisse zu kopieren:
Gnome-terminal.png
master:/usr/src/nagios# cp snmptt_1.2/snmptt /usr/sbin/
master:/usr/src/nagios# cp snmptt_1.2/snmptthandler /usr/sbin/
master:/usr/src/nagios# cp snmptt_1.2/snmpttconvert* /usr/bin/
master:/usr/src/nagios# cp snmptt_1.2/snmptt.ini /etc/snmp/
master:/usr/src/nagios# chmod +x /usr/bin/snmpttconvert*
master:/usr/src/nagios# chmod +x /usr/sbin/snmptt*
snmptt kann endweder im Standalone Modues laufen, oder im Daemon Modues. In diesem Szenario entscheiden wir uns für die Daemon Variente. Daher schaut eine Konfiguration so aus:
  • /etc/snmp/snmptt.ini
Ascii.png
[General]
snmptt_system_name = master
mode = daemon
multiple_event = 1
dns_enable = 0
strip_domain = 0
strip_domain_list = <<END
nagios.local
END
resolve_value_ip_addresses = 0
net_snmp_perl_enable = 1
net_snmp_perl_best_guess = 1
translate_log_trap_oid = 0
translate_value_oids = 1
translate_enterprise_oid_format = 1
translate_trap_oid_format = 1
translate_varname_oid_format = 1
translate_integers = 1
mibs_environment = ALL
wildcard_expansion_separator = " "
allow_unsafe_regex = 0
remove_backslash_from_quotes = 0
dynamic_nodes = 0
description_mode = 0
description_clean = 1
threads_enable = 0
threads_max = 10
[DaemonMode]
daemon_fork = 1
daemon_uid = nagios
pid_file = /var/run/snmptt.pid
spool_directory = /var/spool/snmptt/
sleep = 5
use_trap_time = 1
keep_unlogged_traps = 1
[Logging]
stdout_enable = 0
log_enable = 1
log_file = /var/log/snmptt.log
log_system_enable = 1
log_system_file = /var/log/snmpttsystem.log
unknown_trap_log_enable = 1
unknown_trap_log_file = /var/log/snmpttunknown.log
statistics_interval = 0
syslog_enable = 0
syslog_facility = local0
syslog_level_debug = <<END
END
syslog_level_info = <<END
END
syslog_level_notice = <<END
END
syslog_level_warning = <<END
END
syslog_level_err = <<END
END
syslog_level_crit = <<END
END
syslog_level_alert = <<END
END
syslog_level = warning
syslog_system_enable = 0
syslog_system_facility = local0
syslog_system_level = warning
[SQL]
db_translate_enterprise = 0
db_unknown_trap_format = '$-*'
sql_custom_columns = <<END
END
sql_custom_columns_unknown = <<END
END
mysql_dbi_enable = 1
mysql_dbi_host = localhost
mysql_dbi_port = 3306
mysql_dbi_database = snmptt
mysql_dbi_table = snmptt
mysql_dbi_table_unknown = snmptt_unknown
mysql_dbi_table_statistics = 
mysql_dbi_username = snmptt
mysql_dbi_password = secret
mysql_ping_on_insert = 1
mysql_ping_interval = 300
postgresql_dbi_enable = 0
postgresql_dbi_module = 0
postgresql_dbi_hostport_enable = 0
postgresql_dbi_host = localhost
postgresql_dbi_port = 5432
postgresql_dbi_database = snmptt
postgresql_dbi_table_unknown = snmptt_unknown
postgresql_dbi_table_statistics = 
postgresql_dbi_table = snmptt
postgresql_dbi_username = snmpttuser
postgresql_dbi_password = password
postgresql_ping_on_insert = 1
postgresql_ping_interval = 300
dbd_odbc_enable = 0
dbd_odbc_dsn = snmptt
dbd_odbc_table = snmptt
dbd_odbc_table_unknown = snmptt_unknown
dbd_odbc_table_statistics = 
dbd_odbc_username = snmptt
dbd_odbc_password = password
dbd_odbc_ping_on_insert = 1
dbd_odbc_ping_interval = 300
[Exec]
exec_enable = 1
pre_exec_enable = 1
unknown_trap_exec = 
unknown_trap_exec_format = 
exec_escape = 1
[Debugging]
DEBUGGING = 2
DEBUGGING_FILE = /var/log/snmptt.debug
DEBUGGING_FILE_HANDLER = /var/log/snmptthandler.debug
[TrapFiles]
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
END
Dialog-warning.png
Auch hier sollte darauf geachtet werden, Debugging nach dem Funktionstest wieder zu deaktivieren
Besonders die Zeilen fast am Ende snmptt_conf_files = <<END /etc/snmp/snmptt.conf END bedürfen besonderer Aufmerksamkeit. Denn zwischen den END Schlüsselwörtern können eine Reihe von Trap Konfigurationen eingefügt werden. Für jedes Gerät, welches Traps versendet, sollte eine eigene Datei angelegt werden.
  • Init Script
Damit der snmptt auch beim nächsten Start mit hochkommt, verwenden wir ein angepassten Startscript.
  • /etc/init.d/snmptt
Ascii.png
#!/bin/bash
# init file for snmptt
# Alex Burger - 8/29/02
OPTIONS="--daemon"
RETVAL=0
prog="snmptt"

start() {
        echo -n $"Starting $prog: "
        /usr/sbin/snmptt $OPTIONS
        /usr/sbin/snmptrapd -Lf /var/log/snmptt.debug -On -C -c /etc/snmp/snmptrapd.conf
        RETVAL=$?
        echo
        touch /var/lock/snmptt
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        pkill snmptrapd
        killall snmptt 2>/dev/null
        RETVAL=$?
        echo
        rm -f /var/lock/snmptt
        if test -f /var/run/snmptt.pid ; then
          [ $RETVAL -eq 0 ] && rm -f /var/run/snmptt.pid
        fi
        return $RETVAL
}

reload(){
        echo -n $"Reloading config file: "
        killall snmptt -HUP
        RETVAL=$?
        echo
        return $RETVAL
}

restart(){
        stop
        start
}

condrestart(){
    [ -e /var/lock/snmptt ] && restart
    return 0
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  condrestart)
        condrestart
        ;;
  status)
        status snmptt
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|condrestart|reload}"
        RETVAL=1
esac

exit $RETVAL

SNMP TrapReceiver Konfiguration

Die Konfiguration ist recht einfach gehalten. Es genügt, wenn in der entsprechenden Datei, folgender zwei Einträge vorhanden sind:
  • /etc/snmp/snmptrapd.conf
Ascii.png
disableAuthorization yes
traphandle default /usr/sbin/snmptthandler
Insbesondere die erste Zeile ist wichtig, da sonst die Traps abgelehnt werden, dessen Urheber nicht bekannt ist.

SNMP Trap testen

Wenn die Arbeiten bis zu diesem Punkt abgeschlossen wurden, kann nun getestet werden, ob SNMPTT ordnungsgemäß funktioniert. Dazu müssen wir ihn natürlich starten:
Gnome-terminal.png
master: ~# /etc/init.d/snmptt start
Dabei sollten folgende Prozesse zu sehen sein:
Gnome-terminal.png
master:~# ps ax | grep snmp
 5964 ?        Ss     0:00 /usr/bin/perl /usr/sbin/snmptt --daemon
 5965 ?        Ss     0:00 /usr/bin/perl /usr/sbin/snmptt --daemon
 5967 ?        Ss     0:00 /usr/sbin/snmptrapd -Lf /var/log/snmptt.debug -On -C -c /etc/snmp/snmptrapd.conf
Ist dies der Fall, können wir einen ein Beispiel Trap in den Spool Ordner von SNMPTT kopieren, welcher dann diesen Trap verarbeitet. EIn solche Datei findet sich im Quellverzeichnis von SNMPTT:
Gnome-terminal.png
master:~# cp /usr/src/nagios/snmptt_1.2/sample-unknown-trap-daemon /var/spool/snmptt/
In der Logdatei /var/log/snmpttunknown.log befindet sich dann folgender Eintrag:
  • /var/log/snmpttunknown.log
Ascii.png
Mon Aug 16 16:06:35 2004: Unknown trap (.1.3.6.1.0.0.0.0.0) received from server01.domain.com at: 
Value 0: server01.domain.com
Value 1: 192.168.1.1
Value 2: 111:21:48:19.07
Value 3: .1.3.6.1.0.0.0.0.0
Value 4: 192.168.1.1
Value 5: public
Value 6: .1.3.6.1.4.1.232
Ent Value 0: .1.3.6.1.2.1.1.5.0=SERVER01
Ent Value 1: .1.3.6.1.4.1.232.11.2.11.1.0=0
Ent Value 2: .1.3.6.1.4.1.232.11.2.8.1.0=Sample Unknown Trap
Je nachdem, ob auch angegeben wurde, das unbekannte Traps auch in der Datenbank landen sollen, findet sich nun im NagTrap ebenfalls ein Eintrag.
Um nun aus diesem unbekannten Trap einen bekannten zu generieren, ordnen wir diesen Trap ein. Dazu wird die /etc/snmp/snmptt.conf verwendet.
  • /etc/snmp/snmptt.conf
Ascii.png
EVENT sysName.0 .1.3.6.1.0.0.0.0.0 "Status Events" Normal
MATCH $2: (^0$)
FORMAT TestTrap: $3
Der Match Eintrag beginnt ab dem ersten Ent Value zu zählen. Wir greifen uns also den Eintrag Ent Value 1 welcher die zweite Variable darstellt. Er fängt also mit 1 an zu zählen.
Nun wird noch der SNMPTT neugestartet:
Gnome-terminal.png
master: ~# /etc/init.d/snmptt stop
master: ~# /etc/init.d/snmptt start
Messagebox info.png

Die Funktion restart funktioniert noch nicht ordnungsgemäß

Nun kann erneut der Testtrap in das Spool Verzeichnis kopiert werden:
Gnome-terminal.png
master:~# cp /usr/src/nagios/snmptt_1.2/sample-unknown-trap-daemon /var/spool/snmptt/
Hat alles funktioniert, sollte ein Eintrag in der Datenbank enthalten sein und den Status normal besitzen:
Gnome-terminal.png
master:~# mysql -p snmptt -e 'select trapoid,hostname,category,severity from snmptt'
Enter password: 

+--------------------+---------------------+---------------+----------+
| trapoid            | hostname            | category      | severity |
+--------------------+---------------------+---------------+----------+
| .1.3.6.1.0.0.0.0.0 | server01.domain.com | Status Events | Normal   | 
+--------------------+---------------------+---------------+----------+
Damit ist SNMPTT funktionsfähig und kann nun verwendet werden.

Performance Grafiken mit PnP

Viele der Plugins liefern Performancedaten zurück. Es gibt viele Möglichkeiten, diese grafisch erzeugen zu lassen. Die einfachste Art dies zu tun, ist mittels der PHP Anwendung, PnP. Die Anwendung kann von hier kopiert werden.
Die Installation gestaltet sich recht einfach:

Installation

  • RRD Tool installieren
  • Debian
Debian-term.png
master:/usr/src/nagios# apt-get install rrdtool librrds-perl
  • SuSE
Suse-term.png
master:/usr/src/nagios# yast -i rrdtool
  • Auspacken und installieren
Gnome-terminal.png
master:/usr/src/nagios# tar xzf pnp-0.4.7.tar.gz
master:/usr/src/nagios# cd pnp-0.4.7
master:/usr/src/nagios/pnp-0.4.7# ./configure && make all && make install && make fullinstall
Das Script schaut nach, ob auch alles vorhanden ist und kopiert sich entsprechend nach /usr/local/nagios/

Konfiguration

PnP unterstützt mehrere Arten von Arbeitsweisen. Welche Art für einen selbst die Beste ist, hängt von der Anzahl der zu erzeugenden Grafiken ab. Derzeit existieren drei Möglichkeiten:
  • PnP Modus
    • Standard - Nagios ruft für jeden Check das Perl-Script process_perfdata.pl auf, um die Performance Daten zu verarbeiten. Das klappt bis ca. 2000 Services gut. Verursacht allerdings eine Hohe IO Last
    • Bulk Mode - Hier werden die Daten in eine Datei geschrieben und dann mit einem Schlag abgearbeitet. Verursacht wesentlich weniger Last, aber der Durchgang zum abarbeiten benötigt mehr Zeit pro Zyklus.
    • Bulk Mode mit NPCD - Hier überwacht ein Daemon ein Spool Verzeichnis, welches Performance Werte enthält. Der Vorteil besteht darin, dass Nagios nicht selbst das Perl Script aufrufen muss und damit sich sofort wieder seiner eigentlichen Arbeit widmen kann. Das Abarbeiten der Daten übernimmt der NPCD Daemon. Damit wird die Performance Auswertung komplett vom Nagios entkoppelt. Der Nachteil besteht darin, dass die Daten zumeist um 5 Minuten später erscheinen. Dies ist aber in den meisten Fällen sicher kein Problem.
Mehr zu den einzelnen Methoden finden sich auf der Webseite des Projektes.
  • Bulk Mode
In dieser Anleitung beschränke ich mich auf den Bulk Mode. Dafür müssen wir Nagios ein wenig anpassen und fügen dazu in seiner Hauptkonfigurations- Datei folgende Einträge hinzu:
  • /usr/local/nagios/etc/nagios.cfg
Ascii.png
 process_performance_data=1
#
# Service Performancedaten
#
service_perfdata_file=/usr/local/nagios/var/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file

#
# Host Performancedaten ab Nagios 3.x
# 
host_perfdata_file=/usr/local/nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file

Dialog-warning.png
Die Zeilen dürfen keinen Umbruch haben. Sie sind jeweils auf einer Zeile
Damit werden nun die Performance Daten ausgewertet und in die jeweilige Datei geschrieben.
Nun sind auch noch zwei neue Kommandos nötig, welche wir ebenfalls nachtragen. Dazu verwenden wir die Datei /usr/local/nagios/etc/objects/misccommands.cfg
  • /usr/local/nagios/etc/objects/misccommands.cfg
Ascii.png
define  command {
        command_name    process-host-perfdata-file
        command_line    $USER1$/process_perfdata.pl --bulk=/usr/local/nagios/var/host-perfdata
        }       

define  command {
        command_name    process-service-perfdata-file
        command_line    $USER1$/process_perfdata.pl --bulk=/usr/local/nagios/var/service-perfdata
        }
Damit diese Datei auch eingelesen wird, muss erneut die nagios.cfg aufgerufen werden um, folgende Zeile hinzuzufügen:
  • /usr/local/nagios/etc/nagios.cfg
Ascii.png
 ...
 cfg_file=/usr/local/nagios/etc/objects/misccommands.cfg
 ...
  • Dann geben wir Nagios Bescheid:
Gnome-terminal.png
master:~# /etc/init.d/nagios restart
Running configuration check...done.
Stopping nagios: done.
Starting nagios: done.
Als nächstes wird PnP selbst konfiguriert. Dazu kann ein wenig die /usr/local/nagios/etc/pnp/config.php angepasst werden:
  • /usr/local/nagios/etc/pnp/config.php
Ascii.png
<?php
$conf['rrdtool'] = "/usr/bin/rrdtool";
$conf['graph_width'] = "500";
$conf['graph_height'] = "100";
$conf['graph_opt'] = ""; 
$conf['rrdbase'] = "/usr/local/nagios/share/perfdata/";
$conf['page_dir'] = "/usr/local/nagios/etc/pnp/pages/";
$conf['refresh'] = "90";
$conf['max_age'] = 60*60*6;   
$conf['temp'] = "/var/tmp";
$conf['nagios_base'] = "/nagios/cgi-bin";
$conf['allowed_for_service_links'] = "EVERYONE";
$conf['allowed_for_host_search'] = "EVERYONE";
$conf['allowed_for_host_overview'] = "EVERYONE";
$conf['allowed_for_pages'] = "EVERYONE";
$conf['overview-range'] = 1 ;
$conf['lang'] = "de";
$conf['date_fmt'] = "d.m.y G:i";
$conf['use_fpdf'] = 1;
$conf['background_pdf'] = '/usr/local/nagios/etc/pnp/background.pdf' ;
$conf['use_calendar'] = 1;
$views[0]["title"] = "4 Hours";
$views[0]["start"] = ( 60*60*4 );
$views[1]["title"] = "24 Hours";
$views[1]["start"] = ( 60*60*24 );
$views[2]["title"] = "One Week";
$views[2]["start"] = ( 60*60*24*7 );
$views[3]["title"] = "One Month";
$views[3]["start"] = ( 60*60*24*30 );
$views[4]["title"] = "One Year";
$views[4]["start"] = ( 60*60*24*365 );
?>
Damit ist PnP einsatzbereit und kann über die Webseite http://master/nagios/pnp/index.php?host=localhost aufgerufen werden. :Mit diesem Link erhalten wir die Performancegrafiken vom Rechner localhost. Um die Links bequem über die Nagioswebseite aufrufen zu können, verwenden wir die Template Funktion. Dazu öffnen wir folgende Datei:
  • /usr/local/nagios/etc/objects/templates.cfg
und passen sie ein wenig an:
Ascii.png
# define ServiceExt Info
define host {
        name       host-pnp
        register   0
        action_url /nagios/pnp/index.php?host=$HOSTNAME$
        }

define service {
        name       srv-pnp
        register   0
        action_url /nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
}
Bei den vorhandenen Eintragen, passen wir zwei an:
Ascii.png
define service{
        name     generic-service         ; The 'name' of this service template
        active_checks_enabled           1                       ; Active service checks are enabled
        use                   srv-pnp    ; <----------- hinzufuegen
        [...]

define host{
        name                            linux-server    ; The name of this host template
        use                             generic-host,host-pnp   ; <------- hinzufuegen
        [...]
Damit haben nun alle Service und Hosts einen ActionLink, welcher direkt zur jeweiligen PnP Seite führt.
Wird NRPE eingesetzt um die Remote Checks auszuführen, würde PnP nicht die Performancewerte erhalten. Daher müssen wir zusätzlich eine Konfiguration anlegen, um PnP auf NRPE vorzubereiten. Dafür muss lediglich eine Datei angepasst werden:
  • /usr/local/nagios/etc/pnp/check_commands/check_nrpe.cfg
Ascii.png
CUSTOM_TEMPLATE = 1

Grafische Karten mit NagiVis

Um schnell im Blick zu haben, wo der (technische) Schuh drückt, eignet sich NagVis um auf einer Karte (Map) den Status anzuzeigen. NagVis nutzt die Datenbank der NDOUtils um den Status abzufragen.

Installation

NagVis kann von hier besorgt werden. Es sei angegeraten (wie in diesem Beispiel) auf die Version NagVis-1.3rc1> zu setzen, da sie über interessante Funktionen verfügt. Es werden auf jeden Fall Pakete wie Graphiz und FreeType2 benötigt.
  • Debian
Debian-term.png
master:~# apt-get install  graphviz
  • Entpacken und verschieben
Gnome-terminal.png
master:/usr/src/nagios# tar xzf nagvis-1.3b2.tar.gz
master:/usr/src/nagios# mv nagvis-1.3b2 /usr/local/nagios/share/nagvis

master:/usr/src/nagios# cd /usr/local/nagios/share/nagvis/etc/
master:/usr/local/nagios/share/nagvis/etc# cp nagvis.ini.php-sample nagvis.ini.php

Konfiguration

Über die nagvis.ini können sehr viele Standard Paramter festgelegt, sodass später beim füllen der Karte nur noch wenige Optionen ausgefüllt werden müssen. Eine Beispielkonfiguration kann so aussehen:
Ascii.png
[global]
language="german"
dateformat="Y-m-d H:i:s"
displayheader=1
refreshtime=60

[defaults]
icons="std_medium"
recognizeservices=1
onlyhardstates=1
backgroundcolor="#fff"
hovermenu=1
hovertemplate="default-pnp"
usegdlibs=1
urltarget="_self"
showinlists=1

[wui]
autoupdatefreq=25
maplocktime=5
allowedforconfig="nagios"

[automap]
showinlists=1
defaultroot="localhost"

[paths]
base="/usr/local/nagios/share/nagvis/"
htmlbase="/nagios/nagvis"
htmlcgi="/nagios/cgi-bin"

[backend_ndomy_1]
backendid="ndomy_1"
backendtype="ndomy"
dbhost="localhost"
dbname="nagios"
dbuser="nagios"
dbpass="secret"
dbprefix="nagios_"
dbinstancename="default"
htmlcgi="/nagios/cgi-bin"
; [rotation_demo]
; rotationid="demo"
; maps="demo,demo2"
; interval=15
Die Zeile hovertemplate="default-pnp" sorgt dafür, das für den MausHover ein bestimmtes Template verwendet wird. Dieses auf PnP abgestimmte Template muss zuvor hier (ganz unten) heruntergeladen werden, und der Inhalt nach 'usr/local/share/nagvis/nagvis/ kopiert werden.
Damit der Webserver die Rechte hat in das NagVis Verzeichnis zu schreiben, müssen wir einige Rechte anpassen:
Debian-term.png
master:~# chown www-data:www-data /usr/local/nagios/share/nagvis -R
master:~# chmod 664 /usr/local/nagios/share/nagvis/etc/nagvis.ini.php
master:~# chmod 775 /usr/local/nagios/share/nagvis/nagvis/images/maps
master:~# chmod 664 /usr/local/nagios/share/nagvis/nagvis/images/maps/*
master:~# chmod 775 /usr/local/nagios/share/nagvis/etc/maps
master:~# chmod 664 /usr/local/nagios/share/nagvis/etc/maps/*
master:~# chmod 775 /usr/local/nagios/share/nagvis/var
  • Für SuSE gilt:
Suse-term.png
master:~# chown wwwrun:www /usr/local/nagios/share/nagvis -R
...

Ist alles gelaufen, kann über die Seite http://master/nagios/nagvis/index.php auf die Seite zugegriffen werden.

TicketSystem mit OTRS

Wie bereits eingangs erläutert, wollen wir ein Ticketsystem einsetzen, mit dem Namen OTRS. Dieses kann von hier besorgt werden.

Installation

OTRS ist in Perl geschrieben und kann ausgiebig von dem Apache2 Modul mod-perl gebrauch machen. Daher werden wir diese Pakete nach installieren.
  • Debian
Debian-term.png
master: ~# apt-get install libapache2-mod-perl2 libapache-dbi-perl 
  • SuSE
Suse-term.png
master: ~# yast -i apache2-mod_perl
OTRS läuft unter einem eigenen Benutzer und eigener Gruppe. Daher werden wir diese entsprechend erstellen:
  • Debian
Debian-term.png
master: ~# groupadd otrs
master: ~# useradd -s /bin/bash -g otrs -G www-data -d /usr/local/otrs otrs
  • SuSE
Suse-term.png
master: ~# groupadd otrs
master: ~# useradd -s /bin/bash -g otrs -G www -d /usr/local/otrs otrs
Messagebox info.png
Unter SuSE empfiehlt sich generell ein RPM Paket vorzuziehen, da diese ausgezeichnet gepflegt werden.
Nun folgt OTRS selbst:
Gnome-terminal.png
master: /usr/src/nagios# tar xvzf otrs-2.2.6.tar.gz
master: /usr/src/nagios# mv /usr/src/nagios/otrs-2.2.6 /usr/local/otrs
Um zu schauen, ob alle benötigten Perl Module vorhanden sind, gibt es ein Prüfscript, welches nur ausgeführt werden muss:
Gnome-terminal.png
master: ~# /usr/local/otrs/bin/otrs.checkModules
Fehlende Module müssen dann entsprechend nach installiert werden.
  • Als nächstes erfolgen ein paar Grundkonfigurationen:
Gnome-terminal.png
master:~# cd /usr/local/otrs
master: /usr/local/otrs#  cp Kernel/Config.pm.dist Kernel/Config.pm
master: /usr/local/otrs# cd Kernel/Config/
master: /usr/local/otrs/Kernel/Config#  for foo in *.dist; do cp $foo `basename $foo .dist`; done
master: /usr/local/otrs/Kernel/Config#  cd /usr/local/otrs
master: /usr/local/otrs# perl -cw bin/cgi-bin/index.pl
master: /usr/local/otrs# perl -cw bin/PostMaster.pl
master: /usr/local/otrs# bin/SetPermissions.sh /usr/local/otrs otrs www-data otrs www-data
  • SuSE
Suse-term.png
...
master: /usr/local/otrs# bin/SetPermissions.sh /usr/local/otrs otrs wwwrun otrs www
...

Konfiguration

Sind die Rechte gesetzt, müssen noch zusätzlich einige Pfade angepasst werden, welche in der /usr/local/otrs/Kernel/Config.pm zu finden sind.
Ascii.png
package Kernel::Config;
sub Load {
    my $Self = shift;
    $Self->{DatabaseHost} = 'localhost';
    $Self->{Database} = 'otrs';
    $Self->{DatabaseUser} = 'otrs';
    $Self->{DatabasePw} = 'secret';
    $Self->{DatabaseDSN} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost};";
    $Self->{Home} = '/usr/local/otrs';
}
use strict;
use vars qw(@ISA $VERSION);
use Kernel::Config::Defaults;
push (@ISA, 'Kernel::Config::Defaults');
$VERSION = '$Revision: 1.18 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
1;
Nun muss der Apache2 noch auf das neue Verzeichnis aufmerksam gemacht werden. Dazu erstellen wir eine neue Konfiguration für eben diesen:
  • /etc/apache2/conf.d/otrs.conf
Ascii.png
# agent, admin and customer frontend
ScriptAlias /otrs/ "/usr/local/otrs/bin/cgi-bin/"
Alias /otrs-web/ "/usr/local/otrs/var/httpd/htdocs/"

# directory settings
<Directory "/usr/local/otrs/bin/cgi-bin/">
    AllowOverride None
    Options +ExecCGI -Includes
    DirectoryIndex  index.pl
    Order allow,deny
    Allow from all
</Directory>
<Directory "/usr/local/otrs/var/httpd/htdocs/">
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

# load all otrs modules
Perlrequire /usr/local/otrs/scripts/apache2-perl-startup.pl

# Apache::Reload - Reload Perl Modules when Changed on Disk
PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload
PerlModule Apache2::RequestRec

# set mod_perl2 options
<Location /otrs>
#   ErrorDocument 403 /otrs/customer.pl
    ErrorDocument 403 /otrs/index.pl
    SetHandler  perl-script
    PerlResponseHandler ModPerl::Registry
    Options +ExecCGI
    PerlOptions +ParseHeaders
    PerlOptions +SetupEnv
    Order allow,deny
    Allow from all
</Location>
Da eine in jedem Fall empfohlen wird, mod-perl2 einzusetzen, müssen wir noch ein paar Startscripte anpassen:
  • /usr/local/otrs/scipts/apache2-perl-startup.pl
Ascii.png
#! /usr/bin/perl
use strict;

[...]

# set otrs lib path!
use lib "/usr/local/otrs/";
use lib "/usr/local/otrs/Kernel/cpan-lib";

[...]

use Apache::DBI ();
Apache::DBI->connect_on_init('DBI:mysql:otrs', 'otrs', 'secret');
use DBI ();
# enable this if you use mysql
use DBD::mysql ();
[...]
Der Apache2 muss danach natürlich neugestartet werden.
Gnome-terminal.png
master: ~# /etc/init.d/apache2 restart
Da OTRS einige Cronjobs benötigt, werden diese installiert:
Gnome-terminal.png
master: /usr/local/otrs# cd /usr/local/otrs/var/cron
master: /usr/local/otrs/var/cron# for foo in *.dist; do cp $foo `basename $foo .dist`; done
master: /usr/local/otrs/var/cron# /usr/local/otrs/bin/Cron.sh start otrs
  • Datenbank
Da OTRS natürlich eine Datenbank benötigt, kann diese entweder mittels Root Rechte über den Web-Assistenten erstellt werden, oder auf der Konsole, über die altbewährte Methode.
Gnome-terminal.png
master: ~# mysqladmin create otrs -p
master: ~# mysql -p

mysql> GRANT ALL ON otrs.* TO 'otrs'@'localhost' IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.01 sec)

mysql> quit
Danach steht dem Aufruf des Webinstallers nichts mehr im Wege: http://master/otrs/installer.pl
Messagebox info.png
Beim Datenbank Setup ist es einfacher, die Datenbank mit dem Root Account von MySQL erstellen zu lassen, da sonst der letzte Schritt nicht durchgeführt (Berechtigung setzen) werden kann. Augenscheinlich stellt dies aber kein Problem da und die index.pl kann aufgerufen werden.
Wurde der Installer durchlaufen, kann nun die http://master/otrs/index.pl aufgerufen werden.

Host und Service überwachen

Und nun zum dritten Teil, dieser Dokumentation: Dem überwachen der Hosts und Services.