Inhaltsverzeichnis

Dieser Artikel ist veraltet (2011) - er wird in Zukunft aktualisiert.

Icinga kann dank einer Erweiterung namens IDOutils auf vielen verschiedenen Datenbanksystemen betrieben werden. Neben MySQL und PostgreSQL kann es auch auf Oracle verwendet werden - besonders interessant ist dies für Firmen, die aus supportechnischen Gründen auf Oracle setzen.

Szenario

Dieses Tutorial widmet sich der Installation eines Oracle 10g Database Express- und Icinga-Monitoringsystems. Als Betriebssystem wird CentOS 5.5 verwendet, welches binärkompatibel zu RedHat Enterprise Linux ist. Folglich dürfte dieser Leitfaden auch beim Nachbau auf Produktivsystemen mit RHEL und Oracle Database Standard unterstützen.

Voraussetzungen

Für dieses Szenario wird benötigt:

Datenbank

Zuerst wird die Oracle 10g Database Express Edition Software installiert - diese Version ist gegenüber der Standard-Version von Oracle Database abgespeckt und für Evaluationen, wie diese, gedacht. Sie kann kostenfrei auf der Oracle-Webseite bezogen werden.

Ich setze vorraus, dass CentOS 5.5 bereits installiert wurde. Benötigt wird das Paket oracle-xe-univ-10.2*.i386.rpm von der Oracle-Webseite.

10.2* ist durch die aktuelle Version zu ersetzen.

Nachdem das Paket heruntergeladen wurde, kann es mittels yum installiert werden - danach wird die Datenbank konfiguriert:

# yum localinstall --nogpgcheck oracle-xe-univ-10.2*.i386.rpm
...
Is this ok [y/N]: y
...
Complete!

# /etc/init.d/oracle-xe configure

Oracle Database 10g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 10g Express
Edition.  The following questions will determine whether the database should    
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press <Enter> to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:

Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration:
Confirm the password:

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:

Starting Oracle Net Listener...Done
Configuring Database...Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.
To access the Database Home Page go to "http://127.0.0.1:8080/apex"

Sollen externe Zugriffe auf die Weboberfläche der Datenbank erfolgen, muss dies in der Datenbank konfiguriert werden. Hierzu wird zuerst ein Oracle-Profil geladen und dannach eine Verbindung zur Datenbank mittels SQLPLUS hergestellt, bevor ein Befehl abgesetzt wird, der den externen Zugriff erlaubt:

# source /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh
# sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on Mi Dez 29 15:12:48 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Benutzernamen eingeben: system
Kennwort eingeben:

Verbunden mit:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

PL/SQL-Prozedur erfolgreich abgeschlossen.

SQL> exit
Verbindung zu Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production beendet

Die Firewall, falls verwendet, muss angepasst werden, damit Zugriff auf TCP-Port 8080 möglich ist:

# iptables -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
# service iptables save
# service iptables restart

Nach einem Neustart des Dienstes steht der externe Zugriff zur Verfügung:

/etc/init.d/oracle-xe restart

Icinga

Vorbereitungen

Bevor Icinga kompiliert wird, bedarf es noch einiger Vorbereitungen:

Pakete und Abhängigkeiten

Es müssen noch einige Bibliotheken installiert werden, die bei der Kompilierung benötigt werden:

# yum install gcc gcc-c++ httpd gd gd-devel glibc glibc-common libjpeg libjpeg-devel libpng libpng-devel openldap-devel php net-snmp net-snmp-devel net-snmp-utils openssl openssl-devel

Die Pakete net-snmp-devel und net-snmp-utils werden benötigt, falls Icinga NMNP-Dienste verwenden können soll. Icinga kann Informationen verschlüsselt übertragen - hierfür werden die Pakete openssl und openssl-devel benötigt.

SELinux

SELinux behindert Icinga in seiner Funktionsweise, es kann bei der Benutzung der Weboberfläche zu „Internal Server Error“-Meldungen kommen, wenn SELinux aktivert ist. Je nach Firmenvorschriften empfiehlt sich eine Anpassung oder Deaktivierung von SELinux. Es gibt die Möglichkeit für die von Icinga verwendeten CGI-Skripts Ausnahmen zu definieren (siehe „Kompilierung“) - alternativ kann über das CentOS-/RedHat Setup-Werkzeug SELinux deaktiviert werden. Auch eine Anpassung über die Kommandozeile ist einfach möglich:

# setenforce 0
# nano /etc/selinux/config
...
SELINUX=disabled

setenforce 0 sorgt lediglich dafür, dass SELinux zur Laufzeit deaktiviert wird - nach einem Reboot wird es wieder aktiviert. Soll SELinux dauerhaft deaktiviert werden, muss die Konfigurationsdatei /etc/selinux/config angepasst werden. (siehe Code-Schnippsel)

Oracle-Bibliothek

Damit Icinga auf der Oracle-Datenbank agieren kann, wird eine Bibliothek namens ocilib benötigt. Der Quellcode dieser Bibliothek kann kostenfrei auf der Orclib-Projektseite bezogen werden.

Instant-Client und SDK

Damit die benötigte Oracle-Bibliothek kompiliert werden kann, werden der Oracle Instant Client und das Linux SDK benötigt. Beides erhält man ebenfalls kostenfrei auf der Oracle XE-Webseite und der Instantclient-Rubrik.

Benötigt wird der XE Client und das Instantclient SDK für Linux in der Version 10.1.0.5 (da die Oracle 10g XE Datenbank ein abgespecktes 10g-Release ist).

~# yum localinstall --nogpgcheck oracle-xe-client-10.2.0.1-1.0.i386.rpm
...
~# unzip instantclient-sdk-linux32-10.1.0.5*.zip -d /usr/src
...

Je nach verwendeten Architektur muss der Dateiname des SDK-Archivs ggf. angepasst werden

Kompilierung

Wenn der Oracle Instantclient installiert und das SDK entpackt wurden, kann das muntere Kompilieren beginnen:

~# tar xvfz ocilib-3.8.1-gnu.tar.gz -C /usr/src
~# cd /usr/src/ocilib-3.8.1
ocilib-3.8.1# echo "/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib" > /etc/ld.so.conf.d/oracleXE.conf
ocilib-3.8.1# echo "/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib" > /etc/ld.so.conf.d/oracleInst.conf
ocilib-3.8.1# ldconfig
ocilib-3.8.1# echo "source /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh" >> /etc/rc.local
ocilib-3.8.1# source /etc/rc.local
ocilib-3.8.1# ./configure --with-oracle-headers-path=/usr/src/instantclient_10_1/sdk/include --with-oracle-lib-path=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib
ocilib-3.8.1# make
ocilib-3.8.1# make install
ocilib-3.8.1# echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf
ocilib-3.8.1# ldconfig

Nur, wenn die Kompilierung und Installation der Bibliothek ohne Fehler durchlaufen wurde, können die nachfolgenden Schritte ausgeführt werden!

Im Archiv befindet sich auch ein Beispielprogramm, welches die Verbindung zu einer Oracle-Instanz testet. Wenn dieses funktioniert, kann fortgefahren werden:

ocilib-3.8.1# cd demo
demo# make -f Makefile_demo demo
gcc -I/usr/local/include -DOCI_IMPORT_LINKAGE -DOCI_CHARSET_ANSI -c -o ocilib_demo.o ocilib_demo.c
gcc -L/usr/lib/oracle/11.2/client/lib -lclntsh  -L/usr/local/lib -locilib -o demo ocilib_demo.o
demo# ./demo xe system <Passwort>
...
0 errors

0 warnings


press any key to exit...

Oracle-Benutzer

Anlegen eines Oracle-Benutzers Icinga benötigt einen dedizierten Datenbank-Benutzer sowie eine dazugehöriges Datenbankschema. Unter Oracle Database 10g Express Edition wird dies ganz einfach mit dem Anlegen eines Datenbank-Benutzers implementiert. Hierzu werden die Weboberfläche (APEX) aufgerufen und die folgenden Punkte angewählt:

  1. Administration
  2. Datenbankbenutzer
  3. Benutzer erstellen
    1. Benutzername: icinga
    2. Kennwort:
    3. Kenntwort bestätigen:
  4. Benutzerberechtigungen
    1. Rollen:
      1. CONNECT
      2. RESOURCE

