Monitorar Tablespaces Oracle no Zabbix
Primeiro de tudo precisamos saber se o agente do zabbix está instalado no servidor de banco de dados, para isso execute os comandos abaixo:
Verificar se existe o agente do zabbix instalado, Pesquise:
rpm -qa | grep zabbix
*Se retornar vazio o agente do zabbix não está instalado no servidor
Baixe o repositório Zabbix.
sudo rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
Se tiver vazio instale o agente do zabbix com o comando abaixo:
sudo yum install zabbix-agent
Ativar o agente do zabbix no Linux
sudo systemctl enable zabbix-agent
Iniciar o serviço
sudo systemctl start zabbix-agent
Verificar o status do agente do zabbix
sudo systemctl status zabbix-agent
Depois de validado que o agente do zabbix está instalado e ativo, vamos precisar alterar os arquivo de configuração/etc/zabbix/zabbix_agentd.conf
Edite:
Server= <IP do Servidor Zabbix>
ServerActive= <IP do Servidor Zabbix>
Hostname= <Nome do Servidor Zabbix>
Crie uma pasta para os scripts e os arquivos .sh
Nesse exemplo vou criar uma pasta chamada script em /oracle/script
Execute os comandos para criar os arquivos .sh
touch tablespacesize.sh
touch tablespace_discovey.sh
touch sessions_longops.sh
————————————————————————————————————————————————————-
tablespacesize.sh = script para conectar o servidor ao banco de dados
tablespace_discovey.sh= script para realizar a descoberta das tablespaces
sessions_longops.sh = Script para verificar se tem operações longas ou travadas em andamento
Ajuste user/password@localhost para o seu usuário Oracle com permissões.
Torne o script executável:
chmod +x /path/to/scripts/tablespace_size.sh
chmod +x /path/to/scripts/tablespace_discovey.sh
chmod +x /path/to/scripts/sessions_logops.sh
————————————————————————————————————————————————————-
Permitir execução de scripts SQL –
Para rodar consultas Oracle, use um script que execute SQL via sqlplus.
Configure parâmetro para UserParameter, exemplo: (No servidor Oracle)
UserParameter=oracle.tablespace.size,/path/to/scripts/tablespace_size.sh
UserParameter=oracle.tablespace.discovery,/oracle/script/tablespace_discovery.sh
cole no final do arquivo nano /etc/zabbix/zabbix_agentd.conf

Reinicie o agente
sudo systemctl restart zabbix-agent
sudo systemctl enable zabbix-agent
Crie uma credencial Oracle
Exemplo:
USER=”zabbix2″
PASS=”ZabbixSenha123″
_________________________________________________________________________________________________________
Criar script para consulta de tablespaces no Oracle
#!/bin/bash
#Configuração Oracle
ORACLE_SID=cdbtst
ORACLE_HOME=/oracle/orabase/product/19.3/db_p1
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID ORACLE_HOME PATH
#Credenciais Oracle
USER=”zabbix2″
PASS=”ZabbixSenha123″
#Tablespace a ser consultada
tablespace=$1
#Executar consulta SQL com conexão explícita e capturar resultado
result=$($ORACLE_HOME/bin/sqlplus -s /nolog <<EOF
connect $USER/$PASS@//localhost:1521/DBTST
set pagesize 0 feedback off verify off heading off echo off
SELECT ROUND((df.totalspace – fs.freespace) / df.totalspace * 100, 2)
FROM
(SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS freespace
FROM dba_free_space
GROUP BY tablespace_name) fs,
(SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS totalspace
FROM dba_data_files
GROUP BY tablespace_name) df
WHERE df.tablespace_name = fs.tablespace_name
AND df.tablespace_name = UPPER(‘$tablespace’);
EOF
)
#Exibir resultado limpo, removendo espaços e quebras de linha
echo “$result” | tr -d ‘[:space:]’ | sed ‘/^$/d’
_________________________________________________________________________________________________________
Criar script para descoberta de todas as tablespaces
#!/bin/bash
ORACLE_HOME=/oracle/orabase/product/19.3/db_p1
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID ORACLE_HOME PATH
USER=”zabbix2″
PASS=”ZabbixSenha123″
echo -n ‘{“data”:[‘
first=true
tablespaces=$($ORACLE_HOME/bin/sqlplus -s /nolog <<EOF
connect $USER/$PASS@//localhost:1521/DBTST
set pagesize 0 feedback off verify off heading off echo off
SELECT tablespace_name FROM dba_tablespaces;
EOF
)
for tbs in $tablespaces; do
if [ “$first” = true ]; then
first=false
else
echo -n ‘,’
fi
echo -n “{\”{#TABLESPACE}\”:\”$tbs\”}”
done
echo ‘]}’
__________________________________________________________________________________________________________
Criar script para operações longas em andamento
#!/bin/bash
export ORACLE_HOME=/oracle/orabase/product/19.3/db_p1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
sqlplus -S zabbix2/ZabbixSenha123@//localhost:1521/DBTST < 0;
exit
EOF
__________________________________________________________________________________________________________
Vá para o Zabbix para criar as regras de monitoramento
Primeiro passo é criar um template, acesse Dados Coletados > Templates > Criar Template
Dê um nome para o template.

No meu caso vou chamar de “Servidores Oracle”

Clique em Regras de descoberta > Criar regra de descoberta
Crie a regra conforme abaixo:

Clique em Protótopos de itens > Criar protótipo de itens
Crie a regra conforme abaixo:

Clique em Protótipo de trigger > Criar protótipo de trigger
Crie a regra conforme a imagem abaixo:

Pronto, agora o seu zabbix está monitarando suas tablespaces do seu banco de dados Oracle. Quando uma tablespace ultrapassar 95% do seu tamanho irá alertar no Zabbix!