Лет 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. Был написан небольшой скрипт, извлекающий данные из заранее подготовленного представления МОНИТОРИНГ, которое в свою очередь собирает данные из таблиц мониторинга СУБД.
Скрипт isql.cmd, запрашивающий данные из СУБД, выглядит так: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)
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 Теперь эти данные нужно перенести в Zabbix. Передавать будем с помощью файла конфигурации агента, а именно параметра UserParameter, он выглядит примерно так: UserParameter=FirebirdData,C:\zabbix\isql.cmd
Когда агент запущен, сервер Zabbix сможет получать и обрабатывать эти данные.
Вам просто нужно ему немного помочь в этом, а именно определить новый шаблон, разметить необходимые данные с помощью регулярных выражений, настроить триггеры и графики.
Создаем новый шаблон и не забываем привязать этот шаблон к узлу, на котором находится СУБД:
Создать шаблон И добавляем элементы данных, которых может быть много, основные я представил на рисунке ниже, почти все они созданы по одному и тому же образу:
Список готовых элементов данных Основным элементом данных, от которого зависят все остальные элементы, является FirebirdData, это текст, который передает агент Zabbix:
?Элемент данных, содержащий таблицу, подлежащую анализу Все остальные элементы данных являются зависимыми данными, которые собирают информацию с помощью регулярных выражений, например количество добавленных записей:
?Элемент данных
Предварительная обработка элементов данных Нет необходимости перечислять все элементы данных; все они очень похожи и отличаются только предварительной обработкой.
Некоторые параметры являются целыми, некоторые — дробными или текстовыми.
Теперь вы можете создавать триггеры на основе имеющихся данных.
Первый из триггеров определит, доступны ли данные базы данных:
Триггер nodata Определите состояние базы данных:
Триггерное отключение Ну и разница между текущей транзакцией и OIT, которая важна для версионных баз данных:
Триггер ОИТ Можно «вытянуть» больше данных из базы, собрать информацию с помощью индексов или таблиц, но мне это не нужно.
Следующий этап графики, и для меня это самый простой этап, поэтому я не буду его описывать, а просто выведу картинку с возможными представлениями данных мониторинга.
Графики мониторинга Здесь все довольно просто, первый график показывает количество операций чтения из базы, второй операций удаления, обновления и создания, а последний показывает задержку OIT. Я думаю, что каждый, кто раньше хоть одним глазком видел FirebirdSQL и Zabbix, очень быстро и без проблем настроит мониторинг.
Спасибо всем.
Теги: #*nix #itинфраструктура #sql #zabbix #zabbix мониторинг #cmd #firebirdsql #isql #firebird #Firebird/Interbase
-
Производительность Спутникового Интернета
19 Oct, 24 -
Cisco Cli В Bash
19 Oct, 24 -
Порошковая Игрушка
19 Oct, 24 -
Рунет В Картинках. Новый Выпуск
19 Oct, 24 -
Военный Робот, Управляемый Через Wi-Fi
19 Oct, 24