ODBC мониторинг соответствует типу элемента данных Монитор баз данных в веб-интерфейсе Zabbix.
ODBC - это API на языке программирования Cи к промежуточной прослойке для доступа к системам управления базами данных (DBMS). Концепт ODBC был разработан Microsoft и в дальнейшем портирован на другие платформы.
Zabbix может выполнять запросы к любой базе данных, которая поддерживается ODBC. Чтобы это сделать, Zabbix не подключается напрямую к базам данных, он использует интерфейс ODBC и драйверы, установленные в ODBC. Эта функция позволяет с большей эффективностью мониторить различные базы данных с разнообразными целями - например, проверка специфичных запросов к базе данных, статистика использования и прочее. Zabbix поддерживает unixODBC, которая является одной из наиболее часто используемых реализаций API ODBC с открытым исходным кодом.
Смотрите также известные проблемы, связанные с ODBC проверками.
Предлагаемый вариант установки unixODBC состоит из использования репозиториев пакетов по умолчанию в операционной системе Linux. В наиболее популярные дистрибутивы Linux unixODBC добавлен в репозитории пакетов по умолчанию. Если он недоступен, вы можете обратиться к домашней странице UnixODBC: http://www.unixodbc.org/download.html.
Установка unixODBC на системы на базе RedHat/Fedora с использованием менеджера пакетов yum:
Установка unixODBC на системы на базе SUSE с использованием менеджера пакетов zypper:
Пакет unixODBC-devel требуется для компиляции Zabbix с поддержкой unixODBC.
Драйвер unixODBC базы данных должен быть установлен для базы данных, которая будет наблюдаться. unixODBC имеет список поддерживаемых баз данных и драйверов: http://www.unixodbc.org/drivers.html. В некоторых дистрибутивах Linux драйвера баз данных включены в репозитории пакетов. Драйвера базы данных MySQL на системы на базе RedHat/Fedora можно установить с помощью менеджера пакетов yum:
Установка MySQL драйвера на системы на базе SUSE с использованием менеджера пакетов zypper:
Настройка ODBC выполняется редактированием файлов odbcinst.ini и odbc.ini. Для проверки размещения этих файлов введите:
odbcinst.ini используется для перечисления установленных драйверов баз данных ODBC:
Подробная информация:
| Атрибут | Описание |
|---|---|
| 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>Для включения поддержки ODBC, Zabbix должен быть скомпилирован со следующим флагом:
Смотрите более подробную информацию о установке Zabbix из исходных кодов.
Настройка элемента данных для мониторинга базы данных.

Все обязательные поля ввода отмечены красной звёздочкой.
Специально для элементов данных мониторинга баз данных вы должны указать:
| Тип | Выберите здесь Монитор баз данных. |
| Ключ | Введите один из двух поддерживаемых ключей элементов данных: db.odbc.select[<уникальное короткое описание>,<dsn>,<строка подключения>] - этот элемент данных предназначен для получения одного значения, то есть первой колонки и первой строки из результата SQL запроса. Если запрос возвращает более одной колонки, будет прочитана только первая колонка. Если запрос возвращает более одной строки, будет прочитана только первая строка. db.odbc.get[<уникальное короткое описание>,<dsn>,<строка подключения>] - этот элемент данных способен возвращать несколько строк / колонок в формате JSON. Таким образом, его можно использовать основным элементом данных, который собирает все данные за один системный вызов, а предварительную обработку JSONPath можно использовать в зависимых элементах данных для извлечения отдельных значений. Для получения более подробных сведений смотрите пример возвращаемого формата, использованного в низкоуровневом обнаружении. Этот элемент данных поддерживается с Zabbix 4.4. Уникальное описание будет служить для идентификации элемента данных в триггерах и т.п. Хотя dsn и строка подключения опциональные параметры, по крайней мере один из них должен присутствовать. Если заданы оба параметра - и имя источника данных (DSN), и строка подключения, - то DSN будет игнорироваться.Имя источника данных, если используется, необходимо указать в точности как указано в odbc.ini. Строка подключения может содержать специфичные для драйверов аргументы. Пример (подключение с использованием MySQL ODBC driver 5): => db.odbc.get[MySQL example,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"] |
| Имя пользователя | Введите имя пользователя для доступа к базе данных Этот параметр не обязателен, если пользователь указан в odbc.ini. Если используется строка подключения и поле Имя пользователя не пустое, тогда имя пользователя добавляется к строке подключения как UID=<пользователь> |
| Пароль | Введите пароль пользователя для доступа к базе данных Этот параметр не обязателен, если пароль указан в odbc.ini. Если используется строка подключения и поле Пароль не пустое, тогда пароль добавляется к строке подключения как PWD=<пароль>.Если пароль содержит точку с запятой, его необходимо заключить в фигурные скобки, например: Password: {P?;)*word} · (если фактически пароль P?;)*word) Пароль будет добавлен к строке подключения после имени пользователя как: UID=<username>;PWD={P?;)*word}Чтобы протестировать полученную строку, выполните: isql -v -k 'Driver=libmaodbc.so;Database=zabbix;UID=zabbix;PWD={P?;)*word}' |
| SQL запрос | Введите необходимый SQL запрос. Обратите внимание, что для элемента данных db.odbc.select[] запрос должен возвращать только одно значение. |
| Тип информации | Очень важно знать какой тип информации будет возвращаться заданным запросом, поэтому выберите здесь корректный тип информации. С некорректным типом информации элемент данных станет неподдерживаемым. |
select .... Синтаксис запроса зависит от РСУБД, которая будет его обрабатывать. Синтаксис запроса к хранимой процедуре должен начинаться с ключевого слова call.Сообщения об ошибках ODBC структурированы по полям для предоставления подробной информации. Например:
Cannot execute ODBC query: [SQL_ERROR]:[42601][7][ERROR: syntax error at or near ";"; Error while executing the query]
└───────────┬───────────┘ └────┬────┘ └──┬──┘└┬┘└─────────────────────────────┬─────────────────────────────────────┘
│ │ │ └─ Родной код ошибки └─ Родное сообщение об ошибке
│ │ └─ SQLState
└─ Zabbix сообщение └─ ODBC возвращаемый кодОбратите внимание, что длина сообщения об ошибке ограничена 2048 байтами, поэтому сообщение может быть усечено. Если имеется более одной ODBC диагностической записи, Zabbix пытается их скомпоновать (разделяя символом |), насколько позволяет ограничение по длине.