| This content in english |

Debian - Icinga mit externen Quellen installieren

Ziele

Zusatzanfrage

Das System soll auch Geräte, in diesem Fall Drucker, in einem ganz anderen Subnetz überwachen. Dies kann dadurch erreicht werden, dass das Linux-System, auf dem Icinga installiert wird, eine zweite IP-Adresse erhält, welche sich in dem anderen Subnetz befindet. Ein zweite Netzwerkkarte ist dafür nicht erforderlich. Aktuell funktioniert diese Lösung mit Linux Debian Squeeze und Linux Mint Debian (Wird in einer eigenen Anleitung beschrieben).

Lösung

Icinga ist nach dieser Anleitung hier installiert: http://www.missioncritical.de/?p=10

Ich gebe hier den Text der Anleitung wieder, weil die auf Anhieb funktioniert hat, und weil ich mir nicht sicher bin, wie lange er verfügbar sein wird. Verwendet habe ich diese Dateien:

Auf dem in der Anleitung angegeben Weg konnte ich die Dateien nicht bekommen. So habe ich sie anders heruntergeladen und per Winscp übertragen. Die verwendeten Dateien sind im Downloadbereich dieser Website gespeichert.

Icinga installieren

- Zitat Anfang von: http://www.missioncritical.de/?p=10#comment-16, Formatierungen werden nicht berücksichtigt -

# Pakete installieren [Meine Anmerkung: Für Linux Mint Debian den Nachtrag am Artikelende beachten.]

apt-get install apache2 build-essential libgd2-xpm-dev
apt-get install libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev
apt-get install mysql-server mysql-client libdbi0 libdbi0-dev libdbd-mysql

# Benutzer hinzufügen

/usr/sbin/useradd -m icinga
passwd icinga
/usr/sbin/groupadd icinga
/usr/sbin/groupadd icinga-cmd
/usr/sbin/usermod -a -G icinga-cmd icinga
/usr/sbin/usermod -a -G icinga-cmd www-data

# Icinga

cd /usr/src
wget http://downloads.sourceforge.net/project/icinga/icinga/1.4.0/icinga-1.4.0.tar.gz
tar xvzf icinga-1.4.0.tar.gz
cd icinga-1.4.0
./configure --with-command-group=icinga-cmd --enable-idoutils
make all
make install
make install-init
make install-config
make install-commandmode
make install-idoutils
make install-api

# Idoutils anpassen

cd /usr/local/icinga/etc
mv idomod.cfg-sample idomod.cfg
mv ido2db.cfg-sample ido2db.cfg
nano -w /usr/local/icinga/etc/icinga.cfg

# Broker_module auskommentieren

# Mysql Datenbank einrichten etc.

mysql -u root -p
CREATE DATABASE icinga;
GRANT USAGE ON *.* TO 'icinga'@'localhost'
IDENTIFIED BY 'icinga'
WITH MAX_QUERIES_PER_HOUR 0
MAX_CONNECTIONS_PER_HOUR 0
MAX_UPDATES_PER_HOUR 0;
GRANT SELECT , INSERT , UPDATE , DELETE
ON icinga.* TO 'icinga'@'localhost';
FLUSH PRIVILEGES ;
quit
cd /usr/src/icinga-1.4.0/module/idoutils/db/mysql/
mysql -u root -p icinga < mysql.sql
nano -w /usr/local/icinga/etc/ido2db.cfg

# Einstellungen prüfen

# Klassisches Web-Interface erstellen

cd /usr/src/icinga-1.4.0
make cgis
make install-cgis
make install-html

# Web Frontend erstellen

apt-get install php5 php5-cli php-pear php5-xmlrpc php5-xsl php5-ldap php5-gd php5-mysql
cd /usr/src
wget http://downloads.sourceforge.net/project/icinga/icinga-web/1.4.0/icinga-web-1.4.0.tar.gz
tar xzvf icinga-web-1.4.0.tar.gz
cd icinga-web-1.4.0
./configure --prefix=/usr/local/icinga-web --with-web-user=www-data --with-web-group=www-data --with-web-path=/icinga-web --with-web-apache-path=/etc/apache2/conf.d --with-db-type=mysql --with-db-host=localhost --with-db-port=3306 --with-db-name=icinga_web --with-db-user=icinga_web --with-db-pass=icinga_web --with-icinga-api=/usr/local/icinga/share/icinga-api
make install
make install-apache-config
/etc/init.d/apache2 restart
make install-done

