Skip to Main Content

Breadcrumb

Icinga2 Oracle Monitoring check_oracle_health

Das Plugin check_oracle_health für das Icinga2 Monitoring-System ist als Perl-Script implementiert. Nachdem mit der Installation von Oracle 19c ein fertiges Perl mit DBI und DBD::Oracle mitkommt, liegt es nahe dieses Perl für das check_oracle_health Plugin zu verwenden. Dementsprechend haben wir das Plugin wie folgt gebaut:

export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
cd check_oracle_health-3.2.1.8
./configure --with-nagios-user=icinga --with-nagios-group=icinga --with-perl=$ORACLE_HOME/perl/bin/perl
make
make install

Leider führt uns das nicht zum gewünschten Ergebnis:

# ./check_oracle_health --connect=mydb --username=monusr --password=monpw --mode=rman-backup-problems --environment=ORACLE_HOME=$ORACLE_HOME \
                        --environment=LD_LIBRARY_PATH=$ORACLE_HOME/lib
OK - rman had 0 problems during the last 3 days | rman_backup_problems=0;1;2
Segmentation fault (core dumped)

Analyse

Unabhängig von Oracle Version und Patchsstand läuft der Check durch, beendet sich aber mit einem Core-Dump und ist somit nicht verwendbar.

Dies haben wir mit folgenden Oracle Installationen verifiziert:

  • Oracle Client 19.3 - ungepatched
  • Oracle Client 19.14 
  • Oracle Databank Home 19.13

Lösung des Problems für alle Oracle Datenbank Versionen

Wir verwenden das System-Perl und installieren dort die aktuelle Version von DBD::Oracle:

# yum install perl-DBI
# yum install perl-CPAN
# cpan
cpan[1]> get DBD::Oracle
cpan[2]> exit
# cd .cpan/build/DBD-Oracle-1.83-yH5i6q/
# export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
# export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
# perl Makefile.PL
# make
# make install

So ausgerüstet können wir das check_oracle_health plugin erneut bauen. Dieses Mal lassen wir den with-perl switch weg, damit wird das system-weite Perl verwendet:

export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
cd check_oracle_health-3.2.1.8
./configure --with-nagios-user=icinga --with-nagios-group=icinga
make
make install

Jetzt funktioniert der check ohne Core-Dump:

# ./check_oracle_health --connect=mydb --username=monusr --password=monpw --mode=rman-backup-problems --environment=ORACLE_HOME=$ORACLE_HOME \
                        --environment=LD_LIBRARY_PATH=$ORACLE_HOME/lib
OK - rman had 0 problems during the last 3 days | rman_backup_problems=0;1;2

Wahrscheinliche Ursache

Im Perl aus dem Oracle Home ist DBD::Oracle in der Version 1.76 enthalten. Auf der Website von Consol-Labs gibt es einen Hinweis, dass manche Checks mit DBD::Oracle Version 1.76 nicht funktionieren.

Beim Bauen des DBD::Oracle wird Version 1.83 heruntergelanden und installiert, mit der das Problem nicht auftritt.