Você está visualizando a documentação da versão de desenvolvimento, que pode estar incompleta.
Esta página inclui conteúdo traduzido automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

14 Monitoramento ODBC

Visão geral

O monitoramento ODBC corresponde ao tipo de item Database monitor no frontend do Zabbix.

ODBC é uma API middle-ware da linguagem de programação C para acessar sistemas de gerenciamento de banco de dados (DBMS). O conceito ODBC foi desenvolvido pela Microsoft e posteriormente portado para outras plataformas.

O Zabbix pode consultar qualquer banco de dados que seja suportado pelo ODBC. Para isso, o Zabbix não se conecta diretamente aos bancos de dados, mas usa a interface ODBC e os drivers configurados no ODBC. Isso permite um monitoramento mais eficiente de diferentes bancos de dados para múltiplos propósitos (por exemplo, verificar filas específicas do banco de dados, estatísticas de uso, etc.).

O Zabbix suporta unixODBC, que é uma das implementações de API ODBC de código aberto mais utilizadas.

Veja também: problemas conhecidos para verificações ODBC.

Instalando o unixODBC

A maneira recomendada de instalar o unixODBC é usar os repositórios de pacotes padrão do sistema operacional Linux. Nas distribuições Linux mais populares, o unixODBC está incluído no repositório de pacotes por padrão. Se os pacotes não estiverem disponíveis, os arquivos-fonte podem ser obtidos na página inicial do unixODBC: http://www.unixodbc.org/download.html.

Para instalar o unixODBC, use o gerenciador de pacotes do sistema de sua escolha:

# Para sistemas Ubuntu/Debian:
       apt install unixodbc unixodbc-dev
       
       # Para sistemas baseados em RedHat/Fedora:
       dnf install unixODBC unixODBC-devel
       
       # Para sistemas baseados em SUSE:
       zypper in unixODBC-devel

O pacote unixodbc-dev ou unixODBC-devel é necessário para compilar o Zabbix com suporte ao unixODBC. Para habilitar o suporte ODBC, o Zabbix deve ser compilado com a seguinte opção de configuração:

--with-unixodbc[=ARG] # Use ODBC driver against unixODBC package.

Instalando drivers unixODBC

O driver de banco de dados unixODBC deve ser instalado para o banco de dados que será monitorado. Para uma lista de bancos de dados e drivers suportados, consulte a página inicial do unixODBC: http://www.unixodbc.org/drivers.html.

Em algumas distribuições Linux, os drivers de banco de dados estão incluídos nos repositórios de pacotes.

MySQL

Para instalar o driver de banco de dados MySQL unixODBC, use o gerenciador de pacotes para o sistema de sua escolha:

# Para sistemas Ubuntu/Debian:
       apt install odbc-mariadb
       
       # Para sistemas baseados em RedHat/Fedora:
       dnf install mariadb-connector-odbc
       
       # Para sistemas baseados em SUSE:
       zypper install mariadb-connector-odbc

Para instalar o driver de banco de dados sem um gerenciador de pacotes, consulte a documentação do MySQL para mysql-connector-odbc, ou a documentação do MariaDB para mariadb-connector-odbc.

PostgreSQL

Para instalar o driver de banco de dados PostgreSQL unixODBC, use o gerenciador de pacotes para o sistema de sua escolha:

# Para sistemas Ubuntu/Debian:
       apt install odbc-postgresql
       
       # Para sistemas baseados em RedHat/Fedora:
       dnf install postgresql-odbc
       
       # Para sistemas baseados em SUSE:
       zypper install psqlODBC

Para instalar o driver de banco de dados sem um gerenciador de pacotes, consulte a documentação do PostgreSQL.

Oracle

Para instalar o driver de banco de dados unixODBC, consulte a documentação da Oracle.

MSSQL

Para instalar o driver de banco de dados MSSQL unixODBC em sistemas Ubuntu/Debian, use o gerenciador de pacotes de sua escolha:

