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 tipo de item Monitor de banco de dados no Zabbix Frontend.

ODBC é uma API (middleware de linguagem de programação C) para acesso a Sistemas de Gerenciamento de Banco de Dados (SGBD). O conceito ODBC foi desenvolvido pela Microsoft e mais tarde portado para outras plataformas.

O Zabbix pode consultar qualquer banco de dados que seja suportado pelo ODBC. Para isso, o Zabbix não conecta diretamente o banco de dados, mas usa a interface ODBC e drivers configurados no ODBC. Esta função permite monitoramento mais eficiente de diferentes bancos de dados para múltiplos propósitos - por exemplo, verificar filas de banco de dados específicas, 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.

Consulte também os problemas conhecidos para verificações ODBC.

Instalando o unixODBC

A forma sugerida de instalação do unixODBC é usar o repositório de pacotes padrão do sistema Linux. Nas distribuições Linux mais populares o unixODBC é incluído no repositório de pacotes por padrão. Se não estiver disponível, ele pode ser obtido na página principal do unixODBC: http://www.unixodbc.org/download.html.

Para instalar o unixODBC nos sistemas baseados em RedHat/Fedora usando o gerenciador de pacotes yum:

shell> yum -y install unixODBC unixODBC-devel

Para instalar em sistemas baseados em SUSE usando o gerenciador de pacotes zypper:

# zypper in unixODBC-devel

O pacote unixODBC-devel é necessário para compilar o Zabbix com suporte a unixODBC.

Instalando drivers unixODBC

Um driver de banco de dados unixODBC deve ser instalado para o banco de dados que será monitorado. O unixODBC tem uma lista de bancos de dados e drivers suportados em: http://www.unixodbc.org/drivers.html. Em algumas distribuições Linux os drivers de banco de dados estão inclusos nos repositórios de pacotes.

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

shell> yum install mysql-connector-odbc

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

zypper in MyODBC-unixODBC

Configurando unixODBC

A configuração do ODBC é feita pela edição dos arquivos odbcinst.ini e odbc.ini. Para verificar a localização do arquivo, digite:

shell> odbcinst -j

O 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 de banco de dados.
Description Descrição do driver de banco de dados.
Driver Localização da biblioteca do driver de banco de dados.

O odbc.ini é usado para definir as fontes de dados (bancos de dados que serão consultados):

[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 de banco de dados - como definido em odbcinst.ini
Server Endereço IP/nome DNS do servidor de banco de dados.
User Usuário para conexão no banco de dados.
Password Senha para o usuário acima.
Port Porta de conexão ao banco de dados.
Database Nome do banco de dados.

Para verificar se a conexão ODBC está funcionando corretamente, uma conexão ao banco de dados deve ser testada. Isto pode ser feito com o utilitário isql (incluso no pacote unixODBC):

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

Compilando o Zabbix com suporte a ODBC

Para habilitar o suporte a ODBC, o Zabbix deve ser compilado com a seguinte opção:

  --with-unixodbc[=ARG]   use driver odbc em conjunto com pacote unixODBC

Veja mais sobre instalação do Zabbix a partir do código fonte.

Configuração de item no Zabbix Frontend

Configure um item de monitoramento de banco de dados.

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

Especificamente para itens de monitoramento de banco de dados você deve informar:

Tipo Selecione Monitor de banco de dados aqui.
Chave Informe uma de duas chaves de item suportadas:
db.odbc.select[<descrição curta única>,<dsn>,<string de conexão>] - este item é desenhado para retornar apenas um valor, p.e. a primeira coluna da primeira linha do resultado de uma consulta SQL. Se uma consulta retornar mais do que uma coluna, apenas a primeira coluna é lida. Se uma consulta retornar mais de uma linha, apenas a primeira linha é lida.
db.odbc.get[<descrição curta única>,<dsn>,<string de conexão>] - este item é capaz de retornar múltiplas linhas/colunas em formato JSON. Assim ele pode ser usado como um item principal 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 de 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 gatilhos, etc.
Apesar de dsn e string de conexão serem parâmetros opcionais, ao menos um deles deve estar presente. Se ambos (nome da fonte de dados - DSN e string de conexão) forem definidos, o DSN será ignorado.
O nome da fonte de dados, se usado, deve ser configurado como especificado em odbc.ini.
A string de conexão pode conter argumentos específicos de driver.

Exemplo (conexão para driver MySQL ODBC 5):
=> db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]
Nome de usuário Informe o nome do usuário do banco de dados
Este parâmetro é opcional se um usuário tiver sido especificado no odbc.ini.
Se é usada string de conexão, e Nome de usuário não estiver vazio, ele é adicionado à string de conexão como UID=<user>
Senha Informe a senha para o usuário acima
Este parâmetro é opcional se a senha estiver definida em odbc.ini.
Se é usada string de conexão, e o campo Senha não estiver vazio, ela é adicionada à string de conexão como PWD=<password>.
Consulta SQL Informe a consulta SQL (query).
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á retornado pela consulta, de modo que seja selecionado corretamente aqui. Com um tipo de informação incorreto o item se tornará não suportado.

Notas importantes

  • Itens de monitoramento de banco de dados se tornarão são suportados se nenhum processo odbc poller for iniciado na configuração do Server ou Proxy. Para ativar os pollers ODBC, defina o parâmetro StartODBCPollers no arquivo de configuração do Zabbix Server ou, para verificações pelo Proxy, no arquivo de configuração do Proxy.
  • O Zabbix não limita o tempo de execução de consultas (query). Cabe ao usuário escolher consultas que sejam executadas em um período de tempo razoável.
  • O valor de parâmetro de timeout do Zabbix Server é usado como tempo de expiração de sessão ODBC - ODBC login timeout (note que dependendo dos drivers ODBC o tempo de expiração de login deve ser ignorado).
  • O comando SQL deve retornar um conjunto de resultado como qualquer consulta com select .... A sintaxe de consulta dependerá do SGBD que a processará. A sintaxe de requisição para uma 'stored procedure' deve ser iniciada com a palavra-chave call.

Mensagens de erro

Mensagens de erro ODBC são estruturadas em campos para prover informação detalhada. Por exemplo:

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

Note 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 com |) tanto quanto o limite de comprimento permitir.