Supervisa Oracle con Grafana y Prometheus
Puedes recopilar métricas de Oracle en Google Cloud con Grafana y Prometheus.
A continuación, se muestra un diagrama de arquitectura de muestra:
Configura una máquina virtual
Primero, cree una máquina virtual (VM) para alojar a Grafana y Prometheus:
- Accede a la consola de Cloud.
- Inicia la instancia de VM en la nube privada virtual (VPC)/subred que usas para acceder a las bases de datos de Oracle. Si tienes varias bases de datos en varias VPC, es posible que debas agregar la ruta estática en las VPC.
Instala Prometheus
Para instalar Prometheus en la VM que configuraste, sigue estos pasos:
Descarga el software de Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz
Descomprime el archivo que descargaste:
tar xvf prometheus-2.19.2.linux-amd64.tar.gz
Crea el servicio de Prometheus en 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/*
Crea el archivo de servicio de Prometheus:
cd /lib/systemd/system sudo touch prometheus.service
Agrega estos contenidos de archivo al archivo
prometheus.service
con el editor de texto que prefieras.[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
Habilita e inicia el servicio
prometheus
:sudo systemctl enable prometheus sudo systemctl start prometheus
Instala Grafana
Grafana se usa para configurar el panel y la alarma.
Crea un repositorio de yum para facilitar la instalación de Grafana:
touch /etc/yum.repos.d/grafana.repo
Agrega estas líneas 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
Instala Grafana mediante
yum install
y habilita el servicio:yum install grafana sudo systemctl start grafana-server sudo systemctl status grafana-server
Instala el exportador de clientes de Prometheus en los servidores de las bases de datos
Necesitarás un exportador de clientes para obtener los datos de Oracle a Prometheus. Puedes elegir entre dos:
Exportador de base de datos de Oracle
Descarga los objetos binarios y extráelos:
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 la secuencia de comandos de shell como esta en el contenido siguiente. Deberás asegurarte de que
tnsping
resuelva el TNSname de la base de datos comodbrman
. Modificatnsnames.ora
sitnsping
no puede resolverdbrman
.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
Ejecuta la secuencia de comandos como fondo y supervisa
nohup.out
para ver si se generan errores:nohup ./start_mon.sh &
Verifica que se estén recopilando las métricas:
curl -s http://YOUR RDBMS IP ADDRESS:9161/metrics | grep oracle
Exportador de Prometheus para Oracle
Este exportador de Oracle requiere pasos adicionales y debes compilarlo. Primero, instala Go 1.14 o versiones posteriores. Si ya tienes instalada una versión anterior de Go, quítala para evitar errores.
Asegúrate de agregar la ruta del objeto binario de Go a Oracle y al usuario raíz.
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
Instala los paquetes necesarios para la compilación de Go. Puedes descargar el cliente instantáneo de Oracle rpm 12.2, ya que este paquete usa el cliente instantáneo 1.2. No omitas el SDK de 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
Instala Oracle OCI8 con los siguientes pasos.
pkg-config --cflags --libs oci8
Primero, aparecerá este error si instalas el paquete OCI8. Este problema se describió en este vínculo del portal.
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
Si quieres instalar OCI8, debes instalar algunos paquetes antes de compilar el exportador, así que sigue estos pasos para solucionar el problema.
Copia oci8.pc de github en este directorio llamado
/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 ```
Intenta instalar OCI8 nuevamente después de exportar las variables de entorno.
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
Compila el exportador:
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 vez que se compila de forma correcta, puedes modificar el archivo
~/prometheus_oracle_exporter/oracle.conf
para incluir la base de datos que deseas supervisar: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
El exportador de Oracle de Prometheus usa un formato de marca de tiempo de Oracle antiguo. Cambia la marca de tiempo de tu base de datos al formato anterior si ejecutas la versión RDBMS de 12.2 y versiones posteriores. De lo contrario, la característica de supervisión de errores
alert.log
no funcionará debido al problema de marca de tiempo.alter system set UNIFORM_LOG_TIMESTAMP_FORMAT=FALSE scope=both;
Inicia el exportador. Crea la secuencia de comandos de shell de la siguiente manera:
vi star_mon_free_db.sh
Agrega estas líneas:
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
En el entorno de RAC, puedes usar el nombre TNS como una instancia específica, como ejemplo a continuación. Por lo tanto, puedes conectar cada instancia para recopilar las métricas específicas de la instancia.
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) ) )
Inicia el daemon:
nohup ./star_mon_free_db.sh &
Agrega el destino en el servidor de Prometheus
En la VM en la que instalaste el servicio de Prometheus, modifica el archivo
/etc/prometheus/prometheus.yml
para que contenga la siguiente información del extremo. Asegúrate de usar espacios en lugar de pestañas en el archivo yml. El nombre del trabajooracle_short
es el primer nodo de la RAC yoracle_short2
es el segundo.- 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}"
Reinicia el servicio de
prometheus
para recoger el nuevo cambio:systemctl status prometheus
Crea un panel en Grafana con Prometheus como una fuente de datos
El ID de usuario y la contraseña predeterminados de Grafana es
admin
. Primero, inhabilita el acceso anónimo y permite el registro con la configuración habilitada en falso.vi /etc/grafana/grafana.ini
enable anonymous access ;enabled = false disable user signup / registration ;allow_sign_up = false
Reinicia Grafana:
systemctl restart grafana-server
Cambia la contraseña de administrador a tu propia cuenta.
Crea la DataSource mediante los siguientes pasos.
Ve a **Configuration > Data Sources > Add Data Source > Choose Prometheus.
Agrega la URL** como el extremo del servidor de Prometheus. En este ejemplo,
--web.listen-address=0.0.0.0:9090
es el objeto de escucha del servicio, por lo que la URL del extremo eshttp://localhost:9090
.Oracle Explorer de Prometheus tiene algunos paneles de muestra para la supervisión. Nosotros los importaremos y los usaremos. Puedes crear tus propios paneles y mostrar las métricas disponibles o crear las nuevas y personalizadas en el nuevo panel.
Haz clic en Dashboard > Manage > Import > Upload.json file y, luego, selecciona el archivo JSON que descargaste de freenetdigital.
Haz clic en Cargar e importar.
Verifica si el panel muestra las métricas. Haz clic en Paneles > General y, luego, en el panel que importaste.
Resumen
Creamos una solución de supervisión de muestra con software de código abierto para limitar las métricas y mostrarlas mediante un panel propio.
Puedes proteger estas métricas si implementas las siguientes mejoras:
- mTls entre cada extremo.
- Encripta la contraseña de Oracle
- Protege los extremos de Grafana con el SSL del balanceador de cargas de GCP y las IP incluidas en la lista de entidades permitidas.