Anschließend sollte ein Probe-Login auf der Weboberfläche oder über sqlplus erfolgen, um zu verifizieren, ob das Konto fehlerfrei angelegt wurde:

[root@tvm-icingaex ~]# sqlplus icinga/<Passwort>

SQL*Plus: Release 10.2.0.1.0 - Production on Do Mrz 10 18:51:16 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Verbunden mit:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

Kompilierung

Zunächst werden eine Benutzerkonto und eine zugehörige Gruppe für den Icinga-Daemon erstellt - für die Bedienung des Dienstes über die Weboberfläche wird eine dedizierte Gruppe erstellt - dieser Gruppe wird das Apache-Benutzerkonto hinzugefügt.

# useradd -m icinga
# passwd icinga
...
# groupadd icinga
# groupadd icinga-cmd
# usermod -a -G icinga-cmd icinga
# usermod -a -G icinga-cmd apache

Bei einigen Distributionen wird beim Anlegen eines Benutzers automatisch eine gleichnamige Gruppe angelegt - in einem solchen Fall wird eine Fehlermeldung angezeigt, die getrost ignoriert werden kann:

groupadd: Gruppe icinga bereits vorhanden

Nun wird der Icinga-Quellcode entpackt, bevor die Abhängigkeiten überprüft und Icinga kompiliert werden:

# tar xvfz Icinga_130/icinga-1.3.0.tar.gz -C /usr/src
# cd /usr/src/icinga-1.3.0
icinga-1.3.0 # ./configure --with-command-group=icinga-cmd --enable-idoutils --enable-ssl --enable-oracle --with-ocilib-inc=/usr/src/ocilib-3.8.1/include --with-ocilib-lib=/usr/local/lib
...
*** Configuration summary for icinga-core 1.3.0 02-16-2011 ***:

 General Options:
 -------------------------
        Icinga executable:  icinga
        Icinga user/group:  icinga,icinga
       Command user/group:  icinga,icinga-cmd
            Embedded Perl:  no
             Event Broker:  yes
           Build IDOUtils:  yes
        Install ${prefix}:  /usr/local/icinga
                Lock file:  ${prefix}/var/icinga.lock
   Check result directory:  ${prefix}/var/spool/checkresults
           Init directory:  /etc/rc.d/init.d
  Apache conf.d directory:  /etc/httpd/conf.d
             Mail program:  /bin/mail
                  Host OS:  linux-gnu

 Web Interface Options:
 ------------------------
                 HTML URL:  http://localhost/icinga/
                  CGI URL:  http://localhost/icinga/cgi-bin/
 Traceroute (used by WAP):  /bin/traceroute


Review the options above for accuracy.  If they look okay,
type 'make all' to compile the main program and CGIs.


!!! Please take care about the upgrade documentation !!!


icinga-1.3.0 # make all
...

Nach dem Icinga kompiliert wurde, werden die folgenden Tasks kombiniert in einem Aufruf ausgeführt:

icinga-1.3.0 # make fullinstall
...

Die Oracle-Datenbank muss noch mit dem von Icinga verwendeten Schema gefüllt werden - hierzu wird ein SQL-Dump in den Home-Ordner des Oracle-Benutzers kopiert. Danach erfolgt eine Anmeldung mit dem Oracle-Benutzer in einer Kommandozeilensitzung sowie eine Verbindung zur Datenbank:

icinga-1.3.0 # cp module/idoutils/db/oracle/oracle.sql $ORACLE_HOME
icinga-1.3.0 # su - oracle
-bash-3.2$ source /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh
-bash-3.2$ cd $ORACLE_HOME
-bash-3.2$ sqlplus icinga/<Passwort>

SQL*Plus: Release 10.2.0.1.0 - Production on Do Mrz 10 23:22:24 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Verbunden mit:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> @oracle.sql
...
Sequence wurde erstellt.