# Para sistemas Ubuntu/Debian:
       apt install tdsodbc
       
       # Para sistemas baseados em RedHat/Fedora (pacotes EPEL: https://docs.fedoraproject.org/en-US/epel/):
       dnf install epel-release
       dnf install freetds
       
       # Para sistemas baseados em SUSE:
       zypper install libtdsodbc0

Para instalar o driver de banco de dados sem um gerenciador de pacotes, consulte o Guia do usuário FreeTDS.

Configurando o unixODBC

Para configurar o unixODBC, você deve editar os arquivos odbcinst.ini e odbc.ini. Você pode verificar a localização desses arquivos executando o seguinte comando:

odbcinst -j

O resultado do comando deve conter informações semelhantes ao seguinte:

unixODBC 2.3.9
       DRIVERS............: /etc/odbcinst.ini
       SYSTEM DATA SOURCES: /etc/odbc.ini
       FILE DATA SOURCES..: /etc/ODBCDataSources
odbcinst.ini

O arquivo odbcinst.ini lista os drivers de banco de dados ODBC instalados. Se odbcinst.ini estiver ausente, é necessário criá-lo manualmente.

[TEST_MYSQL]
       Description=ODBC for MySQL
       Driver=/usr/lib/libmyodbc5.so
       FileUsage=1
Parâmetro Descrição
TEST_MYSQL Nome do driver do banco de dados.
Description Descrição do driver do banco de dados.
Driver Localização da biblioteca do driver do banco de dados.
FileUsage Determina se o driver do banco de dados suporta conexão a um servidor de banco de dados sem suporte para acesso a arquivos locais (0); suporta leitura de dados de arquivos (1); suporta gravação de dados em arquivos (2).
Threading Nível de serialização de threads. Suportado para PostgreSQL.
Desde a 1.6, se o gerenciador de drivers for compilado com suporte a threads, você pode adicionar outra entrada de driver.
odbc.ini

O arquivo odbc.ini é usado para configurar fontes de dados. Observe que a lista de parâmetros suportados depende do driver do banco de dados (por exemplo, bancos de dados Oracle podem usar ServerName em vez de Server, etc.).

[TEST_MYSQL]
       Description=MySQL Test Database
       Driver=mysql
       Server=127.0.0.1
       User=root
       Password=
       Port=3306
       Socket=
       Database=zabbix
Parâmetro Descrição
TEST_MYSQL Nome da fonte de dados (DSN).
Description Descrição da fonte de dados.
Driver Nome do driver do banco de dados (conforme especificado em odbcinst.ini).
Server IP/DNS do servidor de banco de dados.
User Usuário do banco de dados para conexão.
Password Senha do usuário do banco de dados.
Port Porta de conexão do banco de dados.
Socket Socket de conexão do banco de dados.
Database Nome do banco de dados.

Para outras opções possíveis de parâmetros de configuração, consulte a documentação do MySQL.

O arquivo odbc.ini para PostgreSQL pode conter parâmetros adicionais:

[TEST_PSQL]
       Description=PostgreSQL Test Database
       Driver=postgresql
       Username=zbx_test
       Password=zabbix
       Servername=127.0.0.1
       Database=zabbix
       Port=5432
       ReadOnly=No
       Protocol=8.0+
       ShowOidColumn=No
       FakeOidIndex=No
       RowVersioning=No
       ShowSystemTables=No
       Fetch=Yes
       BoolsAsChar=Yes
       SSLmode=Require
       ConnSettings=
