Oracle mit Grafana und Prometheus überwachen
Sie können Oracle-Messwerte in Google Cloud mit Grafana und Prometheus erfassen.
Hier ein Beispiel für ein Architekturdiagramm:
Virtuelle Maschine einrichten
Erstellen Sie zuerst eine virtuelle Maschine (VM) zum Hosten von Grafana und Prometheus:
- Melden Sie sich in der Cloud Console an.
- Starten Sie die VM-Instanz in der Virtual Private Cloud (VPC) bzw. im Subnetz, das Sie für den Zugriff auf Oracle-Datenbanken verwenden. Wenn Sie mehrere Datenbanken in mehreren VPCs haben, müssen Sie möglicherweise die statische Route in VPCs hinzufügen.
Prometheus installieren
So installieren Sie Prometheus auf der von Ihnen eingerichteten VM:
Laden Sie die Prometheus-Software herunter:
wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz
Entpacken Sie die heruntergeladene Datei:
tar xvf prometheus-2.19.2.linux-amd64.tar.gz
Erstellen Sie den Prometheus-Dienst auf der VM:
sudo useradd -rs /bin/false prometheus cd prometheus-2.19.2.linux-amd64 sudo cp prometheus promtool /usr/local/bin sudo chown prometheus:prometheus /usr/local/bin/prometheus sudo mkdir /etc/prometheus sudo cp -R consoles/ console_libraries/ prometheus.yml /etc/prometheus sudo mkdir -p data/prometheus sudo chown -R prometheus:prometheus data/prometheus /etc/prometheus/*
Erstellen Sie die Prometheus-Dienstdatei:
cd /lib/systemd/system sudo touch prometheus.service
Fügen Sie diesen Dateiinhalt der Datei
prometheus.service
mit einem Texteditor Ihrer Wahl hinzu.[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] Type=simple User=root Group=root ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path="/data/prometheus" \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.listen-address=0.0.0.0:9090 \ --web.enable-admin-api Restart=always [Install] WantedBy=multi-user.target
Aktivieren und starten Sie den Dienst
prometheus
:sudo systemctl enable prometheus sudo systemctl start prometheus
Grafana installieren
Grafana wird für das Dashboard und die Einrichtung des Alarms verwendet.
Erstellen Sie ein yum-Repository für eine einfache Grafana-Installation:
touch /etc/yum.repos.d/grafana.repo
Fügen Sie diese Zeilen
/etc/yum.repos.d/grafana.repo
hinzu:[grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt
Installieren Sie Grafana über
yum install
und aktivieren Sie den Dienst:yum install grafana sudo systemctl start grafana-server sudo systemctl status grafana-server
Prometheus-Clientexporter auf den Datenbankservern installieren
Sie benötigen einen Client-Exporter, um Daten von Oracle nach Prometheus zu übertragen. Es stehen zwei Optionen zur Auswahl:
Oracle DB Exporter
Laden Sie die Binärdateien herunter und extrahieren Sie sie:
wget https://github.com/iamseth/oracledb_exporter/releases/download/0.2.2/oracledb_exporter.0.2.2.linux-amd64.tar.gz tar -zxf oracledb_exporter.0.2.2.linux-amd64.tar.gz cd oracledb_exporter.0.2.2.linux-amd64
Erstellen Sie das Shell-Skript wie gezeigt unten im Inhalt. Prüfen Sie, ob
tnsping
den DB-TNS-Namen unten alsdbrman
auflöst. Ändern Sietnsnames.ora
, wenntnsping
nichtdbrman
auflösen kann.export ORACLE_HOSTNAME={your host name} export ORACLE_UNQNAME=dbrman export ORACLE_BASE=/apps/oracle/oracle_base export ORACLE_HOME=/apps/oracle/19.0.0/db_home_standalone export ORACLE_SID=dbrman export CUSTOM_METRICS=/home/oracle/oracledb_exporter.0.2.2.linux-amd64/custom-metrics.toml export PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/opt/glibc-2.14/lib export DATA_SOURCE_NAME=user/xxxxx@dbrman /home/oracle/oracledb_exporter.0.2.2.linux-amd64/oracledb_exporter -default.metrics=/home/oracle/oracledb_exporter.0.2.2.linux-amd64/default-metrics.toml -web.listen-address=0.0.0.0:9161
Führen Sie das Skript im Hintergrund aus und beobachten Sie
nohup.out
, um festzustellen, ob Fehler generiert werden:nohup ./start_mon.sh &
Prüfen Sie, ob Messwerte erfasst werden:
curl -s http://YOUR RDBMS IP ADDRESS:9161/metrics | grep oracle
Prometheus Oracle Exporter
Für diesen Oracle-Exporter sind zusätzliche Schritte erforderlich und Sie müssen ihn erstellen. Installieren Sie zuerst Go 1.14 oder höher. Wenn Sie bereits eine ältere Version von Go installiert haben, entfernen Sie diese, um Fehler zu vermeiden.
Sorgen Sie dafür, dass Sie den Oracle-Binärpfad zum Oracle- und Root-Nutzer hinzufügen.
wget https://golang.org/dl/go1.14.6.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.14.6.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin source ~/.bash_profile go version go version go1.14.6 linux/amd64
Installieren Sie die erforderlichen Pakete für den Go-Build. Sie können den Oracle rpm 12.2-Instant-Client herunterladen, da dieses Paket den Instant-Client 1.2 verwendet. Überspringen Sie auch nicht das Oracle SDK
oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
.rpm -i oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm rpm -i oracle-instantclient12.2-tools-12.2.0.1.0-1.x86_64.rpm rpm -i oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm yum install git yum install gcc go get github.com/BurntSushi/toml go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/common/log go get gopkg.in/yaml.v2 go get github.com/sirupsen/logrus go get gopkg.in/alecthomas/kingpin.v2
Installieren Sie Oracle OCI8 mithilfe der folgenden Schritte.
pkg-config --cflags --libs oci8
Dieser Fehler tritt zuerst auf, wenn Sie nur das OCI8-Paket installieren. Dieses Problem wurde in diesem Portallink beschrieben.
Package oci8 was not found in the pkg-config search path. Perhaps you should add the directory containing oci8.pc to the PKG_CONFIG_PATH environment variable No package 'oci8' found
Zum Installieren von OCI8 müssen Sie einige Pakete installieren, bevor Sie den Exporter erstellen. Führen Sie daher die folgenden Schritte aus, um das Problem zu beheben.
Kopieren Sie oci8.pc aus github in dieses Verzeichnis mit dem Namen
/usr/local/share/pkgconf
.mkdir /usr/local/share/pkgconfig cp {Downloaded unzipped directory}/oci8.pc /usr/local/share/pkgconfig cat oci8.pc
prefix=/usr includedir=${prefix}/include/oracle/12.2/client64 # <<== This is Oracle 12.2 instant client was installed via yum libdir=${prefix}/lib/oracle/12.2/client64/lib Name: oci8 Description: Oracle Instant Client Version: 12.2 Cflags: -I${includedir} Libs: -L${libdir} -lclntsh ```
Installieren Sie OCI8 noch einmal, nachdem Sie die Umgebungsvariablen exportiert haben.
export PKG_CONFIG_PATH=/usr/local/share/pkgconfig export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib go get github.com/mattn/go-oci8
Erstellen Sie den Exporter:
git clone https://github.com/freenetdigital/prometheus_oracle_exporter.git cd {cloned directory} export GOPATH=/home/oracle/go pwd
/home/oracle/prometheus_oracle_exporter
export GOPATH=/home/oracle/go go get github.com/freenetdigital/prometheus_oracle_exporter cd /home/oracle/go/src/github.com/freenetdigital/prometheus_oracle_exporter/ ls
alertlog.go grafana LICENSE main.go misc.go oracle.conf.example README.md
go install go build
Nach der erfolgreichen Erstellung können Sie die Datei
~/prometheus_oracle_exporter/oracle.conf
so ändern, dass sie die Datenbank enthält, die Sie überwachen möchten:connections: - connection: user/password@dbrman database: dbrman instance: dbrman alertlog: - file: /apps/oracle/oracle_base/diag/rdbms/dbrman/dbrman/trace/alert_dbrman.log ignoreora: - ORA-00001 - ORA-01033 - ORA-01041 - ORA-01089 - ORA-01555 - ORA-28 - ORA-235 - ORA-609 - ORA-3136 queries: - sql: "select 1 as column1, 2 as column2 from dual" name: sample1 help: "This is my metric number 1" metrics: - column1 labels: - column2 - sql: "select 2 as column1 from dual" name: sample2 help: "This is my metric number 2" metrics: - column1
Prometheus Oracle Exporter verwendet ein altes Oracle-Zeitstempelformat. Ändern Sie den Zeitstempel der Datenbank in das alte Format, wenn Sie eine RDBMS-Version 12.2 und höher verwenden. Andernfalls funktioniert das Feature
alert.log
zur Fehlerüberwachung aufgrund des Zeitstempelproblems nicht.alter system set UNIFORM_LOG_TIMESTAMP_FORMAT=FALSE scope=both;
Starten Sie den Exporter. So erstellen Sie das Shell-Skript:
vi star_mon_free_db.sh
Fügen Sie die folgenden Zeilen hinzu:
export PKG_CONFIG_PATH=/usr/local/share/pkgconfig export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib export TNS_ADMIN=/apps/oracle/19.0.0/db_home_standalone/network/admin export NLS_LANG=AMERICAN_AMERICA.UTF8 /home/oracle/prometheus_oracle_exporter/prometheus_oracle_exporter -configfile=/home/oracle/prometheus_oracle_exporter/oracle.conf -web.listen-address 0.0.0.0:9500 -defaultmetrics -recovery
In der RAC-Umgebung können Sie den TNS-Namen als instanzspezifisches Beispiel verwenden. Sie können also jede Instanz verbinden, um die instanzspezifischen Messwerte zu erfassen.
ORCL1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = {node 2 IP address} )(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (INSTANCE_NAME= orcl1) ) ) ORCL2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = {node 1 IP address} )(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (INSTANCE_NAME= orcl2) ) )
Starten Sie den Daemon:
nohup ./star_mon_free_db.sh &
Ziel auf dem Prometheus-Server hinzufügen
Ändern Sie auf der VM, auf der Sie den Prometheus-Dienst installiert haben, die Datei
/etc/prometheus/prometheus.yml
, sodass sie die folgenden Endpunktinformationen enthält. Achten Sie darauf, in der yml-Datei Leerzeichen anstelle von Tabs zu verwenden. Der Jobnameoracle_short
ist der erste Knoten des RAC undoracle_short2
der zweite Knoten.- job_name: 'oracle_short' static_configs: - targets: ['{your DB IP}:9500'] relabel_configs: - source_labels: ['__address__'] target_label: instance regex: '(.*):\d+' replacement: "${1}" - job_name: 'oracle_short2' static_configs: - targets: - 192.168.1.11:9500 relabel_configs: - source_labels: ['__address__'] target_label: instance regex: '(.*):\d+' replacement: "${1}"
Starten Sie den Dienst
prometheus
neu, um die neue Änderung zu übernehmen:systemctl status prometheus
In Grafana ein Dashboard mit Prometheus als Datenquelle erstellen
Die Nutzer-ID und das Passwort für Grafana sind standardmäßig
admin
. Deaktivieren Sie zuerst die anonyme Anmeldung und lassen Sie die Registrierung zu, indem Sie die Einstellung auf "falsch" setzen.vi /etc/grafana/grafana.ini
enable anonymous access ;enabled = false disable user signup / registration ;allow_sign_up = false
Starten Sie Grafana neu:
systemctl restart grafana-server
Ändern Sie das Administratorpasswort in Ihr eigenes.
Erstellen Sie die Datenquelle mit den folgenden Schritten:
Gehen Sie zu **Konfiguration > Datenquellen > Datenquelle hinzufügen > Prometheus auswählen.
Fügen Sie die URL** als Prometheus-Server-Endpunkt hinzu. In diesem Beispiel ist
--web.listen-address=0.0.0.0:9090
der Dienst-Listener. Daher ist die Endpunkt-URLhttp://localhost:9090
.Prometheus Oracle Explorer enthält einige Beispiel-Dashboards für das Oracle-Monitoring. Wir importieren diese und verwenden sie. Sie können eigene Dashboards erstellen und die verfügbaren Messwerte aufrufen oder die neuen benutzerdefinierten Messwerte erstellen und im neuen Dashboard anzeigen.
Klicken Sie auf Dashboard > Verwalten > Importieren > Upload.json-Datei und wählen Sie dann die JSON-Datei aus, die Sie von freenetvirtual heruntergeladen haben.
Klicken Sie auf Laden und importieren.
Prüfen Sie, ob die Messwerte im Dashboard angezeigt werden. Klicken Sie auf Dashboards > Allgemein und dann auf das importierte Dashboard.
Fazit
Wir haben eine Monitoring-Beispiellösung mit Open-Source-Software erstellt, die Messwerte erfasst und über ein Dashboard von Ihnen anzeigt.
Sie können diese Messwerte mit den folgenden Erweiterungen schützen:
- mTls zwischen den einzelnen Endpunkten.
- Oracle-Passwort verschlüsseln
- Schützen Sie Grafana-Endpunkte mit GCP-Load-Balancer-SSL und zulässigen IP-Adressen.