Translations of this page:

Einleitung

Sicherlich gibt es mehrere und bessere Möglichkeiten, Oracle unter Linux für Nagios zum Laufen zu bekommen, ich beschränke mich aber (da ich kein Oracle-Experte bin) auf eine schnelle und unkomplizierte Einrichtung. Das Ziel: Das Plugin check_oracle_health von Gerhard Lausser soll funktionieren ohne dass große Umstellungen am System getätigt werden müssen!

Oracle-Client

Instant-Client für Linux als zip herunterladen (nachdem man sich angemeldet hat) und unter /opt/oracle entpacken (Da ich den Instantclient 11.2 genommen habe, entstand bei mir das Unterverzeichnis instantclient_11_2)

Stand 24.03.2011 Version 11.2.0.2.0 http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

NOTE: Oracle hat festgelegt, das alle Installation von Oracle Komponneten unter dem linux Benutzer oracle getätigt werden sollen. Der instantclient benötigt diese Vorgabe nicht. Sollte jedoch ein kompletter Oracle client über den Installer installiert werden, muss dem User Nagios die lese Rechte an den Datein eingerichtet werden.

tnsnames.ora und Variablen

Möchte man die Oracle-Datenbank mit Ihrer SID als Benutzer ansprechen so schreibt man die Variablen in die Datei /etc/bash.bashrc.local (wenn nicht vorhanden, dann einfach anlegen) und meldet sich erneut an.

PATH=$PATH:/opt/oracle/instantclient_11_2
export PATH
LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2
export LD_LIBRARY_PATH
export ORACLE_USERID=system/password
export ORACLE_SID=oracle_sid1
export ORA_HOME=/opt/oracle/instantclient_11_2
export ORACLE_HOME=/opt/oracle/instantclient_11_2
export TNS_ADMIN=/opt/oracle/instantclient_11_2/network/admin

Die Oracle-Userid und die Oracle-SID werden nur benötigt, wenn man in den Checks diese Daten auch benutzt. Das Gleiche gilt für die tnsnames.ora. Alternativ kann man diese Daten auch weglassen und in den jew. Checks die Daten direkt angeben.

Die tnsnames.ora muss dann im Verzeichnis /opt/oracle/instantclient_11_2/network/admin angelegt werden und mit den korrekten Daten gefüllt werden. Standardmäßig ist das Verzeichnis /network/admin nicht im *zip enthalten und muss angelegt werden. Der Aufbau ist wie folgt:

  dbsid1 = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
        (ADDRESS = 
          (COMMUNITY = TCP)
          (PROTOCOL = TCP)
          (Host = DBSERVER)
          (Port = 1521)
        )
    )
    (CONNECT_DATA = 
      (SID = dbsid1)
         (GLOBAL_NAME = dbsid1)
    )
  )

1521 Standard Port für Oracle

Variablen für Nagios

Hinweis vorweg:
Eines der größten Probleme scheint mit den Systemvariablen in Nagios aufzutreten: Als Benutzer nagios oder als root funktioniert ein Check, führt nagios diesen Check selbst aus, dann scheitert der Versuch. Der Grund: Der Benutzer Nagios und der Prozess Nagios haben unterschiedliche Environment-Umgebungen und damit unterschiedliche Systemvariablen. Damit der Prozess die Oracle-Komponenten über die Systemvariablen auch findet, wird das Startscript von Nagios angepasst:

vi /etc/init.d/nagios

Da schon am Anfang des Scripts Variablen stehen, fügen wir unsere Oracle-Variablen einfach nur hinzu (siehe oben). Nach einem Neustart des Nagios-Prozesses stehen die Variablen in Nagios zur Verfügung.

check_oracle_health

Das Downloaden und Einbinden ist wie bei jedem Plugin und wird daher hier nicht mehr beschrieben. Aber: Ich stelle hier kurz 2 Möglichkeiten vor:

Vorher aber die resource.cfg um jew. eine Variable pro Passwort erweitern: $USER8$!

Entweder man definiert ein Kommando und übergibt die Parameter erst in dem Service-Check:

define command {
 command_name         check_oracle_health
 command_line         $USER1$/check_oracle_health $ARG1$
}

Oder man definiert diese Daten schon im Kommando und spart sich das beim Service (bei beiden Fällen werden jetzt die oben weggelassenen Variablen wieder angefügt)

