Мой опыт использования платформы Tantor
Предыстория
И снова привет, хабр!
Вы когда-нибудь использовали СУБД PostgreSQL? Лично я привык к консольной утилите psql. Да, я слышал про pgadmin, navicat ну или DBeaver в конце концов, но вот руки до их использования у меня никак не доходили… до этого момента.
Иногда требования, предъявляемые решаемой задачей, могут выйти за пределы любимой командной строки, да и любому разработчику полезно выходить из зоны комфорта изучать новые технологии.
В одной такой задаче мне предстояло работать с несколькими базами данных одновременно: выполнять разные запросы к ним и смотреть аналитику, параллельно фильтровать несколько таблиц рядом. При этом мне бы хотелось видеть, как планировщик будет строить план этих запросов (на всякий случай).
Поверьте друзья, терминал с psql — это, конечно, хорошо, но делать кучу операций иногда неудобно даже с терминальным мультиплексором, например, tmux.
Учитывая все эти сложности, я занялся поиском подходящего инструмента. Так мне подвернулась возможность изучить платформу Tantor, и в этой статье я поведаю о своем опыте и расскажу, почему интерфейсы — это удобно.
Содержание
Как установить?
Рабочие пространства
Работа с экземплярами
Конфигурации
Обслуживание
Инспектор баз данных
Профайлер запросов
Активности
Репликация
Графики
Конфигурация мониторинга
Анализ логов
Работа с кластерами и агентами
Горизонты развития
Вместо заключения
Как установить?
Требования перечислены вот тут. Следует учитывать: Тантор — платформа, которая предоставляет высокие показатели производительности, поэтому в качестве минимума заявлено хотя бы 4 ЦПУ и 8 ГБ оперативной памяти, что, я считаю, для современного мира ИТ-технологий — норм.
Переходим к программной части. Ось по стандарту — Linux, я буду использовать CentOS 7, как это написано в требованиях. Здесь же docker-compose, а для интерфейса нам понадобятся мой любимый google chrome.
В разделе «Администратору» → «Подготовительные действия» перечислены все команды, необходимые для установки платформы. Тут хочу обратить внимание на создание пользователя.
Рис. 1. Меню активации пользователей
—А можно ли отключить пользователя на определенное время?
—Да, можно, процедура называется «Деактивация» и «Активация пользователя» соответственно.
Пользователя создали. На этом моменте администратор нам больше не понадобится, хотя у него еще очень много функций, таких как лицензирование, управление рабочими пространствами и группами пользователей, передача прав владельца и даже интеграция со службами сообщений.
Возможности
А что вообще эта платформа умеет? И вот тут начинается самое интересное…
Рабочие пространства
Теперь открываем интерфейс и логинимся. Кстати, хочу отметить: то, что мне больше всего нравится в интерфейсах, — это их интуитивность. И вот тут как раз такой пример:
Рисунок 2. Рабочие пространства
Что мы тут видим? Количество кнопок не избыточно, они имеют характерные названия, а не сомнительные наброски — так что нам не приходится догадываться — какая кнопка за что отвечает.
Давайте создадим рабочее пространство, перейдем в него и посмотрим что тут можно сделать. Видно сколько инстансов и предупреждений в каждом рабочем пространстве в режиме реального времени, а также можно переименовать рабочее пространство или удалить его при необходимости.
Рисунок 3. Инстансы
И еще одна характерная черта — это цветовые индикаторы рабочих пространств.
Таблица 1. Цветовые индикаторы инстансов
Предлагаю посмотреть что из себя представляет рабочее пространство, поэтому давайте зайдем внутрь!
Работа с экземплярами
В уже привычном мне меню расположены три вкладки для работы с экземплярами, кластерами и агентами. Рассмотрим каждую подробнее.
Экземпляр — это основная сущность рабочего пространства. Экземпляр представляет из себя сервер PostgreSQL. Для его добавления я нажимаю вот на эту кнопку:
Рисунок 4. Добавление нового инстанса постгрес
Затем выбираю тип из предложенных. Это может быть , PostgreSQL, СУБД Tantor или другой форк. Конфигурирую параметры агента и в несколько нетрудных шагов наш экземпляр подключен
У экземпляров тоже есть цветовые статусы, их можно перенести в другое рабочее пространство или удалить. Даже метку можно добавить.
Рисунок 5. Добавление метки (label) инстансу
Но давайте посмотрим, что внутри у экземпляра? Объемное количество инфографики в плитках. Например, среднее время запроса обозначено цифрой 1:
Рисунок 6. Инфографика инстанса
Каждый график можно увеличить и рассмотреть. Я когда в первый раз увидел количество разделов на панели слева — был шокирован разно образностью функционала касательно экземпляров. Но давайте вкратце рассмотрим основные из них.
Конфигурации
Рисунок 7. Конфигурации
Если по простому — это отображение главного конфиг-файла postgresql.conf и визуализация всех его «ключей». Здесь вы можете изменить все то, что можно редактировать в конфиге Postgres, то есть — вообще все. Просто делать это можно не меняя константы в конфиге, а за пару кликов в интерфейсе. А самое интересное, что данный модуль предлагает рекомендации для установки параметров конфигурации, которые основаны на метриках о реальной нагрузке.
Обслуживание
Далее следует раздел обслуживания. Он нужен для того, чтобы отслеживать и удалять раздувание (bloat) таблиц и индексов, а так же заморозить счетчик транзакций.
Рисунок 8. Обслуживание
Описать раздувание можно примерно так: таблицы в Postgres хранятся в виде «страниц» по 8 килобайт за штуку. Когда страница заполняется — создается новая, но если из ранее заполненной удалить несколько строк — то на их месте останутся «пустышки». При слишком быстрых обновлениях/удалениях autovacuum может не справляться с чисткой пустышек и они будут появляться почти также часто как и новые страницы. Итого имеем ооочень большую таблицу на множества страниц, но при этом многие их них частично пусты.
Такое же может происходить и с индексами. В этом разделе есть три параметра для каждой базы данных:
Исправление раздувания таблиц
Исправление раздувания индексов
Исправление переполнения счетчика транзакций
Инспектор баз данных
Следующий раздел — это инспектор баз данных и здесь представлена вся информация по базе данных и посмотрите как прекрасно она отображается:
Рисунок 9. Инспектор
Основная функция этого раздела — это конечно Health Check. То есть у вас есть возможность проверить работоспособность частей системы. Под частями я подразумеваю конечно же таблицы.
Профайлер запросов
И вот мы подошли к одному из самых интересных разделов этого меню, а именно — к профайлеру запросов. Как вы догадались — этот модуль предназначен для профилирования запроса, а работа его основана на сборе статистики из расширения pg_stat_statements, а также pg_store_plans и модуля анализа логов (Advanced analytics).
Все данные из этого раздела группируются особым образом чтобы исключить дублирование для идентичных запросов. Здесь вы можете увидеть разнообразный функционал, например статистику планировщика:
Рисунок 10. Профайлер запросов
Основной компонент этого раздела — это навигатор, который позволяет оценить сколько времени занял каждый узел. То есть оценить усреднённые показатели скорости доступа к диску при чтении/записи.
Рисунок 11. План запроса
Кто занимался профилированием запросов понимает о чём речь. Когда запрос становится большим и даже сокращенная форма плана занимает 2–3 экрана зачастую не удается понять какой «узел» съедает больше всего времени.
В такой ситуации может выручить круговая диаграмма. Хорошо что Тантор предоставляет такой функционал. Сразу видна примерная доля потребления ресурсов каждым узлом.
Рисунок 12. Круговая диаграмма
Однако круговая диаграмма плохо показывает отношения между разными узлами. Для этого гораздо лучше подойдет вариант с плиткой, представленный выше.
А еще на диаграмме реального выполнения можно посмотреть полную цепочку вложений служебных узлов:
Рисунок 13. Диаграмма реального выполнения
Активности
С активностями всё достаточно просто: тут есть пользовательские и системные активности. Для каждой группы рассчитывается агрегированные значения в абсолютных и относительных величинах, а информация собирается по принципу on-demand и обновляется каждые 5 секунд.
Пользовательские активности отображают все текущие сессии с разными статусами (Running, Waiting, Blocking). А системные — информацию о (внезапно) системных процессах
Рисунок 14. Активности
Репликация
Если вы хотите масштабироваться, то специально для вас посвящён данный раздел репликации. Если кто не знает, то репликация — это вот ссылка. Репликация здесь разделена на две вкладки «Сервера реплики» и «Слот репликации». Зелёный цвет указывает на то, что реплика активна, а серый — что не активна.
Рисунок 15. Меню репликации
Графики
Графики и диаграммы предоставляют возможность визуально контролировать параметры работы платформы и связанного системного оборудования. Всё что необходимо — это выбрать показатели, то есть нажать на кнопку метрикс и выбрать либо:
1) все показатели
2) показатели performance
3) показатели блокировок
4) показатели использования дискового пространства
Рисунок 16. Графики
Конфигурация мониторинга
Процесс непрерывного анализа функционирования системы и вывод результата в интерфейс называется «мониторинг». В тантор предусмотрена конфигурация даже мониторинга.
Можно выбрать базу данных которую нужно мониторить или, например, исключить ту, которую мониторить не нужно. А также настроить триггеры, но это не те триггеры которые мы привыкли писать в sql-консоли вручную, а это конфигурируемые условия для создания оповещений.
Рисунок 17. Конфигурация мониторинга
То есть если вам нужны какие-то особенные оповещения, срабатывающие только при определенных обстоятельствах — вы можете создать и настроить их. Более того эти оповещения можно настроить таким образом, чтобы они приходили вам в телеграм или на почту. Как по мне — это очень удобно!
Анализ логов
А на данном разделе я хотел бы остановиться поподробнее. Потому что вы даже не представляете насколько функциональным его сделали разработчики. Конечно для корректной его работы потребуется выполнить отдельную установку, но зато он предоставляет обширный функционал в смысле анализа данных и позволяет оперативно отслеживать ключевые значения параметров работы серверов баз данных по многим аспектам.
Рисунок 18. Анализ логов
Давайте кратко опишу разделы в левой части панели:
«Мегазапросы» — отображение вызывающих подозрения запросов в различных разрезах, которые определяются в конфигурации сервера или могут быть переопределены через ALTER SYSTEM.
«Блокировки» — отображение аналитики по запросам, превышающим 1МБ трафика (входящего или исходящего). Отображает сводку по блокировкам (lock) и взаимным блокировкам (deadlock).
Раздел «Ошибки» содержит две вкладки:
по хостам — отображает список хостов и количество ошибок каждого вида (FATAL/ERROR/WARNING) для соответствующих хостов;
по ошибкам — отображает:
наименование ошибок;
количество ошибок;
количество хостов, в которых они представлены;
время регистрации последней ошибки за сегодня;
график интенсивности появления проблемных запросов, разбитый на 24 часа.
Назначение раздела «Системные действия» — отобразить для нужного хоста или базы данных в какую таблицу пишется максимум данных.
Работа с кластерами и агентами
Что же касается Работы с кластерами то здесь мы видим все кластеры в рабочем пространстве и ключевые параметры для каждого кластера.
Рисунок 19. Работа с кластерами
Например его имя, статус, версию patroni, количество ядер CPU, объём занимаемой оперативной памяти, размер занятого/общего дискового пространства и количество инстансов. И тут уже знакомый и приятный нам интерфейс с цветными индикациями о состоянии каждого кластера:
Таблица 2. Цветовая индикация кластеров
Ну и заключение — вкладка работы с агентами.
Рисунок 20. Работа с агентами
Здесь обычная таблица с полями идентификационного номера агента, уникального ключа агента для подключения к платформе, количество инстансов которое просматривает агент, статус агента, хост наблюдаемой базы, ну и версии агента. Собственно Можно отфильтровать эти агенты по статусу.
Ну, разве что, ещё хотел добавить: вы наверняка привыкли к тому, что в каждом веб-интерфейсе, в любом клиенте есть кнопочка в виде колокольчика которая отвечает за уведомления. Казалось бы что тут такого — уведомления и уведомления, но нет, на данной платформе даже представлена отдельная инструкция по настройке оповещений, например в зависимости от степени важности события или статуса сервера.
Горизонты развития
Не знаю как вам, лично я вижу некоторые возможности для развития платформы. Из основных — это:
Интеграция в UI обработчика отложенных событий чтобы какие-нибудь запросы выполнять спустя время или с определенной регулярностью.
Возможность накатить агент Tantor на виртуальную машину посредством Ansible
Также можно добавить выбор языка (в частности русского), а то чет все на английском.
Ну и если совсем задуматься, то можно и нескольким пользователям обладать правами owner’а.
Вместо заключения
Итак я вышел из своего привычного амплуа, попробовал платформу Тантор и могу с уверенностью сказать, что её функционал покрывает достаточно большой перечень требований.
Тут вам и базы данных с красивой инфографикой, оптимизация запросов и не только, масштабирование и аналитика, а также мощнейшая конфигурация от самих серверов вплоть до уведомлений. Что конечно же покрывает прилично большой спектр задач разного «калибра».
И всё вышеперечисленное еще находится весьма в привлекательном GUI, что тоже нельзя не отметить, потому как принципы «Все гениальное — просто» и «Краткость — сестра таланта» тут на высочайшем уровне скомбинированы.
Итог: платформа Тантор — это отлично реализованный функционал упакованный в грамотный интерфейс.