# make icinga-reset-password

make testdeps
make db-initialize
mysql -u root -p
GRANT USAGE ON icinga_web.* TO 'icinga_web'@'localhost' IDENTIFIED BY 'icinga_web' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON icinga_web.* TO 'icinga_web'@'localhost';
quit
a2enmod rewrite
/etc/init.d/apache2 restart
/etc/init.d/icinga restart
/etc/init.d/ido2db restart

# Klassisches Web-Frontend installieren

cd /usr/src/icinga-1.4.0
make install-webconf
htpasswd -c /usr/local/icinga/etc/htpasswd.users icingaadmin
/etc/init.d/apache2 restart

# Nagios-Plugins

cd /usr/src
wget http://sourceforge.net/projects/nagiosplug/files/nagiosplug/1.4.15/nagios-plugins-1.4.15.tar.gz
tar xzvf nagios-plugins-1.4.15.tar.gz
cd /usr/src/nagios-plugins-1.4.15
./configure --prefix=/usr/local/icinga --with-cgiurl=/icinga/cgi-bin --with-htmurl=/icinga --with-nagios-user=icinga --with-nagios-group=icinga
make
make install

# Automatischer Start

update-rc.d ido2db defaults

# Icinga Konfiguration testen:

/usr/local/icinga/bin/icinga -v /usr/local/icinga/etc/icinga.cfg
update-rc.d icinga defaults

- Zitat Ende -

Ordner und Dateien

Die Dateien des Systems befinden sich an diesen Stellen:

/usr/local/icinga/etc/icinga.cfg

/usr/local/icinga/etc/objects

/usr/local/icinga/etc/icinga.cfg

Hier wird dem System mitgeteilt, welche weiteren Konfigurationsdateien berücksichtigt werden sollen.

Auszug Anfang

###############################################################################
#
# ICINGA.CFG - Sample Main Config File for Icinga
#
# Read the documentation for more information on this configuration
# file. I've provided some comments here, but things may not be so
# clear without further explanation.
#
###############################################################################


# LOG FILE
# This is the main log file where service and host events are logged
# for historical purposes. This should be the first option specified
# in the config file!!!
< br />log_file=/usr/local/icinga/var/icinga.log



# OBJECT CONFIGURATION FILE(S)
# These are the object configuration files in which you define hosts,
# host groups, contacts, contact groups, services, etc.
# You can split your object definitions across several config files
# if you wish (as shown below), or keep them all in a single config file.

# You can specify individual object config files as shown below:
cfg_file=/usr/local/icinga/etc/objects/commands.cfg
cfg_file=/usr/local/icinga/etc/objects/contacts.cfg
cfg_file=/usr/local/icinga/etc/objects/timeperiods.cfg
cfg_file=/usr/local/icinga/etc/objects/templates.cfg

# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/icinga/etc/objects/localhost.cfg< br />
# Definitions for monitoring a Windows machine
cfg_file=/usr/local/icinga/etc/objects/windows.cfg

# Definitions for monitoring a router/switch
cfg_file=/usr/local/icinga/etc/objects/switch.cfg

# Definitions for monitoring a network printer
cfg_file=/usr/local/icinga/etc/objects/printer.cfg

# Definitions for ido2db process checks
#cfg_file=/usr/local/icinga/etc/objects/ido2db_check_proc.cfg

# You can also tell Icinga to process all config files (with a .cfg
# extension) in a particular directory by using the cfg_dir
# directive as shown below:

#cfg_dir=/usr/local/icinga/etc/servers
#cfg_dir=/usr/local/icinga/etc/printers
#cfg_dir=/usr/local/icinga/etc/switches
#cfg_dir=/usr/local/icinga/etc/routers

# Definitions for broker modules like idoutils.cfg
cfg_dir=/usr/local/icinga/etc/modules

Auszug Ende

Damit eine Datei berücksichtigt wird, wird die Raute '#' zu Beginn der betreffenden Zeile entfernt.

Weitere Einstellungen habe ich bei Dateien unter /usr/local/icinga/etc/objects vorgenommen.

/usr/local/icinga/etc/objects

Hier befinden sich die eben gegebenenfalls aktivierten Konfigurationsdateien.

/usr/local/icinga/etc/objects/contacts.cfg

An der vorgesehene Stelle wird die E-Mail-Adresse eingetragen, an welche das System bei einem Problem eine Nachricht schicken soll. Das System muss noch so eingerichtet werden, dass es Nachrichten über einen Mailserver verschickt.

