Surveiller Oracle avec Grafana et Prometheus
Vous pouvez collecter des métriques Oracle sur Google Cloud avec Grafana et Prometheus.
Voici un exemple de diagramme d'architecture :
Configurer une machine virtuelle
Commencez par créer une machine virtuelle (VM) pour héberger à la fois Grafana et Prometheus :
- Connectez-vous à la console Cloud.
- Lancez l'instance de VM sur le cloud privé virtuel (VPC)/sous-réseau que vous utilisez pour accéder aux bases de données Oracle. Si vous disposez de plusieurs bases de données sur plusieurs VPC, vous devrez peut-être ajouter la route statique sur les VPC.
Installer Prometheus
Pour installer Prometheus sur la VM que vous avez configurée, procédez comme suit :
Téléchargez le logiciel Prometheus :
wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz
Décompressez le fichier que vous avez téléchargé :
tar xvf prometheus-2.19.2.linux-amd64.tar.gz
Créez le service Prometheus sur la 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/*
Créez le fichier de service Prometheus :
cd /lib/systemd/system sudo touch prometheus.service
Ajoutez le contenu de ce fichier au fichier
prometheus.service
avec l'éditeur de texte de votre choix.[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
Activez et démarrez le service
prometheus
:sudo systemctl enable prometheus sudo systemctl start prometheus
Installer Grafana
Grafana est utilisé pour configurer le tableau de bord et les alarmes.
Créez un dépôt yum pour faciliter l'installation de Grafana :
touch /etc/yum.repos.d/grafana.repo
Ajoutez les lignes suivantes à
/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
Installez Grafana via
yum install
et activez le service :yum install grafana sudo systemctl start grafana-server sudo systemctl status grafana-server
Installer l'exportateur de clients Prometheus sur les serveurs de base de données
Vous aurez besoin d'un exportateur de clients pour transférer les données d'Oracle vers Prometheus. Deux options s'offrent à vous :
Exportateur de base de données Oracle
Téléchargez les binaires et extrayez-les :
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
Créez le script shell comme dans le contenu ci-dessous. Vous devez vous assurer que
tnsping
résout le nom TNS de la base de données dans le contenu ci-dessous en tant quedbrman
. Modifieztnsnames.ora
sitnsping
ne peut pas résoudredbrman
.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
Exécutez le script en arrière-plan et surveillez
nohup.out
pour voir si des erreurs sont générées :nohup ./start_mon.sh &
Vérifiez que les métriques sont collectées :
curl -s http://YOUR RDBMS IP ADDRESS:9161/metrics | grep oracle
Exportateur Oracle Prometheus
Cet exportateur Oracle nécessite des étapes supplémentaires et vous devez le compiler. Commencez par installer Go 1.14 ou une version ultérieure. Si une version plus ancienne de Go est déjà installée, supprimez-la pour éviter toute erreur.
Veillez à ajouter le chemin binaire Go à l'utilisateur racine et Oracle.
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
Installez les packages requis pour la compilation Go. Vous pouvez télécharger un client instantané Oracle rpm 12.2, car ce package utilise le client instantané 1.2. N'ignorez pas le 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
Installez Oracle OCI8 en procédant comme suit :
pkg-config --cflags --libs oci8
Cette erreur se produit si vous n'installez que le package OCI8. Ce problème a été décrit dans ce lien vers le portail.
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
Pour installer OCI8, vous devez installer certains packages avant de compiler l'exportateur. Suivez ces étapes pour résoudre le problème.
Copiez oci8.pc de github dans ce répertoire appelé
/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 ```
Réessayez d'installer OCI8 après avoir exporté les variables d'environnement.
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
Compilez l'exportateur :
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
Une fois la compilation terminée, vous pouvez modifier le fichier
~/prometheus_oracle_exporter/oracle.conf
pour inclure la base de données que vous souhaitez surveiller :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
L'exportateur Oracle Prometheus utilise un ancien format d'horodatage Oracle. Veuillez remplacer l'horodatage de votre base de données par l'ancien format si vous exécutez la version 12.2 du SGBDR ou une version ultérieure. Sinon, la fonctionnalité de surveillance des erreurs
alert.log
ne fonctionnera pas en raison du problème d'horodatage.alter system set UNIFORM_LOG_TIMESTAMP_FORMAT=FALSE scope=both;
Démarrez l'exportateur. Créez le script shell comme suit :
vi star_mon_free_db.sh
Ajoutez les lignes suivantes :
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
Dans l'environnement RAC, vous pouvez utiliser le nom TNS en tant qu'instance spécifique, comme dans l'exemple ci-dessous. Vous pouvez donc connecter chaque instance pour collecter les métriques spécifiques à l'instance.
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) ) )
Démarrez le daemon :
nohup ./star_mon_free_db.sh &
Ajouter la cible sur le serveur Prometheus
Sur la VM sur laquelle vous avez installé le service Prometheus, modifiez le fichier
/etc/prometheus/prometheus.yml
pour contenir les informations de point de terminaison suivantes. Veillez à utiliser des espaces au lieu des tabulations dans le fichier yml. Le nom de tâcheoracle_short
est le premier nœud du RAC etoracle_short2
est le second.- 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}"
Redémarrez le service
prometheus
pour appliquer la nouvelle modification :systemctl status prometheus
Créer un tableau de bord dans Grafana en utilisant Prometheus en tant que source de données
L'ID utilisateur et le mot de passe par défaut de Grafana sont
admin
. Tout d'abord, désactivez la connexion anonyme et autorisez l'inscription en définissant le paramètre d'activation sur "false".vi /etc/grafana/grafana.ini
enable anonymous access ;enabled = false disable user signup / registration ;allow_sign_up = false
Redémarrez Grafana :
systemctl restart grafana-server
Remplacez le mot de passe administrateur par le vôtre.
Créez la source de données en procédant comme suit :
Accédez à **Configuration > Sources de données > Ajouter une source de données > Sélectionner Prometheus.
Ajoutez une URL** comme point de terminaison du serveur Prometheus. Dans cet exemple,
--web.listen-address=0.0.0.0:9090
est l'écouteur de service. L'URL du point de terminaison est donchttp://localhost:9090
.L'explorateur Oracle Prometheus dispose de quelques exemples de tableaux de bord pour la surveillance d'Oracle. Nous les importerons et les utiliserons. Vous pouvez créer vos propres tableaux de bord et afficher les métriques disponibles, ou créer des métriques personnalisées et les afficher dans le nouveau tableau de bord.
Cliquez sur Tableau de bord > Gérer > Importer > Fichier Upload.json, puis sélectionnez le fichier JSON que vous avez téléchargé depuis freenetdigital.
Cliquez sur Charger et importer.
Vérifiez si le tableau de bord affiche les métriques. Cliquez sur Tableaux de bord > Général, puis sur le tableau de bord que vous avez importé.
Résumé
Nous avons créé un exemple de solution de surveillance avec des logiciels Open Source, en capturant les métriques et en les affichant via un tableau de bord que vous possédez.
Vous pouvez protéger ces métriques en mettant en œuvre les améliorations suivantes :
- Utiliser des mTls entre chaque point de terminaison.
- Chiffrer le mot de passe Oracle.
- Protéger les points de terminaison Grafana avec le SSL de l'équilibreur de charge GCP et les adresses IP autorisées.