Aktionen

Oracle Datenbank mit Zabbix überwachen

Aus znilwiki

Bei einem Kunden sollte ich eine Überwachung der Oracle Datenbank einrichten.
Insbesondere sollten die Tabelspaces überwacht werden.
Leider scheinen die Lösungen auf www.zabbix.com älter zu sein und haben eben keine Tablespaces.
Gefunden habe ich dann etwas hier: http://bicofino.io/blog/monitoring-oracle-with-zabbix/
Ich habe die Lösung mal für meine Ubuntu/Zabbix Kombi umgesetzt und das ganze hier beschrieben:


1 Voraussetzungen




2 Installation

3 Vorhandene Oracle Version abfragen

LINUX:
Meldet euch per SSH am Oracle-Server an und gebt folgenden Befehl ein:

echo $ORACLE_HOME

Beispielausgabe:

/oracle/ora112

Bedeutet Version 11.2

Wer es noch genauer haben will:

su - oracle
sqlplus

Beispielausgabe:

SQL*Plus: Release 11.2.0.3.0 Production on Di Nov 29 09:28:19 2016

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

Benutzernamen eingeben:




3.1 Oracle Client installieren

Den Client findet Ihr unter

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

den 64 Bit-Client unter

https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

Dort müsst Ihr den passenden (64 oder 32 Bit) auswählen.
Ob Ihr ein 32 oder 64Bit Linux habt stellt ihr auf der Bash mit

root@zabbix:~# uname -m
x86_64

fest. x86_64 bedeutet das es ein 64 Bit System ist, alle anderen Werte bedeuten 32 Bit (z.B. i686).

Ich habe hier ein 64 Bit System und entsprechend den Instant Client for Linux x86-64 genommen.
Ihr müsst die Pakete für

  • Instant Client Package - Basic:
  • Instant Client Package - SDK:
  • Instant Client Package - SQL*Plus

herunterladen. Ihr könnt zwischen .zip und .rpm wählen. Wir nehmen dir .rpm Versionen.

Aber ACHTUNG! Zum Zeitpunkt der Erstellung diese Artikel unterstützte cx_Oracle maximal die Client-Version 11.1.0 - mit dem 12er Client geht es nicht (glaubt mir, ich habe es ausprobiert).
Auf jeden Fall müsst die die zur cx_Oracle passende Client-Version installieren

Ich habe hier ein 10g Datenbank, entsprechend waren es die Dateien

oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm
oracle-instantclient-devel-10.2.0.5-1.x86_64.rpm
oracle-instantclient-sqlplus-10.2.0.5-1.x86_64.rpm

die wir nun auf unseren Zabbix Server hochladen.
Dort installieren wir diese mittels alien
Wenn alien> auf eurem System fehlt könnt Ihr es mit

apt-get install alien

nachinstallieren.
Die drei Oracle-Pakete installieren wir mit

alien -i oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm
alien -i oracle-instantclient-devel-10.2.0.5-1.x86_64.rpm
alien -i oracle-instantclient-sqlplus-10.2.0.5-1.x86_64.rpm


Nach erfolgreicher Installation der 3 Pakete könnt Ihr mit

sqlplus username/password@//NameDesServers:1521/SID
sqlplus64 username/password@//NameDesServers:1521/SID

Testen (einer der beiden Befehle je nach Version)

Important.png

Hinweis: Es kann sein das SID nicht funktioniert - dann müsst Ihr ggf. den Namen der Datenbank einsetzen. Gibt es eine Meldung wie TNS:no listener so passt der Datenbankname und/oder der Port nicht.

Wenn Ihr genau wissen wollte welche Dienste (Datenbanken) auf welchen Ports der Oracle Server anbietet so schaut in die Datei listener.ora auf dem Oracle Server (z.B. unter /oracle/ora112/network/admin/listener.ora


Gibt es dabei einen Fehler

sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory

müsst Ihr die Datei

/etc/ld.so.conf.d/oracle.conf

erstellen und bearbeiten, z.B. mit

touch /etc/ld.so.conf.d/oracle.conf
nano /etc/ld.so.conf.d/oracle.conf

und dort gleich am Anfang die Zeile

/usr/lib/oracle/10.2.0.5/client64/lib/

hinzufügen - den Pfad müsst Ihr ermitteln und er hängt von eurer Version ab (das 10.2.0.5 und client64 ist wahrscheinlich anders.
Im Anschluss noch mal die Konfiguration des Clients aufrufen:

ldconfig

Gibt es danach den Fehler:

sqlplus: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

fehlt müsst ihr diese fehlende Library mit

apt-get install libaio1

installieren (man beachte die 1 am Ende) Danach sollte der sqlplus Test klappen.

sqlplus username/password@//NameDesServers:1521/SID

Ausgabe

SQL*Plus: Release 11.1.0.7.0 - Production on Wed Oct 16 15:45:41 2013

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


Connected to:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production




3.2 ldconfig anpassen

Nach einem Hinweis von Timo noch die nachfolgenden Ergänzung - sonst meldet das cx_Oracle Script einen Fehler:

Wir legen eine neue Datei an:

nano /etc/ld.so.conf.d/oracle.conf

mit folgendem Inhalt:

/usr/lib/oracle/11.2/client64/lib/


Den Pfad müsst Ihr an eure Version anpassen, ggf. abfragen mit

ls -l /usr/lib/oracle/


Im Anschluß noch ein

ldconfig




3.3 cx_Oracle installieren

Das Script von Bico Fino braucht die cx-Oracle Bibliothek für Python, die findet ihr hier:

http://cx-oracle.sourceforge.net/




3.3.1 Neuer Weg

apt install python-pip
pip install cx_Oracle

Test:

python -c 'import cx_Oracle'

sollte KEINE Fehlermeldung etc. erzeugen.



3.3.2 Alter Weg

Dort müsst ihr die passende Version zum Betriebssystem (64 oder 32 Bit), zur Oracle Installation und zur vorhandenen Python-Version auswählen. Die Oracle Version wisst Ihr hoffentlich oder fragt den Datenbank-Admin
Wenn Ihr im vorherigen Abschnitt den Verbindugstest gemacht hat steht das da auch gleich nach dem Login auf dem Oracle-Server:

Connected to:
Oracle Database 10g Release 10.2.0.4.0 - 64bit Production


Die Python Version fragt ihr einfach in der Shell ab:

root@zabbix:~# python --version
Python 2.7.1+


So, ich habe hier ein 64Bit Ubuntu, eine Oracle-Datenbank Version 10g und Python Version 2.7
Also lade ich mir unter http://cx-oracle.sourceforge.net/ das Paket

•CentOS 5 x86_64 RPM (Oracle 10g, Python 2.7)

herunter. Das hies bei mir

cx_Oracle-5.1.2-10g-py27-1.x86_64.rpm

welchen wir nun wieder af den Server schieben und mit

alien -i cx_Oracle-5.1.2-10g-py27-1.x86_64.rpm

Installieren.
Testen können wir das nun mit

python -c 'import cx_Oracle' 

Wenn es hierbei einen Fehler gibt:

root@zabbix:~# python -c 'import cx_Oracle'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named cx_Oracle

Dann liegt es daran daß das Paket die Datei cx_Oracle.so an den falschen Ort gepackt hat, nämlich nach

/usr/lib/python2.7/site-packages/

es gehört aber nach

/usr/lib/python2.7/dist-packages/

Das Problem lösen wir indem wir es zusätzlich an den richtigen Ort verlinken:

ln /usr/lib/python2.7/site-packages/cx_Oracle.so /usr/lib/python2.7/dist-packages/cx_Oracle.so
ln /usr/lib/python2.7/site-packages/cx_Oracle-5.1.2-py2.7.egg-info /usr/lib/python2.7/dist-packages/cx_Oracle-5.1.2-py2.7.egg-info

so liegt die gleiche Datei an beiden Orten (es immer die gleiche Datei)
Nun noch einmal testen:

python -c 'import cx_Oracle'

und die Ausgabe sollte ...
root@zabbix:~/oracle-files# python -c 'import cx_Oracle' Traceback (most recent call last):

 File "<string>", line 1, in <module>

ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory Arggh der nächste Fehler ... den Ihr bestimmt nicht habt ...
Ok, den beheben wir mit

ln /usr/lib/libpyglib-2.0-python2.7.so.0.0.0 /usr/lib/libpython2.7.so.1.0

und dann sollte nach

python -c 'import cx_Oracle'

einfach nichts passieren!



3.4 pyora.py installieren

Ihr geht auf https://github.com/bicofino/Pyora und ladet euch die pyora.py herunter.

Nun weichen wir ein wenig von dem ab was der Entwickler sich gedacht hat. Dieser hat das Script über den Agenten eingebunden,
wir nutzen einfach das "externalscripts" Verzeichnis von Zabbix und starten es auch als "External Check":

Kopiert die Datei pyora.py in das Verzeichnis "externalscripts" eurer Zabbix-Installation.
Wenn ihr nach Standard installiert habt findet Ihr es unter

/usr/local/share/zabbix/externalscripts

Das ist der Pfad der in eurer zabbix_server.conf definiert ist:

### Option: ExternalScripts
#       Full path to location of external scripts.
#       Default depends on compilation options.
#
# Mandatory: no
# Default:
# ExternalScripts=${datadir}/zabbix/externalscripts
ExternalScripts=/usr/local/share/zabbix/externalscripts

Und Ihr müsst die Datei noch ausführbar machen:

chmod +x pyora.py




3.4.1 1. Test

Wenn Ihr per puTTY in das Verzeichnis wechselt könnt Ihr einen kleine Test mit eurer Datenbank machen:

./pyora.py "--username" "benutzer" "--password" "12334" "--address" "database.znil.local" "--database" "TEST23" "bufbusywaits"

Beispielausgabe:

13649089

Prima! Wenn eine Zahl zurückkommt etc. läuft es.

Important.png
Hinweis: Wenn euer Oracle-Server NICHT auf dem Port 1521 lauscht so müsst Ihr den richtigen Port immer hinter der IP-Adresse angeben, z.B. 192.168.45.77:1531 - auch nachfolgend in den Makros für das Template!



3.4.2 2. Test

./pyora.py --username "benutzer" --password "12345" --address 123.123.123.123 --database "DATABASE" "version"

Beispielausgabe:



4 Integration in Zabbix

In Zabbix importiert Ihr nun das Template ... das vom pyora.py Programmierer funktioniert auf Agentenbasis, ich habe sein Template genommen und auf External Check umgebaut:

Template-znil-Oracle-Pyora.zip

Dann legt Ihr einen Host an bzw. bearbeitet einen vorhandenen:
Zabbix-Oracle-001.png
Statt des DNS-Namens könnt Ihr auch die IP nehmen.
Nun noch das Template mit dem Host verknüpfen:
Zabbix-Oracle-002.png

Nach etwas Geduld kommen die Werte rein:
Zabbix-Oracle-003.png




So, Scheiss Linux ... soviel fummelei bis ich endlich die richtigen Versionen von Oracle Client, cx_oracle und die Abhängigkeiten zusammen hatte .. man man unter Windows wäre die Installation eines Programmes ein Witz gewesen ...
--Bernhard Linz 16:54, 21. Okt. 2013 (CEST)



sieg@pisasales.de

53 Monaten zuvor
Punktzahl 0++
Klar, viel fummelei, aber es läuft!!!

Darius

49 Monaten zuvor
Punktzahl 0++
Vielen Dank. Ne knappe Stunde und es läuft <3

Timo

47 Monaten zuvor
Punktzahl 0++

Also es scheint essentiell wichtig zu sein, welche Version der Oracle Tools installiert sind. Das liegt nicht an der DB bzw. dem Server sondern anscheinend an den Abhängigkeiten innerhalb des cx_Oracle Scripts.

Habe einen Link bei ORACLE gefunden wo anscheinend alle Versionen ab 10.1 zu finden sind:

http://www.o…-092277.html

Volker

45 Monaten zuvor
Punktzahl 0++

Ich sage auch noch einmal gaannnzzzz herzlichen Dank für deine Arbeit!! Lies sich nach deiner Anleitung bestens installieren und hat auch alles auf Anhieb geklappt!!

1A

Eine Frage hab ich jetzt allerdings doch noch!! Mit dem Wert --> {$ARCHIVE} kann ich leider gar nichts anfangen!? :-/

Könntest du mir hier evtl. auf die Sprünge helfen??

DANKE Volker

BLinz

4 Monaten zuvor
Punktzahl 0++
Instanz?

BLinz

3 Monaten zuvor
Punktzahl 0++
So, gerade unter Ubuntu 18.04. wieder eingerichtet (Umzug von 14.04) und Zabbix 3.4 - das funktioniert immer noch nach obiger Anleitung

TEDHEAD

2 Monaten zuvor
Punktzahl 0++
in den Auslösern des templates meckert er noch ein invalid macro $HIGH an. Wie muss das denn belegt werden ?
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.