Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

14 ODBC мониторинг

Обзор

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

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

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

Смотрите также известные проблемы связанные с ODBC проверками.

Установка 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

Пакет 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-unixODBC

Настройка 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

Смотрите более подробную информацию о установке 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 запрос.
Note that with the db.odbc.select[] item the query must return one value only.
Тип информации Очень важно знать какой тип информации будет возвращаться заданным запросом, поэтому выберите здесь корректный тип информации. С некорректным типом информации элемент данных станет неподдерживаемым.

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

  • Элементы данных монитора баз данных могут стать неподдерживаемыми, если процессы odbc поллер не запускаются в конфигурации сервера и прокси. Чтобы включить ODBC поллеры, задайте StartODBCPollers параметр в файле конфигурации Zabbix сервера или, если проверки выполняются на стороне прокси, в файле конфигурации Zabbix прокси.
  • Zabbix не ограничивает время выполнения запроса. Пользователь сам выбирает запросы, которые выполняются за разумное время.
  • Значение параметра Timeout с Zabbix сервера используется как время ожидания выполнения входа в ODBC (обратите внимание, в зависимости от драйвера ODBC время ожидания выполнения входа может быть проигнорировано).
  • SQL команда должна вернуть набор данных, как и любой запрос с 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 пытается их скомпоновать (разделяя символом |) на сколько позволяет максимальная длина сообщения.