Monitora Oracle con Grafana e Prometheus
Puoi raccogliere le metriche Oracle su Google Cloud con Grafana e Prometheus.
Ecco un diagramma di architettura di esempio:
Configurare una macchina virtuale
Innanzitutto, crea una macchina virtuale (VM) per ospitare sia Grafana che Prometheus:
- Accedi alla console Cloud.
- Avvia l'istanza VM nel virtual private cloud (VPC)/nella subnet che utilizzi per accedere ai database Oracle. Se hai più database in più VPC, potresti dover aggiungere la route statica alle VPC.
Installa Prometheus
Per installare Prometheus sulla VM configurata:
Scarica il software Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz
Estrai il file scaricato:
tar xvf prometheus-2.19.2.linux-amd64.tar.gz
Crea il servizio Prometheus sulla 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/*
Crea il file del servizio Prometheus:
cd /lib/systemd/system sudo touch prometheus.service
Aggiungi questi contenuti al file
prometheus.service
con un editor di testo di tua scelta.[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
Attiva e avvia il servizio
prometheus
:sudo systemctl enable prometheus sudo systemctl start prometheus
Installa Grafana
Grafana viene utilizzato per la configurazione della dashboard e dell'allarme.
Crea il repository yum per un'installazione facile di Grafana:
touch /etc/yum.repos.d/grafana.repo
Aggiungi queste righe a
/etc/yum.repos.d/grafana.repo
:[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
Installa Grafana tramite
yum install
e attiva il servizio:yum install grafana sudo systemctl start grafana-server sudo systemctl status grafana-server
Installa l'esportatore client Prometheus sui server di database
Per trasferire i dati da Oracle a Prometheus, devi disporre di un esportatore client. Puoi scegliere tra due opzioni:
Oracle DB Exporter
Scarica i file binari ed estraili:
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
Crea lo script shell come indicato di seguito. Devi assicurarti che
tnsping
risolva il nome TNS del database di seguito comedbrman
. Modificatnsnames.ora
setnsping
non riesce a risolveredbrman
.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
Esegui lo script in background e monitora
nohup.out
per verificare se vengono generati errori:nohup ./start_mon.sh &
Verifica che le metriche vengano raccolte:
curl -s http://YOUR RDBMS IP ADDRESS:9161/metrics | grep oracle
Prometheus Oracle Exporter
Questo esportatore Oracle richiede passaggi aggiuntivi e dovrai crearlo. Innanzitutto, installa Go 1.14 o versioni successive. Se hai già installato una versione precedente di Go, rimuovila per evitare errori.
Assicurati di aggiungere il percorso del file binario Go all'utente Oracle e all'utente root.
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
Installa i pacchetti richiesti per la compilazione Go. Puoi scaricare il client istantaneo Oracle rpm 12.2 poiché questo pacchetto utilizza il client istantaneo 1.2. Inoltre,non saltare l'SDK Oracle
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
Installa Oracle OCI8 seguendo i passaggi che seguono.
pkg-config --cflags --libs oci8
Innanzitutto, questo errore si verifica se installi solo il pacchetto OCI8. Questo problema è stato descritto in questo link al portale.
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
Per installare OCI8, devi installare alcuni pacchetti prima di compilare l'esportatore, quindi segui questi passaggi per risolvere il problema.
Copia oci8.pc da GitHub in questa directory denominata
/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 ```
Prova a installare di nuovo OCI8 dopo aver esportato le variabili di ambiente.
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
Crea l'esportatore:
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
Una volta completata la compilazione, puoi modificare il file
~/prometheus_oracle_exporter/oracle.conf
per includere il database che vuoi monitorare: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 utilizza un vecchio formato di timestamp Oracle. Se utilizzi la versione 12.2 o successive del RDBMS, modifica il timestamp del database nel vecchio formato. In caso contrario, la funzionalità di monitoraggio degli errori
alert.log
non funzionerà a causa del problema con il timestamp.alter system set UNIFORM_LOG_TIMESTAMP_FORMAT=FALSE scope=both;
Avvia l'esportatore. Crea lo script shell come segue:
vi star_mon_free_db.sh
Aggiungi queste righe:
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
Nell'ambiente RAC, puoi utilizzare il nome TNS come istanza specifica, come nell'esempio riportato di seguito. In questo modo puoi collegare ogni istanza per raccogliere le metriche specifiche dell'istanza.
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) ) )
Avvia il daemon:
nohup ./star_mon_free_db.sh &
Aggiungi il target sul server Prometheus
Nella VM in cui hai installato il servizio Prometheus, modifica il file
/etc/prometheus/prometheus.yml
in modo che contenga le seguenti informazioni sull'endpoint. Assicurati di utilizzare spazi anziché tabulazioni nel file yml. Il nome del joboracle_short
è il primo nodo del cluster RAC eoracle_short2
è il secondo.- 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}"
Riavvia il servizio
prometheus
per rilevare la nuova modifica:systemctl status prometheus
Creare una dashboard in Grafana utilizzando Prometheus come origine dati
L'ID utente e la password di Grafana predefiniti sono
admin
. Innanzitutto, disattiva l'accesso anonimo e consenti la registrazione impostando l'opzione abilitata su false.vi /etc/grafana/grafana.ini
enable anonymous access ;enabled = false disable user signup / registration ;allow_sign_up = false
Riavviare Grafana:
systemctl restart grafana-server
Cambia la password amministratore con la tua.
Crea DataSource seguendo questa procedura.
Vai a **Configurazione > Origini dati > Aggiungi origine dati > Scegli Prometheus
Aggiungi l'URL** come endpoint del server Prometheus. In questo esempio,
--web.listen-address=0.0.0.0:9090
è l'ascoltatore del servizio, quindi l'URL dell'endpoint èhttp://localhost:9090
.Prometheus Oracle Explorer contiene alcune dashboard di esempio per il monitoraggio di Oracle. Li importeremo e li utilizzeremo. Puoi creare le tue dashboard e visualizzare le metriche disponibili oppure creare le nuove metriche personalizzate e visualizzarle nella nuova dashboard.
Fai clic su Dashboard > Gestisci > Importa > Carica file JSON, quindi seleziona il file JSON scaricato da freenetdigital.
Fai clic su Carica e importa.
Controlla se la dashboard mostra le metriche. Fai clic su Dashboard > Generale, quindi sulla dashboard che hai importato.
Riepilogo
Abbiamo creato una soluzione di monitoraggio di esempio con software open source per acquisire le metriche e visualizzarle tramite una dashboard di tua proprietà.
Puoi proteggere queste metriche implementando i seguenti miglioramenti:
- mTls tra ciascun endpoint.
- Crittografa la password Oracle.
- Proteggi gli endpoint di Grafana con il bilanciatore del carico SSL di Google Cloud e gli IP inseriti nella lista consentita.