/usr/local/icinga/etc/objects/localhost.cfg

Die Datei enthält die Einstellungen für den Computer, auf dem Icinga installiert ist. Nach dem darin enthaltenen System kann man Angaben für weitere Linux-Computer hinterlegen.

/usr/local/icinga/etc/objects/printer.cfg

Hier werden die Einstellungen für die Drucker vorgenommen.

Beispiel

###############################################################################
# PRINTER.CFG - SAMPLE CONFIG FILE FOR MONITORING A NETWORK PRINTER
#
# NOTES: This config file assumes that you are using the sample configuration
# files that get installed with the Icinga quickstart guide.
#
###############################################################################



###############################################################################
###############################################################################
#
# HOST DEFINITIONS
#
###############################################################################
###############################################################################

# Define a host for the printer we'll be monitoring
# Change the host_name, alias, and address to fit your situation

#define host{
# use generic-printer ; Inherit default values from a template
# host_name hplj2605dn ; The name we're giving to this printer
# alias HP LaserJet 2605dn ; A longer name associated with the printer
# address 192.168.1.30 ; IP address of the printer
# hostgroups network-printers ; Host groups this printer is associated with
# }

##### Drucker Anfang #####
define host{
use generic-printer ; Name of host template to use
host_name drk_druckername_01
alias drk_erster_drucker
address 123.123.123.123
parents 1. switch 130.130.130.130
}

define host{
use generic-printer ; Name of host template to use
host_name drk_druckername_01
alias drk_zweiter_drucker
address 124.124.124.124
parents 2. switch 131.131.131.131
}

### [...]

###############################################################################
###############################################################################
#
# SERVICE DEFINITIONS
#
###############################################################################
###############################################################################
##### eigene Definitionen Anfang #####
# einfacher Pink, um die Erreichbarkeit zu pruefen
define service{
use generic-service ; Inherit values from a template
host_name drk_druckername_01, drk_druckername_02 ; The name of the host the service is associated with
service_description PING ; The service description
check_command check_ping!3000.0,80%!5000.0,100%
normal_check_interval 10 ; Check the service every 10 minutes under normal conditions
retry_check_interval 1 ; Re-check the service every minute until its final/hard state is determined
}

Auszug Ende

Der Eintrag 'parents'...

...ermöglicht es, die System für die grafische Übersicht in Icinga so anzuorden, wie sie miteinander verbunden sind. Anfangs kann man diesen Eintrag weglassen oder mit '#' unwirksam werden lassen. Was hier steht, ist naatürlich nur ein Beispiel.

Wenn der Eintrag verwendet wird, muss derbetreffende Switch so angegeben werden, wie er in der Konfigurationsdatei für die Switche angelegt ist.

/usr/local/icinga/etc/objects/switch.cfg

Einstellungen für die Switche des Systems

Auszug Anfang

###############################################################################
# SWITCH.CFG - SAMPLE CONFIG FILE FOR MONITORING A SWITCH
#
# NOTES: This config file assumes that you are using the sample configuration
# files that get installed with the Icinga quickstart guide.
#
###############################################################################


###############################################################################
###############################################################################
#
# HOST DEFINITIONS
#
###############################################################################
###############################################################################

# Define the switch that we'll be monitoring

#define host{
# use generic-switch ; Inherit default values from a template
# host_name linksys-srw224p ; The name we're giving to this switch
# alias Linksys SRW224P Switch ; A longer name associated with the switch
# address 192.168.1.253 ; IP address of the switch
# hostgroups switches ; Host groups this switch is associated with
# }

############################################################
##### ab hier eigene Hostdefinitionen #####
##### switch Anfang #####
define host{
use generic-switch ; Name of host template to use
host_name 1. switch
alias erster switch
address 130.130.130.130
}

define host{
use generic-switch ; Name of host template to use
host_name 2. switch
alias zweiter switch
address 131.131.131.131
}

###############################################################################
###############################################################################
#
# SERVICE DEFINITIONS
#
###############################################################################
###############################################################################

# Create a service to PING to switch

#define service{
# use generic-service ; Inherit values from a template
# host_name linksys-srw224p ; The name of the host the service is associated with
# service_description PING ; The service description
# check_command check_ping!200.0,20%!600.0,60% ; The command used to monitor the service
# normal_check_interval 5 ; Check the service every 5 minutes under normal conditions
# retry_check_interval 1 ; Re-check the service every minute until its final/hard state is determined
# }

