Aktionen

Oracle Datenbank mit Zabbix überwachen

Aus znilwiki

Version vom 13. November 2019, 11:59 Uhr von BLinz (Diskussion | Beiträge) (→‎Integration in Zabbix)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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)


sieg@pisasales.de
127 Monaten zuvor
Punktzahl 0 Du
Klar, viel fummelei, aber es läuft!!!
Darius
124 Monaten zuvor
Punktzahl 0 Du
Vielen Dank. Ne knappe Stunde und es läuft <3
Timo
122 Monaten zuvor
Punktzahl 0 Du
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
120 Monaten zuvor
Punktzahl 0 Du
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
79 Monaten zuvor
Punktzahl 0++
Instanz?
BLinz
78 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
77 Monaten zuvor
Punktzahl 0 Du
in den Auslösern des templates meckert er noch ein invalid macro $HIGH an. Wie muss das denn belegt werden ?
Volker
65 Monaten zuvor
Punktzahl 0 Du
Nach ewigen Jahren unter 2.4. haben wir jetzt mal einen neuen Zabbix 4.4 aufgesetzt. Leider haben wir hier jetzt div. Fehlermeldungen beim Import des Scripts. Invalid tag "/zabbix_export/templates/template(1)/items/item(1)": the tag "snmpv3_contextname" is missing.

Hast du hier evtl. eine Lösung??

BLinz
65 Monaten zuvor
Punktzahl 0++
Ich habe bei einem Kunden wo ich es im Einsatz habe mal das Template aus 4.4.1 Exportiert und oben beim Download hinzugefügt.
Volker
65 Monaten zuvor
Punktzahl 0 Du
Hallo Bernhard,

danke für deine super schnelle Hilfe. Das Template lies sich jetzt ohne Probleme installieren. leider bekomme ich hier in meinem Zabbix immer noch eine Antwort von der Datenbank. Von der Commandlne kann ich sowohl über pyora als auch via SQL Plus auf die DB zugreifen. Pyora hat aber anscheinen bei manchen Abfragen so seine Probleme. Bei den Tablespaces bekomme ich zwar keinen Fehler aber halt auch keine Antwort. Die Hosts di eich im Zabbix eingerichtet haben bleiben unter Unknown stehen und geben auch keine Antworten.

In den Logfiles habe ich solche sachen gefunden. 1004:20191113:135511.401 item "test3-oracle12.1:pyora.py["--username",{$USERNAME},"--password",{$PASSWORD},"--address",{$ADDRESS},"--database",{$DATABASE},enqueue]" became not supported: Value "" of type "string" is not suitable for value type "Numeric (unsigned)"

1004:20191113:135515.406 item "test3-oracle12.1:pyora.py["--username",{$USERNAME},"--password",{$PASSWORD},"--address",{$ADDRESS},"--database",{$DATABASE},lastapplarclog]" became not supported: Value "None" of type "string" is not suitable for value type "Numeric (unsigned)"

So wie ich das sehe sammelt er schon Daten, kommt aber leider nicht zum Ziel

Hast du hier evtl. noch eine Idee??

BLinz
65 Monaten zuvor
Punktzahl 0++
Laut den Logs sammelt er eben keine Daten - er bekommt leere Werte "" oder keine Werte "None" zurück. Beim Kunden wo ich das Template exportiert habe funktioniert das alles. Ich verstehe aber das es nur bei den Tablespaces ein Problem gibt, der Rest funktioniert?
Anonymer Benutzer #9
65 Monaten zuvor
Punktzahl 0 Du
Hallo Bernhard,

das ist nicht ganz richtig. Wenn ich über die Commandline via SSH auf dem Server im Ordner /usr/lib/zabbix/externalscripts das Pyora.py aufrufe bekomme ich antworten. Auch von den Tablespaces. z. B.: appliance@zabbix:/usr/lib/zabbix/externalscripts$ ./pyora.py --address XXX.XXX.XXX.XXX --username XXX --password XXX --database XXXX query_sysmetrics User_Transaction_Per_Sec 0.167084377611 appliance@zabbix:/usr/lib/zabbix/externalscripts$ ./pyora.py --address XXX.XXX.XXX.XXX --username XXX --password XXX --database XXXX tablespace XXXXXX 47

