# - \#15 Monitoração de Banco de dados (ODBC)

#### - Visão geral

O ODBC é uma API 'middle-ware' escrita em C para o acesso a sistemas
gerenciadores de bancos de dados (DBMS). O conceito do ODBC foi
desenvolvido pela Microsoft e portado para outras plataformas.

O Zabbix pode consultar qualquer banco de dados, bastando para isso que
exista o suporte através do driver ODBC. É importante ressaltar que o
Zabbix não acessa diretamente os SGDBs, todo o acesso é feito através
das interfaces e drivers OBDC. Esta funcionalidade permite uma
monitoração mais eficiente de bancos de dados para diversos propósitos -
por exemplo, verificar filas no banco de dados, estatísticas, quantidade
de registros, etc. O Zabbix suporta o unixODBC, que uma das
implementações mais comuns da API OBDC.

#### - Instalando o unixODBC

A forma que sugerimos a instalação do unixODBC é através do gerenciador
de pacotes do Linux. A maioria das distribuições Linux tem este pacote
em seu repositório padrão. Se ele não estiver disponível em sua
distribuição, poderá ser obtido na página do unixODBC:
<http://www.unixodbc.org/download.html>.

Para instalar o unixODBC com o *yum* (ambientes baseados em
RedHat/Centos/Fedora):

    shell> yum -y install unixODBC unixODBC-devel

Para instalar o unixODBC com o *zypper* (SUSE):

    # zypper in unixODBC-devel

::: noteclassic
O pacote 'unixODBC-devel' é necessário para compilar o
Zabbix com o suporte ao unixODBC.
:::

#### - Instalando os drivers unixODBC

Para cada banco de dados, além do unixOBDC, deverá ser instalado o
driver apropriado. O unixODBC possui uma lista de bancos de dados e
drivers suportados: <http://www.unixodbc.org/drivers.html>. Em algumas
distribuições os drivers OBDC são instalados em conjunto com o unixOBDC.
O comando a seguir instala o driver MySQL através do *yum*:

    shell> yum install mysql-connector-odbc

A mesma instalação pode ser feita em um ambiente SUSE com o comando a
seguir:

    shell> zypper install MyODBC-unixODBC

#### - Configurando o unixODBC

A configuração do ODBC é feita através dos arquivos **odbcinst.ini** e
**odbc.ini**. Para verificar a localização dos mesmos pode ser utilizado
o comando a seguir:

    shell> odbcinst -j

O arquivo **odbcinst.ini** é utilizado para listar os drivers OBDC
instalados:

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

Detalhes dos parâmetros:

|Atributo|Descrição|
|--------|-----------|
|*mysql*|Nome do driver de BD.|
|*Description*|Descrição do driver de BD.|
|*Driver*|Localização do driver de BD.|

O arquivo **odbc.ini** é utilizado para definir as 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 OBDC, conforme definido no `odbcinst.ini`|
|*Server*|Endereço/DNS do servidor de BD.|
|*User*|Usuário para conexão.|
|*Password*|Senha de conexão.|
|*Port*|Porta do BD.|
|*Database*|Nome da base de dados.|

Para verificar se a conexão OBDC está funcional, é possível um teste via
linha de comando verificando se é possível se conectar ao banco de
dados. Isso pode ser feito através do utilitário **isql** (incluso no
pacote unixOBDC):

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

#### - Compilando o Zabbix com o suporte ao OBDC

Para habilitar o suporte ao OBDC, o Zabbix precisa ser compilado com o
parâmetro abaixo:

      --with-unixodbc[=ARG]   utilizar o drive OBDC ao invés do pacote unixOBDC

::: noteclassic
Leia mais sobre a instalação do Zabbix em [instalação a
partir dos
fontes](/pt/manual/installation/install#from_the_sources).
:::

#### - Configuração do item no frontend do Zabbix

Configure um monitoramento de banco de dados
[item](/pt/manual/config/items/item#overview):

![](../../../../../assets/en/manual/config/items/itemtypes/odbc.png)

Para itens de monitoração de banco de dados, os dados abaixo deve ser
fornecidos:

|   |   |
|---|---|
|*Tipo*|Selecione *Monitoração de banco de dados*.|
|*Chave*|Informe **db.odbc.select**\[identificação única, ao nível de nome da fonte de dados\]<br>A identificação única serve para identificar o item em triggers e outros locais.<br>A fonte de dados (DSN) precisa ser definida no arquivo odbc.ini.|
|*Nome de usuário*|Informe o nome de usuário para acesso ao BD (opcional se o usuário já estiver definido em odbc.ini)|
|*Senha*|Informe a senha para o banco de dados (opcional se a senha já for definida em obdc.ini)|
|*Consulta SQL*|Informe a consulta|
|*Tipo da informação*|É muito importante saber qual tipo de informação será retornada pela consulta, pois um tipo incorreto de dados nesta configuração poderá fazer com que o item passe para o estado 'não suportado'.|

#### - Observações Importantes

-   A consulta não pode demorar mais do que o tempo definido no
    parâmetro [Timeout](/pt/manual/appendix/config/zabbix_server) do
    arquivo de configuração do Zabbix Server. A partir do Zabbix 2.0.8 o
    parâmetro [Timeout](/pt/manual/appendix/config/zabbix_server) também
    pode ser utilizado para limitar o tempo para a autenticação OBDC
    (observe que dependendo do driver OBDC o 'timeout' de autenticação
    poderá ser ignorado).
-   A consulta precisa retornar somente um valor.
    -   Se a consulta retornar mais de uma coluna, apenas a primeira
        será lida.
    -   Se a consulta retornar masi de uma linha, apenas a primeira
        linha será lida.
-   O comando SQL deverá iniciar com `select`.
-   O comando SQL não pode conter quebra de linha.

Consulte [problemas
conhecidos](/pt/manual/installation/known_issues#odbc_checks) para
verificações ODBC.

#### - Mensagens de erro

A partir do Zabbix 2.0.8 as mensagens de erro ODBC foram estruturadas em
campso para prover maior detalhamento de informações. 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.                      `- Separador de registros
                |                  |         `-SQLState
                `- Mensagem Zabbix  `- Código de retorno ODBC

Observe que o tamanho da mensagem de erro é limitado a 2048 bytes, se a
mensagem for maior ela será truncada. Se existir mais de um diagnóstico
OBDC o Zabbix tentará concatenar os valores até o tamanho máximo
permitido.
