Esta é uma tradução da página de documentação original em inglês. Ajude-nos a torná-la melhor.

14 Monitoramento ODBC

Visão geral

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

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

O Zabbix pode consultar qualquer banco de dados compatível com ODBC. Para isso, o Zabbix não se conecta diretamente aos bancos de dados, mas usa a interface e os drivers ODBC configurados no sistema. Essa função permite um monitoramento mais eficiente de diferentes bancos de dados para diversos propósitos — por exemplo, verificar filas específicas do banco de dados, estatísticas de uso e assim por diante. O Zabbix suporta unixODBC, que é uma das implementações de API ODBC de código aberto mais comumente usadas.

Veja também os problemas conhecidos known issues para verificações ODBC.

Instalando 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 por padrão no repositório de pacotes. Se não estiver disponível, pode ser obtido na página oficial do unixODBC: http://www.unixodbc.org/download.html.

Instalando unixODBC em sistemas Ubuntu/Debian usando o gerenciador de pacotes apt:

apt install unixodbc unixodbc-dev

Instalando unixODBC em sistemas baseados no RedHat/Fedora usando o gerenciador de pacotes dnf:

dnf install unixODBC unixODBC-devel

Instalando unixODBC em sistemas baseados no SUSE usando o gerenciador de pacotes zypper:

zypper in unixODBC-devel

O pacote unixodbc-dev ou unixODBC-devel é necessário para compilar o Zabbix com suporte ao unixODBC.

Instalando drivers unixODBC

Um driver de banco de dados unixODBC deve ser instalado para o banco de dados que será monitorado. O unixODBC possui uma lista de bancos de dados e drivers suportados: 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.

Instalando o driver de banco de dados MySQL em sistemas Ubuntu/Debian usando o gerenciador de pacotes apt:

apt install odbc-mariadb

Instalando o driver de banco de dados MySQL em sistemas baseados no RedHat/Fedora usando o gerenciador de pacotes dnf:

dnf install mariadb-connector-odbc

Instalando o driver de banco de dados MySQL em sistemas baseados no SUSE usando o gerenciador de pacotes zypper:

zypper in mariadb-connector-odbc

Configurando unixODBC

A configuração do ODBC é feita editando os arquivos odbcinst.ini e odbc.ini. Para verificar a localização dos arquivos de configuração, digite:

odbcinst -j

odbcinst.ini é usado para listar os drivers de banco de dados ODBC instalados:

[mysql]
       Description = ODBC for MySQL
       Driver      = /usr/lib/libmyodbc5.so

Detalhes dos parâmetros:

Atributo Descrição
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.

odbc.ini é usado para definir fontes de dados:

[test]
       Description = MySQL test database
       Driver      = mysql
       Server      = 127.0.0.1
       User        = root
       Password    =
       Port        = 3306
       Database    = zabbix

Detalhes dos parâmetros:

Atributo Descrição
test Nome da fonte de dados (DSN).
Description Descrição da fonte de dados.
Driver Nome do driver do banco de dados - conforme especificado no 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 com o banco de dados.
Database Nome do banco de dados.

Para verificar se a conexão ODBC está funcionando corretamente, deve-se testar uma conexão com o banco de dados. Isso pode ser feito com a utilidade isql (incluída no pacote unixODBC):

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

Compilando Zabbix com suporte a ODBC

Para habilitar o suporte a ODBC, o Zabbix deve ser compilado com a seguinte flag:

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

Para saber mais sobre a instalação do Zabbix, consulte source code.

Configuração de itens no frontend do Zabbix

Configure um monitoramento de banco de dados item.

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

Especificamente para itens de monitoramento de banco de dados, você deve inserir:

Tipo Selecione Monitor de banco de dados aqui.
Chave Insira uma das duas chaves de item suportadas:
db.odbc.select[<unique short description>,<dsn>,<connection string>] - este item foi projetado para retornar um valor, ou seja, a primeira coluna da primeira linha do resultado da consulta SQL. Se a consulta retornar mais de uma linha, apenas a primeira linha será lida.
db.odbc.get[<unique short description>,<dsn>,<connection string>] - Assim, pode ser usado como um item mestre que coleta todos os dados em uma chamada do sistema, enquanto o pré-processamento JSONPath pode ser usado em itens dependentes para extrair valores individuais. Para mais informações, veja um exemplo example do formato retornado, usado em descoberta de baixo nível. Este item é suportado desde o Zabbix 4.4.
A descrição única servirá para identificar o item em triggers, etc.
Embora dsn e connection string sejam parâmetros opcionais, pelo menos um deles deve estar presente. Se o nome da fonte de dados (DSN) e a string de conexão forem definidos, o DSN será ignorado.
O nome da fonte de dados, se usado, deve ser configurado conforme especificado no odbc.ini.
A string de conexão pode conter argumentos específicos do driver.

Exemplo (conexão para o driver MySQL ODBC 5):
=> db.odbc.get[MySQL exemplo,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
Nome do usuário Insira o nome de usuário do banco de dados
Este parâmetro é opcional se o usuário estiver especificado no odbc.ini.
Se a string de conexão for usada, e o campo Nome de usuário não estiver vazio, ele será anexado à string de conexão comos UID=<user>
Senha Insira a senha do banco de dados
Este parâmetro é opcional se a senha estiver especificada no odbc.ini.
Se a string de conexão for usada e o campo Senha não estiver vazio, ela será anexada à string de conexão como PWD=<password>.
Desde o Zabbix 6.0.34, caracteres especiais são suportados neste campo.

Antes do Zabbix 6.0.34, se a senha contivesse um ponto e vírgula, ela deveria ser colocada entre chaves, por exemplo {P?;)*word}. Após o Zabbix 6.0.34, colocar a senha entre chaves neste caso ainda é suportado, mas não é obrigatório. A senha será anexada à string de conexão após o nome de usuário como 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.
Note que com o item db.odbc.select[], a consulta deve retornar apenas um valor.
Tipo de informação É importante saber que tipo de informação será retornada pela consulta, para que seja selecionada corretamente aqui. Com um tipo de informação incorreto, o item se tornará não suportado.

Notas importantes

  • Os itens de monitoramento de banco de dados se tornarão não suportados se nenhum processo odbc poller for iniciado na configuração do servidor ou proxy. Para ativar os ODBC pollers, configure o parâmetro StartODBCPollers no arquivo de configuração do Zabbix server ou, para verificações realizadas por proxy, no arquivo de configuração do Zabbix proxy.
  • O Zabbix não limita o tempo de execução da consulta. Cabe ao usuário escolher consultas que possam ser executadas em um tempo razoável.
  • O valor do parâmetro Timeout do servidor Zabbix é usado como o tempo limite de login ODBC (observe que, dependendo dos drivers ODBC, a configuração de tempo limite de login pode ser ignorada).
  • O comando SQL deve retornar um conjunto de resultados como qualquer consulta com select .... A sintaxe da consulta dependerá do SGBD que a processará. A sintaxe de uma solicitação a um procedimento armazenado deve começar com a palavra-chave call.

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, então a mensagem pode ser truncada. Se houver mais de um registro de diagnóstico ODBC, o Zabbix tenta concatená-los (separados por |), conforme permitido pelo limite de comprimento.