define command {
 command_name         check_oracledb1_health_tablespace_usage
 command_line         $USER1$/check_oracle_health --connect '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$HOSTADDRESS$)(PORT=1521))(CONNECT_DATA=(SID=oracle_sid1)))' --user system --password $USER8$ --mode tablespace-usage --tablespace USER_DATA
}

Hierzu bitte unbedingt das HowTo lesen, wie das AddOn funktioniert: http://labs.consol.de/nagios/check_oracle_health/

Eine weitere nette Angelegenheit ist die Übergabe der SID aus der Hostkonfiguration. Bewerkstelligt wird dies über das Benutzen von Custom Object Variables http://nagios.sourceforge.net/docs/3_0/customobjectvars.html.

Es wird eine _variable (_SID meineDB ) in die Host Konfiguration eingefügt und an den Command Aufruf ($_ÜBERGABEVAR$) Übergeben.

DBI und DBD::Oracle Perl module

Um check_oracle_health benutzen zu können benötigt Perl die CPAN-Module DBI und DBD::Oracle

Alles Wichtige über Perl Module kann unter http://de.selfhtml.org/perl/module/intro.htm und http://www.cpan.org/modules/INSTALL.html (en) nachgelesen werden.

Instantclient, DBD::Oracle, check_oracle_health

Dieser Teil soll mögliche Ideen und Hilfestellung bieten für ein weiteres Vorgehen. KEINE MUSTERLÖSUNG

Versionen Nagios Testsystems OpenSUSE 11.1 (x86_64)

 Linux 2.6.27.7-9-default
 CPAN.pm version 1.9205
 nagios-3.2.0-10.1
 apache2-2.2.10-2.8.1
 perl-base-5.10.0-62.16
 check_oracle_health-1.6.8.1.tar.gz
 DBD-Oracle-1.28

- Download Oracle instantclient 11.2 + Oracle instantclient 11.2 SDK. Entpacken verschieben s.o

- Setzen der Oracle System Variablen s.o

- Donwload / Kompilieren des DBD::Oracle Modules

 #>cpan
 cpan[1]> install DBD::Oracle

*cpan konnte bei mir die Version des instantClient nicht auflösen. Das Modul wurde heruntergeladen und musste per Hand unter Angabe der Oracle instantclient Version kompiliert werden.

 #>cd /root/.cpan/build/DBD-Oracle-x.x.x
 #>perl Makefile.Pl -V 11.2
 #>make
 #>make install

- kompilieren des check_oracle_health Modules

 #>/configure --prefix=/usr/lib/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-perl=/usr/bin/perl --with-statefiles-dir=/tmp
 #>make 
 #>make install

Connection Test check_oracle_health –mode tnsping

 #>./check_oracle_health --connect '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HOSTNAME)(PORT=1521))(CONNECT_DATA=(SID=emrep)))' --user nagios --password nagios --mode tnsping
 OK - connection established to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HOSTNAME)(PORT=1521))(CONNECT_DATA=(SID=emrep))).

FAQ

F: Nagios Service Status –> failed: Can't load……DBD/Oracle/Oracle.so …..libnnz11.so: Als root kann check_oracle_health aber aufgerufen werden

 CRITICAL - cannot connect to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.115.100.132)(PORT=1521))(CONNECT_DATA=(SID=emrep))). install_driver(Oracle) failed: Can't load '/usr/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libnnz11.so: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/DynaLoader.pm line 203. at (eval 14) line 3 ..............

A: Leserechte und Variable überprüfen.

F: ORA-01017: invalid username/password:

 CRITICAL - cannot connect to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.115.204.88)(PORT=1521))(CONNECT_DATA=(SID=oemrep))). ORA-01017: invalid username/password: logon denied (DBD ERROR: OCISessionBegin)

A: Anlegen eines Nagios Users oder benutzen der System Benutzer

F: SID Der Zieldatenbank nicht richtig angegeben

 CRITICAL - cannot connect to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=vbs10grid1)(PORT=1521))(CONNECT_DATA=(SID=  emrep_flasch ))). ORA-24327: need explicit attach before authenticating a user (DBD ERROR: OCISessionBegin)

A: Auf dem Zieldatenbanksystem smon prozesse identifizieren um richtige SID zu finden.

   ps -ef | grep smon
   oracle   12853     1  0 Jan09 ?        00:32:59 ora_smon_SID1
nagios/howtos/oracle-client.txt · Zuletzt geändert: 2011/04/08 08:48 von tbrinkmann
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0