Parâmetro Descrição
ReadOnly Especifica se a conexão com o banco de dados permite apenas operações de leitura (consultas SELECT) e restringe modificações (comandos INSERT, UPDATE e DELETE); útil para cenários em que os dados devem permanecer inalterados.
Protocol Versão do protocolo backend do PostgreSQL (ignorado ao usar conexões SSL).
ShowOidColumn Especifica se deve incluir o Object ID (OID) em SQLColumns.
FakeOidIndex Especifica se deve criar um índice único falso no OID.
RowVersioning Especifica se deve permitir que aplicativos detectem se os dados foram modificados por outros usuários enquanto você está tentando atualizar uma linha. Observe que este parâmetro pode acelerar o processo de atualização, pois, para atualizar uma linha, não é necessário especificar todas as colunas na cláusula WHERE.
ShowSystemTables Especifica se o driver do banco de dados deve tratar tabelas de sistema como tabelas regulares em SQLTables; útil para acessibilidade, permitindo visibilidade nas tabelas de sistema.
Fetch Especifica se o driver deve usar automaticamente declare cursor/fetch para lidar com instruções SELECT e manter um cache de 100 linhas.
BoolsAsChar Controla o mapeamento de tipos Booleanos.
Se definido como "Yes", Bools são mapeados para SQL_CHAR; caso contrário, são mapeados para SQL_BIT.
SSLmode Especifica o modo SSL para a conexão.
ConnSettings Configurações adicionais enviadas para o backend na conexão.
Testando a conexão ODBC

Para testar se a conexão ODBC está funcionando corretamente, você pode usar o utilitário isql (incluído no pacote unixODBC):

isql test
       +---------------------------------------+
       | Connected!                            |
       |                                       |
       | sql-statement                         |
       | help [tablename]                      |
       | quit                                  |
       |                                       |
       +---------------------------------------+

Configuração de item no frontend do Zabbix

Configure um item de Monitoramento de banco de dados.

Todos os campos obrigatórios estão marcados com um asterisco vermelho.

Para itens de monitoramento de banco de dados, você deve especificar:

Tipo Selecione "Monitoramento de banco de dados" aqui.
Chave Insira uma das chaves de item suportadas:
db.odbc.select[] - este item retorna um valor (a primeira coluna da primeira linha do resultado da consulta SQL);
db.odbc.get[] - este item retorna várias linhas/colunas em formato JSON;
db.odbc.discovery[] - este item retorna dados de descoberta de baixo nível.
Nome de usuário Insira o nome de usuário do banco de dados (até 255 caracteres).
Este parâmetro é opcional se o nome de usuário do banco de dados for especificado no arquivo odbc.ini.
Se uma string de conexão for usada e o campo Nome de usuário não estiver vazio, ele será adicionado à string de conexão como UID=<user>.
Senha Insira a senha do usuário do banco de dados (até 255 caracteres).
Este parâmetro é opcional se a senha for especificada no arquivo odbc.ini.
Se uma string de conexão for usada e o campo Senha não estiver vazio, ela será adicionada à string de conexão como PWD=<password>.
Caracteres especiais são suportados neste campo.
A senha será adicionada à string de conexão após o nome de usuário como, por exemplo, UID=<username>;PWD=P?;)*word.
Para testar a string resultante, você pode executar o seguinte comando:
isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD=P?;)*word'
Consulta SQL Insira a consulta SQL.
Observe que com db.odbc.select[], a consulta deve retornar apenas um valor.
Tipo de informação Selecione aqui o tipo de informação que será retornado pela consulta.
Se o tipo de informação for selecionado incorretamente, o item se tornará não suportado.

Notas importantes

  • Os items de monitoramento de banco de dados ficarão sem suporte se nenhum processo odbc poller for iniciado na configuração do server ou proxy. Para ativar os ODBC pollers, defina o parâmetro StartODBCPollers no arquivo de configuração do Zabbix server ou, para verificações realizadas pelo proxy, no arquivo de configuração do Zabbix proxy.
  • O valor do parâmetro Timeout no formulário de configuração do item é usado como o tempo limite de login ODBC e o tempo limite de execução da consulta. Observe que essas configurações de tempo limite podem ser ignoradas se o driver ODBC instalado não as suportar.
  • O comando SQL deve retornar um conjunto de resultados como qualquer consulta usando a instrução select. A sintaxe da consulta dependerá do SGBD que irá processá-la. A sintaxe da requisição para uma procedure de armazenamento deve ser iniciada com a palavra-chave call.

