# - \#15 ODBC мониторинг

#### - Обзор

ODBC мониторинг соответствует типу элемента данных *Монитор баз данных*
в веб-интерфейсе Zabbix.

ODBC - язык программирования на C, промежуточная прослойка API для
доступа к системам управления баз данных (DBMS). Концепт ODBC был
разработан Microsoft и в дальнейшем портирован на другие платформы.

Zabbix может выполнять запросы к любой базе данных, которая
поддерживается ODBC. Чтобы это сделать, Zabbix не подключается напрямую
к базам данных, он использует интерфейс ODBC и драйвера установленные в
ODBC. Эта функция позволяет мониторить различные базы данных с
различными целями с большей эффективностью - например, проверка
специфичных запросов к базе данных, статистика использования и прочее.
Zabbix поддерживает unixODBC, которая наиболее часто используются в
реализациях ODBC API с открытым исходным кодом.

#### - Установка unixODBC

Предлагаемый вариант установки unixODBC состоит из использования
репозитариев пакетов по умолчанию в Linux операционной системы. В
наиболее популярные дистрибутивы Linux unixODBC включен в репозитарии
пакетов по умолчанию. Если он недоступен, вы можете обратиться к
домашней странице UnixODBC: <http://www.unixodbc.org/download.html>.

Установка unixODBC на системы на базе RedHat/Fedora с использованием
менеджера пакетов *yum*:

    shell> yum -y install unixODBC unixODBC-devel

Установка unixODBC на системы на базе SUSE с использованием менеджера
пакетов *zypper*:

    # zypper in unixODBC-devel

::: noteclassic
Пакет unixODBC-devel требуется для компиляции Zabbix с
поддержкой unixODBC.
:::

#### - Установка драйверов unixODBC

Драйвер unixODBC базы данных должен быть установлен для базы данных,
которая будет наблюдаться. unixODBC имеет список поддерживаемых баз
данных и драйверов: <http://www.unixodbc.org/drivers.html>. В некоторых
дистрибутивах Linux драйвера баз данных включены в репозитарии пакетов.
Драйвера MySQL базы данных на системы на базе RedHat/Fedora можно
установить с помощью менеджера пакетов *yum*:

    shell> yum install mysql-connector-odbc

Установка MySQL драйвера на системах на базе SUSE с использованием
менеджера пакетов *zypper*:

    # zypper in MyODBC-unicODBC

#### - Настройка unixODBC

Настройка ODBC выполняется редактированием файлов **odbcinst.ini** и
**odbc.ini**. Для проверки размещения этих файлов введите:

    shell> odbcinst -j

**odbcinst.ini** используется для перечисления установленных драйверов
баз данных ODBC:

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

Подробная информация:

|Атрибут|Описание|
|--------------|----------------|
|*mysql*|Имя драйвера базы данных.|
|*Description*|Описание драйвера базы данных.|
|*Driver*|Размещение библиотеки драйвера базы данных.|

**odbc.ini** используется для определения источников данных:

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

Подробная информация:

|Атрибут|Описание|
|--------------|----------------|
|*test*|Имя источника данных (DSN).|
|*Description*|Описание источника данных.|
|*Driver*|Имя драйвера базы данных - как указано в odbcinst.ini|
|*Server*|IP/DNS сервера базы данных.|
|*User*|Пользователь базы данных для подключения.|
|*Password*|Пароль к базе данных.|
|*Port*|Порт подключения к базе данных.|
|*Database*|Имя базы данных.|

Для проверки работает ли соединение ODBC корректно, подключение к базе
данных необходимо протестировать. Для этого можно воспользоваться
утилитой **isql** (включена в пакет unixODBC):

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

#### - Компиляция Zabbix с поддержкой ODBC

Для включения поддержки ODBC, Zabbix должен быть скомпилирован со
следующим флагом:

      --with-unixodbc[=ARG]   use odbc driver against unixODBC package

::: noteclassic
Смотрите более подробную информацию о установке Zabbix из
[исходных кодов](/ru/manual/installation/install).
:::

#### - Настройка элемента данных в веб-интерфейсе Zabbix

Настройка [элемента данных](/ru/manual/config/items/item#обзор) для
мониторинга базы данных:

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

Специально для элементов данных мониторинга баз данных вы должны
указать:

|   |   |
|---|---|
|*Тип*|Выберите здесь *Монитор баз данных*.|
|*Ключ*|Введите **db.odbc.select**\[уникальное\_описание,имя\_источника\_данных\]<br>Уникальное описание будет служить идентификатором элемента данных в триггерах и тому подобном.<br>Имя источника данных (DSN) должно быть указано как в настройках odbc.ini.|
|*Имя пользователя*|Введите имя пользователя для доступа к базе данных (опционально, если пользователь указан в odbc.ini)|
|*Пароль*|Введите пароль пользователя для доступа к базе данных (опционально, если пароль указан в odbc.ini)|
|*SQL запрос*|Введите необходимый SQL запрос|
|*Тип информации*|Очень важно знать какой тип информации будет возвращаться указанным запросом, то есть выберите корректный тип информации здесь. С некорректным *типом информации* элемент данных станет неподдерживаемым.|

#### - Важные замечания

-   Zabbix не ограничивает время выполнения запроса. Пользователь вправе
    выбирать запросы, которые могут быть выполнены в разумное время.
-   Значение параметра
    [Timeout](/ru/manual/appendix/config/zabbix_server) с Zabbix сервера
    используется как время ожидания подключения ODBC (обратите внимание,
    в зависимости от драйвера ODBC время ожидания подключения может быть
    проигнорировано).
-   Запрос должен возвращать только одно значение.
-   Если запрос возвращает более чем одну колонку, будет прочитана
    только первая колонка.
-   Если запрос возвращает более чем одну строку, будет прочитана только
    первая строка.
-   Команда SQL должна начинаться с `select`.
-   Команда SQL не должна включать в себя переводы строк.
-   Смотрите также [известные
    проблемы](/ru/manual/installation/known_issues#odbc_проверки) по
    ODBC проверкам

#### - Сообщения об ошибках

Начиная с версии Zabbix 2.0.8 сообщения об ошибках ODBC скомпонованы в
поля для предоствления подробной информации. Например:

    Cannot execute ODBC query:[SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]|
    -------------------------  ---------   -----  |  ------------------------------------------------------------------- |
              |                    |         |    `- Родной код ошибки      `- сообщение об ошибке                       `- Разделитель записей
              |                    |         `-SQLState
              `- Zabbix сообщение  `- ODBC возвращаемый код

Обратите внимание что длина сообщения об ошибке ограничена 128 байтами,
поэтому сообщение может быть укорочено. Если есть более одной ODBC
диагностической записи, Zabbix пытается их скомпоновать на сколько
позволяет максимальная длина сообщения.