define service{
use generic-service ; Inherit values from a template
host_name 1. switch, 2. switch
; The name of the host the service is associated with
service_description PING ; The service description
check_command check_ping!200.0,20%!600.0,60% ; The command used to monitor the service
normal_check_interval 5 ; Check the service every 5 minutes under normal conditions
retry_check_interval 1 ; Re-check the service every minute until its final/hard state is determined
}


Auszug Ende

/usr/local/icinga/etc/objects/windows.cfg

Hier werden die verschiedenen Windows-Systeme eingetragen

Auszug Anfang

###############################################################################
# WINDOWS.CFG - SAMPLE CONFIG FILE FOR MONITORING A WINDOWS MACHINE
#
# NOTES: This config file assumes that you are using the sample configuration
# files that get installed with the Icinga quickstart guide.
#
###############################################################################


###############################################################################
###############################################################################
#
# HOST DEFINITIONS
#
###############################################################################
###############################################################################

# Define a host for the Windows machine we'll be monitoring
# Change the host_name, alias, and address to fit your situation

#define host{
# use windows-server ; Inherit default values from a template
# host_name winserver ; The name we're giving to this host
# alias My Windows Server ; A longer name associated with the host
# address 192.168.1.2 ; IP address of the host
# }

##### eigene Hostdefinitionen Anfang #####

define host{
use windows-server ; Name of host template to use
host_name windows-server_01
alias Domaenencontroller
address 140.140.140.140
parents 1. switch
}

define host{
use windows-server ; Name of host template to use
host_name windows-server_02
alias Domaenencontroller
address 141.141.141.141
parents 2. switch
}

define host{
use windows-server ; Name of host template to use
host_name mailserver_01
alias Mailserver
address 151.151.151.151
parents 2. switch
}

##### [...]

###############################################################################
###############################################################################
#
# HOST GROUP DEFINITIONS
#
###############################################################################
###############################################################################


# Define a hostgroup for Windows machines
# All hosts that use the windows-server template will automatically be a member of this group

define hostgroup{
hostgroup_name windows-server ; The name of the hostgroup
alias Windows Servers ; Long name of the group
members windows-server_01, windows-server_02
}

##### [...]

###############################################################################
###############################################################################
#
# SERVICE DEFINITIONS
#
###############################################################################
###############################################################################


# Create a service for monitoring the version of NSCLient++ that is installed
# Change the host_name to match the name of the host you defined above

define service{
use generic-service
host_name windows-server_01, windows-server_02
service_description NSClient++ Version
check_command check_nt!CLIENTVERSION
}



# Create a service for monitoring the uptime of the server
# Change the host_name to match the name of the host you defined above

define service{
use generic-service
host_name windows-server_01, windows-server_02
service_description Uptime
check_command check_nt!UPTIME
}



# Create a service for monitoring CPU load
# Change the host_name to match the name of the host you defined above

define service{
use generic-service
host_name windows-server_01, windows-server_02
service_description CPU Load
check_command check_nt!CPULOAD!-l 5,80,90
}



# Create a service for monitoring memory usage
# Change the host_name to match the name of the host you defined above

define service{
use generic-service
host_name windows-server_01, windows-server_02
service_description Memory Usage
check_command check_nt!MEMUSE!-w 80 -c 90
}



# Create a service for monitoring C:\ disk usage
# Change the host_name to match the name of the host you defined above

define service{
use generic-service
host_name windows-server_01, windows-server_02
service_description C:\ Drive Space
check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90
}


# Create a service for monitoring the W3SVC service
# Change the host_name to match the name of the host you defined above

##### deaktiviert Anfang #####
#define service{
# use generic-service
# host_name windows-server_01, windows-server_02
# service_description W3SVC
# check_command check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
# }
##### deaktiviert Ende #####



# Create a service for monitoring the Explorer.exe process
# Change the host_name to match the name of the host you defined above
##### nur bei Maschinen mit lokal angemeldeten Benutzern anwenden
##### deaktiviert, weil am sehr viele Meldungen anfallen,
##### wenn niemand am System angemeldet ist.
#define service{
# use generic-service
# host_name windows-server_01, windows-server_02
# service_description Explorer
# check_command check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
# }


##### Apache Anfang #####
##### auf den Server ist xampp intalliert
define service{
use generic-service
host_name windows-server_01, windows-server_02
service_description Apache 2.2 HTTP
check_command check_http!SERVICESTATE! -S -C 60
}
##### Apache Ende #####