Detalhes da chave do item

Parâmetros sem colchetes angulares são obrigatórios. Parâmetros marcados com colchetes angulares < > são opcionais.

db.odbc.select[<descrição curta única>,<dsn>,<string de conexão>]


Retorna um valor, ou seja, a primeira coluna da primeira linha do resultado da consulta SQL.
Valor de retorno: Dependendo da consulta SQL.

Parâmetros:

  • descrição curta única - uma descrição curta única para identificar o item (para uso em triggers, etc.);
  • dsn - o nome da fonte de dados (conforme especificado em odbc.ini);
  • string de conexão - a string de conexão (pode conter argumentos específicos do driver).

Comentários:

  • Embora dsn e string de conexão sejam parâmetros opcionais, pelo menos um deles é obrigatório; se ambos forem definidos, dsn será ignorado.
  • Se uma consulta retornar mais de uma coluna, apenas a primeira coluna será lida. Se uma consulta retornar mais de uma linha, apenas a primeira linha será lida.
db.odbc.get[<descrição curta única>,<dsn>,<string de conexão>]


Transforma o resultado da consulta SQL em um array JSON.
Valor de retorno: objeto JSON.

Parâmetros:

  • descrição curta única - uma descrição curta única para identificar o item (para uso em triggers, etc.);
  • dsn - o nome da fonte de dados (conforme especificado em odbc.ini);
  • string de conexão - a string de conexão (pode conter argumentos específicos do driver).

Comentários:

  • Embora dsn e string de conexão sejam parâmetros opcionais, pelo menos um deles é obrigatório; se ambos forem definidos, dsn será ignorado.
  • Várias linhas/colunas em formato JSON podem ser retornadas. Este item pode ser usado como um item mestre que coleta todos os dados em uma chamada de sistema, enquanto o pré-processamento JSONPath pode ser usado em itens dependentes para extrair valores individuais. Para mais informações, veja um exemplo do formato retornado, usado em descoberta de baixo nível.

Exemplo:

# Conexão para o driver MySQL ODBC 5:
       db.odbc.get[Exemplo MySQL,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
db.odbc.discovery[<descrição curta exclusiva>,<dsn>,<string de conexão>]


Transforma o resultado da consulta SQL em um array JSON, usado para descoberta de baixo nível. Os nomes das colunas do resultado da consulta são transformados em nomes de macros de descoberta de baixo nível emparelhados com os valores dos campos descobertos. Essas macros podem ser usadas na criação de protótipos de item, trigger, etc.
Valor de retorno: objeto JSON.

Parâmetros:

  • descrição curta exclusiva - uma descrição curta exclusiva para identificar o item (para uso em triggers, etc.);
  • dsn - o nome da fonte de dados (conforme especificado em odbc.ini);
  • string de conexão - a string de conexão (pode conter argumentos específicos do driver).

Comentários:

  • Embora dsn e string de conexão sejam parâmetros opcionais, pelo menos um deles é obrigatório; se ambos forem definidos, dsn será ignorado.

Mensagens de erro

As mensagens de erro do ODBC são estruturadas em campos para fornecer informações detalhadas. Por exemplo, uma mensagem de erro pode ser assim:

Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
  • "Cannot execute ODBC query" - Mensagem do Zabbix
  • "[SQL_ERROR]" - Código de retorno do ODBC
  • "[42601]" - SQLState
  • "[7]" - Código de erro nativo
  • "[ERROR: syntax error at or near ";"; Error while executing the query]" - Mensagem de erro nativa

Observe que o comprimento da mensagem de erro é limitado a 2048 bytes, portanto, a mensagem pode ser truncada. Se houver mais de um registro de diagnóstico ODBC, o Zabbix tenta concatená-los (separados por |) até o limite de comprimento permitir.