ODBC мониторинг соответствует типу элемента данных Монитор баз данных в веб-интерфейсе Zabbix.
ODBC - язык программирования на C, промежуточная прослойка API для доступа к системам управления баз данных (DBMS). Концепт ODBC был разработан Microsoft и в дальнейшем портирован на другие платформы.
Zabbix может выполнять запросы к любой базе данных, которая поддерживается ODBC. Чтобы это сделать, Zabbix не подключается напрямую к базам данных, он использует интерфейс ODBC и драйвера установленные в ODBC. Эта функция позволяет мониторить различные базы данных с различными целями с большей эффективностью - например, проверка специфичных запросов к базе данных, статистика использования и прочее. Zabbix поддерживает unixODBC, которая наиболее часто используются в реализациях ODBC API с открытым исходным кодом.
Предлагаемый вариант установки 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 из исходных кодов.
Настройка элемента данных для мониторинга базы данных.
Все обязательные поля ввода отмечены красной звёздочкой.
Специально для элементов данных мониторинга баз данных вы должны указать:
Тип | Выберите здесь Монитор баз данных. |
Key | Введите одно из двух поддерживаемых ключей элементов данных: db.odbc.select[уникальное_описание,имя_источника_данных] - этот элемент данных предназначен для получения одного значения, то есть результата SQL запроса с первой колонки первой строки. Если запрос возвращает более одной колонки, будет прочитана только первая колонка. Если запрос возвращает более одной строки, будет прочитана только первая строка. db.odbc.get[уникальное_описание,имя_источника_данных] - этот элемент данных совместим с получением нескольких строк / колонок в JSON формате. Таким образом его можно использовать основным элементом данных, который собирает все данные за один системный вызов, после чего в зависимых элементах данных можно использовать JSONPath предобработку, чтобы извлечь отдельные значения. Для получения более подробной информации смотрите пример возвращаемого формата, который используется в низкоуровневом обнаружении. Этот элемент данных поддерживается начиная с Zabbix 4.4. Уникальное описание будет служить идентификатором элемента данных в триггерах и тому подобном. Имя источника данных (DSN) должно быть указано как в настройках odbc.ini. |
Имя пользователя | Введите имя пользователя для доступа к базе данных (опционально, если пользователь указан в odbc.ini) |
Пароль | Введите пароль пользователя для доступа к базе данных (опционально, если пароль указан в odbc.ini) |
SQL запрос | Введите необходимый SQL запрос. Обратите внимание, что запрос db.odbc.select[] элемента данных должен всегда возвращать только одно значение. |
Тип информации | Очень важно знать какой тип информации будет возвращаться указанным запросом, то есть выберите корректный тип информации здесь. С некорректным типом информации элемент данных станет неподдерживаемым. |
select ...
. Синтаксис запроса будет зависеть от RDBMS, которая обрабатывает эти запросы. Синтаксис запроса к хранимым процедурам должен начинаться с ключевого слова 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 пытается их скомпоновать (разделяя символом |
) на сколько позволяет максимальная длина сообщения.