Aber im Zabbix bekomme ich leider keine Antworten. Auch wenn ich nur dein Template einbinde bleibt der STatus des Servers auf Unknown. Nur wenn man erst auch z.B. das Zabbix Template auswählt wird der Server als Onlinme gemarkert. Hast du eine Idee warum das nicht klappt - muss ich Zabbix evtl. noch einen Pfad zu der .py geben?

Danke Volker

Anonymer Benutzer #9
65 Monaten zuvor
Punktzahl 0 Du
Hallo Bernhard,

alles zurück - jetzt hat doch der Server Daten gesammelt!!! Nochmals ganz herzlichen Dank für deine schnelle und super Hilfe!!

Jetzt können dann auch alle Server auf den neuen Zabbix umziehen! Danke und ein schönes Wochenende

Anonymer Benutzer #11
4 Monaten zuvor
Punktzahl 0 Du
Hallo Bernhard,

Jahre her, aber dein Tool macht immer noch einen hervorragenden Job!!

Ich habe hier nur jetzt einen Teil den ich gerne explizit abfragen möchte. Habe ich eine Möglichkeit mit deinem Template auch eigene SQL Requests gegen die DB zu senden und dann entsprechend auszuwerten?

Das würde uns hier super helfen! Gruß Volker

BLinz
4 Monaten zuvor
Punktzahl 0++
Wenn du das Template nutzt, hast du ja pyora.py erfolgreich installiert. Du müsstest das Skript um deine weiteren Abfragen erweitern. Es läuft aber ja auch der sqlplus-Client von Oracle. Über diesen könntest du per Kommandzeilenaufruf auch direkt Abfragen erstellen. Oder du schaust dir mal die neuen Option in Zabbix an. Ich setze das hier nur noch bei einem einzigen Kunden ein bei dem ich nur den Zabbix-Server immer wieder aktualisiert habe. Wenn man das neu einrichtet würde man sich wohl die aktuelleren Templates anschauen, als ich diesen Artikel damals neu erstellt habe, gab es noch nicht so viel.
Anonymer Benutzer #11
4 Monaten zuvor
Punktzahl 0 Du
Hallo Bernhard, danke für die super schnelle Antwort :-) Ich bin natürlich nicht direkt dazu gekommen, aber habe es mir jetzt die Abfrage super einfach in die pyora.py eingebaut. Ein neues Item und zwei Trigger und alles läuft perfekt!

Danke nochmals für die Hilfe Gruß Volker

Anonymer Benutzer #12
3 Monaten zuvor
Punktzahl 0 Du
Ich hatte ein ähnliches Problem, als ich versuchte, die Überwachung für meine Oracle-Datenbank in Zabbix einzurichten. Nach stundenlangem Debuggen fand ich die Dokumentation von Vultr zu verschiedenen Setups unglaublich hilfreich. Obwohl das genaue Problem, das du beschrieben hast, dort nicht behandelt wurde, haben mich die detaillierten Anleitungen dazu inspiriert, tiefer in die Konfigurationsdetails einzutauchen.

Für alle, die ähnliche Herausforderungen haben: Stellt sicher, dass eure Skripte, wie pyora.py, numerische Werte ausgeben, wo Zabbix Numeric (unsigned) erwartet. Diese Diskrepanz ist oft der Grund für die „not supported“-Fehler, die du in deinen Logs siehst. Das Anpassen der Templates und Wertetypen in Zabbix könnte helfen, das Problem zu lösen.

Falls das Problem weiterhin besteht, empfehle ich dringend, die Ressource von Vultr zur Installation von Python und pip auf Ubuntu 24.04 zu prüfen. Sie ist ein großartiger Ausgangspunkt, um sicherzustellen, dass alle Abhängigkeiten korrekt konfiguriert sind.

Die Community und die detaillierte Dokumentation bei Vultr haben mir schon oft geholfen

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. Bei einem Kommentar wird deine IP-Adresse zusammen mit dem Text, den angegebenen Namen bzw. der Email-Adresse in der Datenbank für die Kommentare dauerhaft gespeichert. Genaueres kannst du hier nachlesen: Datenschutzerklärung
___________________________________________________________________________
Bitte beachte das der eingetragene Name oder die Email-Adresse für jeden sichtbar ist!