SQL> quit
Verbindung zu Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production beendet
-bash-3.2$ exit
logout
icinga-1.3.0 # 

Web-Oberfläche

Zur Auswahl stehen zwei Oberflächen - die klassische Nagios-Oberfläche und eine modernere AJAX-Weboberfläche. Der Übersichtlichkeit gegenüber alten Nagios-Systemen halber wird hier die klassische Weboberfläche verwendet.

Mit den folgenden Aufrufen werden die CGI-Skripte und HTML-Dokumente installiert sowie die dazugehörigen Konfigurationen vorgenommen:

icinga-1.3.0 # make cgis
icinga-1.3.0 # make install-cgis
icinga-1.3.0 # make install-html
icinga-1.3.0 # make install-webconf

Für den Zugriff auf Icinga wird ein Benutzer „icingaadmin“ angelegt:

icinga-1.3.0 # htpasswd -c /usr/local/icinga/etc/htpasswd.users icingaadmin
New password:
Re-type new password:
Adding password for user icingaadmin

Viele Firmen setzen auf Authentifizierungen in Applikationen auf LDAP - bei Monitoringsystemen sollte man hier auf lokale Authentifizierung setzen. Warum? Ganz einfach - ein Monitoringsystem ist im Business-Umfeld ein enorm wichtiger Dienst, der immer zur Verfügung stehen muss. Was ist, wenn der Verzeichnisdienst ausfällt? In einem solchen Falle könnte keine Authentifizierung mehr stattfinden und das Monitoringsystem könnte nicht benutzt werden. Selbst in größeren Firmen wird ein Monitoringsystem in der Regel nur von einer begrenzten Anzahl an Administratoren/Benutzern verwendet, sodass die Benutzerpflege ohne Probleme auf Dateiebene stattfinden kann.

Konfiguration

icinga-1.3.0 # cd /usr/local/icinga/etc
etc # nano objects/contacts.cfg
...
define contact{
        contact_name                    icingaadmin             ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias                           Icinga Admin            ; Full name of user

        email                           icinga@localhost        ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
        }
...
etc # mv idomod.cfg-sample idomod.cfg
etc # mv ido2db.cfg-sample ido2db.cfg
etc # nano idomod.cfg
...
#use_ssl=1
output_type=tcpsocket
output=127.0.0.1
...
etc # nano ido2db.cfg
...
#use_ssl=1
socket_type=tcp
...
db_servertype=oracle
db_port=1521
db_name=//localhost/XE
db_user=icinga
db_pass=test123
...
etc # nano /usr/local/icinga/etc/icinga.cfg
...
broker_module=/usr/local/icinga/bin/idomod.o config_file=/usr/local/icinga/etc/idomod.cfg
...

Da Icinga ohne Plugins recht nutzlos ist, werden nun noch die Nagios-Plugins für Icinga kompiliert:

# tar xvfz nagios-plugins-1.4.15.tar.gz -C /usr/src/
# cd /usr/src/nagios-plugins-1.4.15
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
...
nagios-plugins-1.4.15 # make
...
nagios-plugins-1.4.15 # make install
...

Nach einem Neustart der Webserver-, IDO-Datenbank- und Icinga-Dienste kann Icinga benutzt werden. Bei dieser Gelegenheit können diese Dienste gleich so konfiguriert werden, dass sie beim Start des Systems automatisch gestartet werden. Vorher muss noch die hinterlegte Konfigurationsdatei auf Fehler überprüft werden:

# /usr/local/icinga/bin/icinga -v /usr/local/icinga/etc/icinga.cfg
...
Things look okay - No serious problems were detected during the pre-flight check
# service httpd restart
# service ido2db start
# service icinga start
# chkconfig --add ido2db
# chkconfig ido2db on
# chkconfig --add icinga
# chkconfig icinga on
# chkconfig --level 345 httpd on
# chkconfig --level 345 ido2db on
# chkconfig --level 345 icinga on

Falls der Zugriff von außen auf den Webserver noch nicht erlaubt wurde, kann die Anpassung der Firewall an dieser Stelle übernommen werden:

# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# service iptables save
# service iptables restart

Internetverweise