##### FTP Anfang #####
##### auf den Servern ist FileZilla installiert
define service{
use generic-service ; Inherit default values from a template
host_name windows-server_01, windows-server_02
service_description FTP
check_command check_ftp
}
##### FTP Ende #####

##### Mailserver SMTP Anfang #####
# Die Angaben kann man ermitteln, wenn man einen Mail-Dialog
# mit dem Mailserver beginntm, wie ihn die Clientprogramme führen.
define service{
use generic-service
host_name mailserver01
service_description SMTP
check_command check_smtp!SERVICESTATE! -e "220 mailserver01.domainname.local Service ready by Programmname (0250) ESMTP Server (Softwarename, etc)"
}
##### Mailserver SMTP Ende ####

Auszug Ende

Servicegroups definieren

/usr/locla/icinga/etc/icinga.cfg

Ich habe mich entschlossen, die Service-Gruppen in einer eigenen Datei zu beschreiben. Der Ggedanke, die Servicegruppen in den verschiedenen Dateien einrichten und den Überblick behalten zu müssen, hat mich abgeschreckt. Das habe ich erst gar nicht probiert. Ich wollte lieber alle Dienstgruppen in einer Datei definieren.

Name: servicegroups.cfg.

Speicherort: /usr/local/icinga/etc/objects/servicegroups.cfg

Dass icinga diese Datei beachen soll, muss in /usr/locla/icinga/etc/icinga.cfg angegeben werden.

# Definitionen fuer servicegroups
cfg_file=/usr/local/icinga/etc/objects/servicegroups.cfg

Aufbau, Beispiel Dienst FTP

define servicegroup{
servicegroup_name http
alias http-server
members computername1,Apache 2.2 HTTP,computername2,Apache 2.2 HTTP
servicegroup_members Apache 2.2 HTTP
}

Kurze Erklärung

servicegroup_name: Name, um den Dienst identifizieren zu können.

alias: Name, um den Dienst identifizieren zu können; es kann ein längerer Name sein.

members: Aufzählung der betreffenden Computer und Dienste, alles ohne Freizeichen hintereinander schreiben. ACHTUNG: Die Freizeichen im Dienstname bleiben erhalten!

servicegroup_members: Name des Dienstes, der betroffen ist. Auch hier ist die korrekte Schreibweise wichtig.

Quelle: http://docs.icinga.org/latest/de/objectdefinitions.html#servicegroup

Konfiguration überprüfen / Fehler anzeigen lassen
# /etc/init.d/icinga show-errors

Linux-Computer vorbereiten

# apt-get install nsca

Windows-Computer vorbereiten

Ein geeigenter Client muss installiert werden: http://www.nsclient.org/nscp/

Verwendet habe ich NSClient++-0.3.9-Win32.msi

Problem bei der installation

Bei einem Windows Server 2003 ließ sich das Programm nicht installieren. Nachdem die Angaben zum Speicherort hinterlegt waren, klappt es einfach.

So, wie hier angegeben, klappte es auch nicht: http://www.nsclient.org/nscp/ticket/68

In diesem Fall habe ich die Datei auf C:\ kopiert, über die Eingabeaufforderung nach C:\ gewechselt und dies eingegeben:

NSClient++-0.3.9-Win32.msi /passiv

Das Programm wurde installiert. Der Dienst 'NSClient++ (Win32)' war für den automatischen Start vorgesehen, musste an dieser Stelle noch manuell gestartet werden. Die NSC.ini muss manuell bearbeitet werden.

Änderungen wirksam werden lassen
# /etc/init.d/icinga restart

Nachtrag: Installation mit Linux Mint Debian 13, 64 Bit

Verwendet habe ich Version 13 mit Updatepaket.

Die Anleitung passt auch für dieses System. Eine Datei konnte nicht installiert werden. In der Meldung wurde angezeigt, um welche es sich handelt, und welches Paket die Datei ersetzt.

Vergleiche oben den Abschnitt

# apt-get install mysql-server mysql-client libdbi0 libdbi0-dev libdbd-mysql libdbi-dev

Meldung

Hinweis: 'libdbi-dev' wird an Stelle von 'libdbi0-dev' gewählt.
Paket libdbi0 ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Doch die folgenden Pakete ersetzen es:
libdbi-dev

Hier hat es genügt, das Installationskommando zu ändern.

# apt-get install mysql-server mysql-client libdbi-dev libdbi0-dev libdbd-mysql