Как стать автором
Обновить

Мониторинг СУБД Firebird с помощью Zabbix

Время на прочтение4 мин
Количество просмотров5.6K

Примерно 20 лет назад была установлена СУБД Firebird, если не ошибаюсь, версии 1.0.3, на сегодняшний день база все еще жива и нужна, размер ее перевалил за 30ГБ, что по сегодняшним меркам очень мало, но и основной рост базы пришелся на начало века.

С повсеместным внедрением средств мониторинга захотелось снимать минимальную статистику и определять работоспособность СУБД и самой БД. Для мониторинга использую Zabbix установленный на Ubuntu 20.04 LTS, а сама СУБД находится на виртуальной машине с Windows 2008 Server. Версии на которых был использован метод мониторинга описанный ниже для СУБД Firebird 2.5.9, версия Zabbix 6.0. Но думаю что и с другими версиями проблем быть не должно.

Даная статья не ставит целью описать процесс установки СУБД Firebird, к слову он очень прост, или средства мониторинга Zabbix, эта статья покажет как за минимальное время можно "завести" СУБД Firebird в Zabbix, получать необходимые данные для мониторинга и реакции на сбои.

Первое что необходимо сделать это вспомнить о isql.exe который фактически является CLI для FB. Был написан небольшой скрипт которые достаёт данные из заранее подготовленной вьюшки MONITORING, которая в свою очередь собирает данные из таблиц мониторинга СУБД.

CREATE OR ALTER VIEW MONITORING(
    "Database_Name", "Page_Size", "ODS_Version", "Oldest_Tr",
    "Oldest_Active_Tr", "Oldest_Snapshot_Tr",
    "Next_Tr", "Page_Buffers", "SQL_Dialect",
    "Shutdown_Mode", "Sweep_Interval",
    "Read_Only", "Forced_Writes", "Reserve_Space",
    "Created_At", "Pages",
    "Size_MB", "Backup_State", "Nonindexed_Reads",
    "Indexed_Reads", "Records_Inserted",
    "Records_Updated", "Records_Deleted",
    "Records_Backed_Out", "Records_Purged",
    "Records_Expunged", "Page_Reads", "Page_Writes",
    "Page_Fetches", "Page_Marks", "Connections",
    "Stat group")
AS
SELECT
       db.mon$database_name,
       db.mon$page_size,
       db.mon$ods_major || '.' || db.mon$ods_minor,
       db.mon$oldest_transaction, db.mon$oldest_active,
       db.mon$oldest_snapshot, db.mon$next_transaction,
       db.mon$page_buffers, db.mon$sql_dialect,
       db.mon$shutdown_mode, db.mon$sweep_interval,
       db.mon$read_only, db.mon$forced_writes,
       db.mon$reserve_space, db.mon$creation_date,
       db.mon$pages,
       cast((db.mon$pages * db.mon$page_size / 1024.00 / 1024.00) as numeric(18,2)),
       db.mon$backup_state, r.mon$record_seq_reads,
       r.mon$record_idx_reads, r.mon$record_inserts,
       r.mon$record_updates, r.mon$record_deletes,
       r.mon$record_backouts, r.mon$record_purges,
       r.mon$record_expunges, io.mon$page_reads,
       io.mon$page_writes, io.mon$page_fetches,
       io.mon$page_marks,
       (select count(*) from mon$attachments),
       r.mon$stat_group
FROM mon$database db
left join mon$record_stats r on (db.mon$stat_id = r.mon$stat_id)
left join mon$io_stats io on (db.mon$stat_id = io.mon$stat_id)

Скрипт isql.cmd запрашивающий данные от СУБД выглядит так:

C:\Program Files\Firebird\Firebird_2_5\bin\isql.exe" -q -i "C:\zabbix\isql.sql

А сам SQL запрос isql.sql которрый "скармливается" isql.exe так:

CONNECT 'localhost:employee' user 'SYSDBA' password 'masterkey';
SET list on;
SELECT * FROM MONITORING;
EXIT;

Данный скрипт примечателен только выражением "SET list on", которое в дальнейшем упрощает разбор данных регулярными выражениями, т.к. предоставляет данные списком, а не таблицей.

В итоге после отработки скрипта получаем данные которые предоставила СУБД, а точнее строку приготовленной ранее вьюшки:

Результат работы isql.exe
Результат работы isql.exe

Теперь эти данные нужно передать в Zabbix. Передавать будем используя конфигурационный файл агента, а именно параметр UserParameter, выглядит это примерно так:

UserParameter=FirebirdData,C:\zabbix\isql.cmd

При запущенном агенте, сервер Zabbix сможет получать и обрабатывать эти данные. Нужно только немного ему в этом помочь, а именно определить новый шаблон, разметить с помощью регулярных выражений необходимые данные, настроить триггеры и графики.

Создаем новый шаблон и не забываем привязать этот шаблон к узлу на котором расположена СУБД:

Создание шаблона
Создание шаблона

И добавляем элементы данных, которых может быть множество, основные я представил на рисунке ниже, почти все они создаются по одному образу:

Список готовых элементов данных
Список готовых элементов данных

Основной элемент данных, от которого зависят все остальные элементы это FirebirdData, это текст который передает агент Zabbix:

Элемент данных содержащий таблицу для разбора
Элемент данных содержащий таблицу для разбора

Все остальные элементы данных это зависимые данные, которые с помощью регулярных выражений собирают информацию, например количество добавленных записей:

Элемент данных
Элемент данных
Предобработка элемента данных
Предобработка элемента данных

Перечислять все элементы данных нет необходимости они все очень похожи и отличаются только предобработкой. Какие-то параметры целочисленные, какие-то дробные или текстовые.

Теперь на основе имеющихся данных можно создать триггеры. Первый из триггеров будет определять, доступны ли данные о БД:

Триггер nodata
Триггер nodata

Определять в каком состоянии БД:

Триггер shutdown
Триггер shutdown

Ну и разницу между текущей транзакцией и OIT, что для версионных БД важно:

Триггер OIT
Триггер OIT

Можно "вытащить" из БД больше данных, собрать информацию по индексам или таблицам, но у меня в этом нет необходимости.

Следующий этап графики и по мне это самый простой этап, поэтому описывать его не стану, а просто выложу на обозрение картинку с возможными представлениями данных мониторинга.

Графики мониторинга
Графики мониторинга

Здесь все достаточно просто, первый график показывает количество чтений из БД, второй операции удаления, обновления и создания, а последний показывает отставание OIT.

Думаю, что все кто ранее хоть одним глазом видел FirebirdSQL и Zabbix настроит мониторинг очень быстро и без проблем. Всем спасибо.

Теги:
Хабы:
Всего голосов 5: ↑5 и ↓0+5
Комментарии11

Публикации

Истории

Работа

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург