Aktionen

Oracle Datenbank mit Zabbix überwachen: Unterschied zwischen den Versionen

Aus znilwiki

(kein Unterschied)

Version vom 13. November 2019, 10:59 Uhr

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:


Voraussetzungen




Installation

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:




Oracle Client installieren

Warning.png
Warnung: Ihr müsst mindestens den Client 11.2 installieren, sonst funktioniert es nicht mehr. Der Client funktioniert auch mit 10er Oracleversionen!


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.

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




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




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/




Neuer Weg

apt install python-pip
pip install cx_Oracle

Test:

python -c 'import cx_Oracle'

sollte KEINE Fehlermeldung etc. erzeugen.



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!



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




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!




2. Test

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

Beispielausgabe:



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
znil-Oracle-Pyora.zip => Export aus Zabbix 4.4.1

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)


Loading comments...