Monitore o Oracle com o Grafana e o Prometheus
É possível coletar métricas da Oracle em Google Cloud com o Grafana e o Prometheus.
Veja um exemplo de diagrama de arquitetura:
Configurar uma máquina virtual
Primeiro, crie uma máquina virtual (VM) para hospedar o Grafana e o Prometheus:
- Faça login no console do Cloud.
- Inicie a instância de VM na nuvem privada virtual (VPC)/sub-rede que você usa para acessar os bancos de dados Oracle. Se você tiver vários bancos de dados em várias VPCs, talvez seja necessário adicionar a rota estática às VPCs.
Instalar o Prometheus
Para instalar o Prometheus na VM configurada:
Faça o download do software Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz
Descompacte o arquivo transferido:
tar xvf prometheus-2.19.2.linux-amd64.tar.gz
Crie o serviço Prometheus na 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/*
Crie o arquivo de serviço do Prometheus:
cd /lib/systemd/system sudo touch prometheus.service
Adicione o conteúdo a este arquivo
prometheus.service
com um editor de texto de sua escolha.[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
Ative e inicie o serviço
prometheus
:sudo systemctl enable prometheus sudo systemctl start prometheus
Instalar o Grafana
O Grafana é usado para configurar o painel e o alarme.
Crie o repositório yum para facilitar a instalação do Grafana:
touch /etc/yum.repos.d/grafana.repo
Adicione estas linhas 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
Instale o Grafana por
yum install
e ative o serviço:yum install grafana sudo systemctl start grafana-server sudo systemctl status grafana-server
Instalar o exportador de cliente do Prometheus nos servidores de banco de dados
Você precisará de um exportador de cliente para transferir dados do Oracle para o Prometheus. Há duas opções:
- Oracle DB Exporter (em inglês)
- Exportador do Oracle Prometheus
Exportador do banco de dados Oracle
Faça o download dos binários e extraia-os:
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
Crie o script de shell como este no conteúdo abaixo. Você precisará garantir que
tnsping
resolva o TNSname do DB abaixo comodbrman
. Modifiquetnsnames.ora
setnsping
não 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
Execute o script como segundo plano e monitore
nohup.out
para ver se algum erro foi gerado:nohup ./start_mon.sh &
Verifique se as métricas estão sendo coletadas:
curl -s http://YOUR RDBMS IP ADDRESS:9161/metrics | grep oracle
Prometheus Oracle Exporter
O exportador Oracle requer etapas adicionais, e você precisará criá-lo. Primeiro, instale o Go 1.14 ou posterior. Se você já tiver uma versão mais antiga do Go instalada, remova-a para evitar erros.
Adicione o caminho binário do Go para o Oracle e o usuário raiz.
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
Instale os pacotes necessários para o build do Go. Você pode fazer o download do cliente instantâneo Oracle rpm 12.2, porque esse pacote usa um cliente instantâneo 1.2. Além disso,não pule o SDK da 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
Siga as etapas abaixo para instalar o Oracle OCI8.
pkg-config --cflags --libs oci8
Primeiro, você encontrará esse erro ao instalar o pacote OCI8. Esse problema foi descrito neste link do 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
Para instalar o OCI8, existem alguns pacotes que você precisa instalar antes de compilar o exportador. Portanto, siga estas etapas para corrigir o problema.
Copie oci8.pc do github para este diretório chamado
/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 ```
Tente instalar o OCI8 novamente depois de exportar as variáveis de 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
Crie o 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
Depois da criação, é possível modificar o arquivo
~/prometheus_oracle_exporter/oracle.conf
para incluir o banco de dados que você quer monitorar: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
O Prometheus exportador do Prometheus usa um formato antigo de carimbo de data/hora do Oracle. Altere o carimbo de data/hora do banco de dados para o formato antigo, se você estiver executando a versão 12.2 do RDBMS e posteriores. Caso contrário, o recurso de monitoramento de erros
alert.log
não funcionará devido ao problema de carimbo de data/hora.alter system set UNIFORM_LOG_TIMESTAMP_FORMAT=FALSE scope=both;
Inicie o exportador. Crie o script de shell da seguinte maneira:
vi star_mon_free_db.sh
Adicione estas linhas:
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
No ambiente RAC, use o nome TNS como uma instância específica, como no exemplo abaixo. Assim, é possível conectar cada instância para coletar as métricas específicas da instância.
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) ) )
Inicie o daemon:
nohup ./star_mon_free_db.sh &
Adicionar o destino no servidor Prometheus
Na VM em que você instalou o serviço Prometheus, modifique o arquivo
/etc/prometheus/prometheus.yml
para conter as seguintes informações de endpoint. Use espaços em vez de guias no arquivo yml. O nome do joboracle_short
é o primeiro nó do RAC eoracle_short2
é o 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}"
Reinicie o serviço
prometheus
para selecionar a nova alteração:systemctl status prometheus
Criar um painel no Grafana usando o Prometheus como uma origem de dados
O ID do usuário e a senha padrão do Grafana são
admin
. Primeiro, desative o login anônimo e permita a inscrição definindo a opção "false".vi /etc/grafana/grafana.ini
enable anonymous access ;enabled = false disable user signup / registration ;allow_sign_up = false
Reinicie o Grafana:
systemctl restart grafana-server
Altere a senha de administrador.
Crie o DataSource com as etapas a seguir.
Vá para **Configuração > Fontes de dados > Adicionar fonte de dados > Escolher Prometheus
Adicione o URL** como o endpoint do servidor do Prometheus. Neste exemplo,
--web.listen-address=0.0.0.0:9090
é o listener de serviço, de modo que o URL do endpoint éhttp://localhost:9090
.O Prometheus Explorer Explorer tem alguns painéis de exemplo para monitoramento do Oracle. Elas serão importadas e usadas. É possível criar seus próprios painéis e exibir as métricas disponíveis ou criar as novas métricas personalizadas e exibi-las no novo painel.
Clique em Painel > Gerenciar > Importar > Upload.json file e selecione o arquivo json que você salvou em freenetdigital.
Clique em Carregar e importar.
Verifique se o painel exibe as métricas. Clique em Painéis > Geral e, depois, no painel importado.
Resumo
Criamos uma solução de monitoramento de amostra com softwares de código aberto para capturar as métricas e exibi-las em um painel de sua propriedade.
Proteja essas métricas implementando as seguintes melhorias:
- mTls entre cada endpoint.
- Criptografe a senha do Oracle.
- Protegendo os endpoints do Grafana com SSL do balanceador de carga do GCP e lista de permissão de IPs.