Monitoramento Oracle Database Windows
Escrito por HIT
Monitoramento Oracle Database no Windows
Procedimento para instalação do ODBC no Linux (Proxy)
Importante: Realizar os procedimentos abaixo na máquina do proxy, somente no primeiro monitoramento Oracle.
1. Instalação do Driver ODBC no Linux do Proxy
# yum install unixODBC unixODBC-devel
2. Instalação do Oracle Instant Client
Caso o Zabbix Proxy não esteja instalado diretamente em um servidor de Oracle Database, é necessário instalar o Oracle InstantClient. Nesse caso, siga as seguintes instruções:
Centos 7:
Baixar os arquivos RPM´s do Oracle InstantClient, para Sistemas Operacionais 64bits:
# wget https://app.hit.com.vc/downloads/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm --no-check-certificate # wget https://app.hit.com.vc/downloads/oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm --no-check-certificate
Ou então, caso o Sistema Operacional seja 32bits, baixar os seguintes arquivos RPM´s do Oracle InstantClient:
# wget http://nimbus.visualsystems.com.br/setupFiles/oracle-instantclient11.2-basic-11.2.0.4.0-1.i386.rpm # wget http://nimbus.visualsystems.com.br/setupFiles/oracle-instantclient11.2-odbc-11.2.0.4.0-1.i386.rpm
Prosseguir com o comando de instalação dos pacotes:
Centos 7:
rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm rpm -ivh oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
Instalar o Oracle InstantClient na seguinte ordem (32bits):
# rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.i386.rpm # rpm -ivh oracle-instantclient11.2-odbc-11.2.0.4.0-1.i386.rpm
Centos 8:
wget https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-odbc-19.5.0.0.0-1.x86_64.rpm wget https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm
Instalar o Oracle InstantClient na seguinte ordem (64bits):
# rpm -ivh oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm # rpm -ivh oracle-instantclient19.5-odbc-19.5.0.0.0-1.x86_64.rpm
3. Configuração do Oracle ODBC Driver
Criar o diretório /etc/oracle onde ficarão os arquivos de configuração utilizados pelo Oracle ODBC Driver:
# mkdir /etc/oracle
4. Configurar as variáveis de ambiente
Criar/editar o arquivo /etc/sysconfig/zabbix-proxy para configurar as variáveis de ambiente necessárias para o funcionamento do Oracle ODBC Driver:
Centos 7
cat << 'EOF' > /etc/sysconfig/zabbix-proxy ORACLE_HOME=/usr/lib/oracle/11.2/client64 LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:/usr/lib64 TNS_ADMIN=/etc/oracle NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1" export ORACLE_HOME export LD_LIBRARY_PATH export TNS_ADMIN export NLS_LANG EOF
Centos 8
cat << 'EOF' > /etc/sysconfig/zabbix-proxy ORACLE_HOME=/usr/lib/oracle/19.5/client64 LD_LIBRARY_PATH=/usr/lib/oracle/19.5/client64/lib:/usr/lib64 TNS_ADMIN=/etc/oracle NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1" export ORACLE_HOME export LD_LIBRARY_PATH export TNS_ADMIN export NLS_LANG EOF
5. Criar oracleenv.sh
Centos 7
cat << 'EOF' > /etc/oracle/oracleenv.sh #!/bin/sh export ORACLE_HOME=/usr/lib/oracle/11.2/client64 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64 export TNS_ADMIN=/etc/oracle export NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1" EOF
Centos 8
cat << 'EOF' > /etc/oracle/oracleenv.sh #!/bin/sh export ORACLE_HOME=/usr/lib/oracle/19.5/client64 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64 export TNS_ADMIN=/etc/oracle export NLS_LANG="AMERICAN_AMERICA.WE8ISO8859P1" EOF
Caso não tenha sido instalado o Oracle InstantClient, esteja se utilizado da própria instalação do Oracle Database, mudar a variável ORACLE_HOME para o local da instalação dos binários do banco de dados.
6. Validar se o arquivo de driver existe e está no caminho informado, executando o seguinte comando:
Centos 7
# find / -name libsqora.so.11.1
Centos 8
# find / -name libsqora.so.19.1
7. Configurar o arquivo do pacote unixODBC para ele carregar a biblioteca ODBC do Oracle InstantClient:
Acesse o arquivos:
# vi /etc/odbcinst.ini
Adicione as entradas no arquivo que foi criado:
Centos 7
[OracleODBC] Description = Oracle ODBC driver for Oracle Driver =/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 FileUsage = 1
Centos 8
[OracleODBC] Description = Oracle ODBC driver for Oracle Driver =/usr/lib/oracle/19.5/client64/lib/libsqora.so.19.1 FileUsage = 1
Realizar os procedimentos abaixo no servidor do banco:
1. Criar usuário de monitoramento
No Prompt de Comando (CMD), navegue até o diretório onde o Oracle XE está instalado
cd C:\oraclexe\app\oracle\product\11.2.0\server\bin
Ou caso seja outra versão:
cd C:\oraclexe\app\oracle\product\18.0.0\dbhomeXE\bin
Depois, usar o comando:
# sqlplus / as sysdba
Assim que logar no banco de dados criar o usuário com os seguintes comandos:
CREATE PROFILE "MONITORHIT" LIMIT COMPOSITE_LIMIT DEFAULT SESSIONS_PER_USER DEFAULT CPU_PER_SESSION DEFAULT CPU_PER_CALL DEFAULT LOGICAL_READS_PER_SESSION DEFAULT LOGICAL_READS_PER_CALL DEFAULT IDLE_TIME DEFAULT CONNECT_TIME DEFAULT PRIVATE_SGA DEFAULT FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_TIME DEFAULT PASSWORD_REUSE_MAX DEFAULT PASSWORD_VERIFY_FUNCTION NULL PASSWORD_LOCK_TIME DEFAULT PASSWORD_GRACE_TIME DEFAULT; CREATE USER MONITORHIT IDENTIFIED BY m0nit0rvS PROFILE MONITORHIT; GRANT CREATE SESSION TO MONITORHIT; GRANT CREATE PROCEDURE TO MONITORHIT; GRANT SELECT_CATALOG_ROLE TO MONITORHIT; GRANT SELECT ON GV_$SORT_SEGMENT TO MONITORHIT; GRANT SELECT ON SYS.TS$ TO MONITORHIT; GRANT SELECT ANY DICTIONARY TO MONITORHIT; GRANT SELECT ON SYSTEM.CTL_STB TO MONITORHIT; GRANT ALTER TABLESPACE TO "MONITORHIT"; GRANT ALTER DATABASE TO "MONITORHIT";
Observação: caso ocorra alguma falha em alguma das GRANT's desconsiderar, pois pode não existir a tabela no banco.
2.Criação da pasta Oracle:
Crie uma pasta com o nome "oracle" dentro da pasta do Zabbix Agent.
Caso o Agent tenha sido instalado via script para Windows da HIT, estará instalado no seguinte caminho: C:\Zabbix
3.Criação do script do oratest:
Na pasta de instalação do agente do Zabbix, faça a criação de um arquivo .bat com o seguinte script:
@echo off @set ORACLE_HOME=C:\oraclexe\app\oracle\product\11.2.0\server @set TNS_ADMIN=C:\Zabbix\oracle @echo EXIT SUCCESS; | %ORACLE_HOME%\bin\sqlplus -S -L %1/%2@%3 > null && echo 1 || echo 0
ALTERAR AS VÁRIAVEIS:
@set ORACLE_HOME=C:\oraclexe\app\oracle\product\11.2.0\server (Incluir o caminho onde o banco de dados está instalado)
@set TNS_ADMIN=C:\Zabbix\oracle (Incluir caminho da pasta Oracle na pasta do Agente do Zabbix)
4.Inserir UserParameter:
Acesse o arquivo zabbix_agentd.conf e adicione a seguinte entrada:
UserParameter=oratest[*],"C:\Zabbix\oratest.bat" $1 $2 $3
Alterar para o caminho em que o arquivo oratest.bat foi criado.
Salve e reinicie o serviço do Zabbix Agent.
5.tnsnames.ora
Para Localizar o Arquivo tnsnames.ora
:
- Navegue até o diretório onde o Oracle está instalado, geralmente em
C:\Oracle\product\
. - Siga o caminho até
dbhomeXE\network\admin\
. - O arquivo
tnsnames.ora
deve estar dentro deste diretório.
Realize uma CÓPIA deste arquivo e adicione a pasta oracle dentro da pasta do Zabbix Agent.
Realizar os procedimentos abaixo na máquina do Proxy:
Editar o arquivo /etc/odbc.ini para incluir uma entrada para cada base de dados monitorada. Veja o exemplo abaixo contendo duas entradas de conexões:
# vi /etc/odbc.ini
Adicione as entradas no arquivo que foi criado:
[banco] Description = myoracledb database Driver = OracleODBC ServerName = BANCO
Definição de cada conexão do arquivo /etc/odbc.ini:
- Entrada é o valor que deve ser informado na macro {$ORA_DSN} em cada host, como será detalhado mais à frente.
- O parâmetro ServerName de cada conexão é o valor da string de conexão configurada no arquivo /etc/oracle/tnsnames.ora
Editar o arquivo tnsnames.ora para ter uma entrada para cada banco de dados monitorado. No caso de cluster, criar um entrada para o cluster e uma para cada nó.
# vi /etc/oracle/tnsnames.ora
Adicione as entradas no arquivo, conforme o exemplo:
NOME_DO_BANCO =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = IP_DO_BANCO)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = NOME_DO_SERVICO_BANCO)
)
)
Utilizar o comando abaixo para setar o script:
# . /etc/oracle/oracleenv.sh
Utilizar o comando para testar a conexão:
isql banco MONITORHIT m0nit0rvS -v
Caso conecte, o retorno será conforme o quadro abaixo:
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
Utilizar o comando "quit" para fechar a conexão.
Caso exista algum outro erro, verificar se as libs dos drivers estão corretas conforme os procedimentos (Realizar no Proxy)
Caso aconteça o erro abaixo:
# isql -v banco [01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' : file not found [ISQL]ERROR: Could not SQLConnect
E o arquivo do driver ODBC Oracle se encontra corretamente no caminho, é porque existe alguma dependência desse arquivo que não existe. Execute o comando abaixo para encontrar a dependência que está gerando essa falha:
# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
Retorno:
ldd: warning: you do not have execution permission for `/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' linux-vdso.so.1 => (0x00007fff947ff000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f654d53c000) libm.so.6 => /lib64/libm.so.6 (0x00007f654d2b7000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f654d09a000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f654ce81000) = se estiver not found instalar rpm libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00007f654a511000) libodbcinst.so.1 => not found libc.so.6 => /lib64/libc.so.6 (0x00007f6549f6c000) /lib64/ld-linux-x86-64.so.2 (0x0000003661c00000) libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00007f6549b9e000) libaio.so.1 => /lib64/libaio.so.1 (0x00007f654999d000) libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007f6549794000)
Normalmente o retorno do comando vai apontar a falta do arquivo libodbcinst.so.1, caso isso ocorra, basta criar um link apontando para a biblioteca existente.
Veja os procedimentos abaixo:
# cd /usr/lib64
# ls -lahs *odbcins* 0 lrwxrwxrwx. 1 root root 20 May 14 16:02 libodbcinst.so -> libodbcinst.so.2.0.0 0 lrwxrwxrwx. 1 root root 20 May 14 16:02 libodbcinst.so.2 -> libodbcinst.so.2.0.0 72K -rwxr-xr-x. 1 root root 70K Aug 16 2014 libodbcinst.so.2.0.0
# ln -s libodbcinst.so.2.0.0 libodbcinst.so.1
# ls -lahs *odbcins* 0 lrwxrwxrwx. 1 root root 20 May 14 16:02 libodbcinst.so -> libodbcinst.so.2.0.0 0 lrwxrwxrwx. 1 root root 20 Jun 26 16:54 libodbcinst.so.1 -> libodbcinst.so.2.0.0 0 lrwxrwxrwx. 1 root root 20 May 14 16:02 libodbcinst.so.2 -> libodbcinst.so.2.0.0 72K -rwxr-xr-x. 1 root root 70K Aug 16 2014 libodbcinst.so.2.0.0
# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 ldd: warning: you do not have execution permission for `/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' linux-vdso.so.1 => (0x00007fff947ff000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f654d53c000) libm.so.6 => /lib64/libm.so.6 (0x00007f654d2b7000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f654d09a000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f654ce81000) libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00007f654a511000) libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00007f654a300000) libc.so.6 => /lib64/libc.so.6 (0x00007f6549f6c000) /lib64/ld-linux-x86-64.so.2 (0x0000003661c00000) libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00007f6549b9e000) libaio.so.1 => /lib64/libaio.so.1 (0x00007f654999d000) libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007f6549794000)
Aplicar o Template no Host.
Criar os templates para o cliente, seguindo o procedimento já estabelecido. Criar os seguintes templates para os clientes, de acordo com a necessidade:
- Databases standalone, instâncias single, sem ser em cluster:
- Template_Oracle_Standalone_<Cliente>: associado ao Template_Oracle_ Standalone_Padrao
- Databases em cluster, RAC ? Real Application Cluster:
- Template_Oracle_RAC_<Cliente> associado ao Template_Oracle_RAC_Padrao
- Databases que fazem parte de um cluster:
- Template_Oracle_No_RAC_<Cliente> associado ao Template_Oracle_No_RAC_Padrao
Depois de criados os templates, criar as seguintes macros em cada host (que correspondem a instâncias de banco de dados) que será monitorado:
{$ORA_DSN} = <DSN criado no arquivo /etc/odbc.ini>
{$ORA_USERNAME} = <usuário de monitoramento, normalmente MONITORHIT>
{$ORA_PASSWORD} = <senha do usuário de monitoramento, normalmente m0nit0rvS>