[comment]: # translation:outdated

[comment]: # ({68c88a1c-68c88a1c})
# 14 Monitoramento ODBC

[comment]: # ({/68c88a1c-68c88a1c})

[comment]: # ({b5170fd3-b5170fd3})

#### 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.

::: noteimportant
Veja também os problemas conhecidos [known
issues](/manual/installation/known_issues#odbc_checks) para verificações ODBC.
:::

[comment]: # ({/b5170fd3-b5170fd3})

[comment]: # ({71f77d0a-bf6fd8ba})
#### 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

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

[comment]: # ({/71f77d0a-bf6fd8ba})

[comment]: # ({04878c45-eea09ed7})
#### 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

[comment]: # ({/04878c45-eea09ed7})

[comment]: # ({9691d02f-b15e771b})
#### 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                                  |
    |                                       |
    +---------------------------------------+

[comment]: # ({/9691d02f-b15e771b})

[comment]: # ({351bc905-9f87c9b6})
#### 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.

::: noteclassic
Para saber mais sobre a instalação do Zabbix, consulte [source
code](/manual/installation/install#from_the_sources).
:::

[comment]: # ({/351bc905-9f87c9b6})

[comment]: # ({7d83658b-ca784f43})

#### Configuração de itens no frontend do Zabbix

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

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

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:<br>**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.<br>**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](/manual/discovery/low_level_discovery/examples/sql_queries#using-db.odbc.get) do formato retornado, usado em descoberta de baixo nível. Este item é suportado desde o Zabbix 4.4.<br>A descrição única servirá para identificar o item em triggers, etc.<br>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.<br>O nome da fonte de dados, se usado, deve ser configurado conforme especificado no odbc.ini.<br>A string de conexão pode conter argumentos específicos do driver.<br><br>Exemplo (conexão para o driver MySQL ODBC 5):<br>=> 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<br>Este parâmetro é opcional se o usuário estiver especificado no odbc.ini.<br>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<br>Este parâmetro é opcional se a senha estiver especificada no odbc.ini.<br>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>`.<br>Desde o Zabbix 6.0.34, caracteres especiais são suportados neste campo.<br><br>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:<br>`isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD={P?;)*word}'`|
|*Consulta SQL*|Insira a consulta SQL.<br>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.|

[comment]: # ({/7d83658b-ca784f43})

[comment]: # ({06f9d2eb-06f9d2eb})
#### 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](/manual/appendix/config/zabbix_server) ou, para verificações realizadas por proxy, no arquivo de configuração do Zabbix [proxy](/manual/appendix/config/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](/manual/appendix/config/zabbix_server) [](/manual/appendix/config/zabbix_server)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`.

[comment]: # ({/06f9d2eb-06f9d2eb})

[comment]: # ({b5bff9e7-718edfdc})

#### 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.

[comment]: # ({/b5bff9e7-718edfdc})
