Недавно у Postgres Pro вышла новость о релизе Enterprise Manager 2, или просто PPEM.

Если коротко, то PPEM это админка для управления и мониторинга Postgres. Основная задача PPEM — помогать DBA в ежедневной работе и избавлять от рутины. Давайте в этой статье попробуем посмотреть что из себя представляет PPEM и что там есть. Ах да, меня же зовут Алексей и я из команды разработки PPEM.

Для начала пара слов об архитектуре PPEM, это важный момент для понимания того как предстоит развертывать эту систему. PPEM это монолит в трехзвенной архитектуре:

  • фронтенд — веб-приложение с которым пользователь работает в браузере;

  • бэкенд — серверное приложение которое принимает с фронта пользовательские запросы и делает всю основную управленческую работу (бэкенд будем называть Менеджером);

  • репозиторий — экземпляр Postgres в которой менеджер хранит служебные данные необходимые для управленческой работы;

  • агенты — помощники менеджера, которые устанавливаются на узлы с экземплярами СУБД — по указке менеджера агенты делают всю исполнительскую работу.

В общем все просто, никаких куберов и микросервисов — нам ехать, а не шашечки.

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

Знакомиться будем по известному пути: установка, запуск, обзор, оценка и итоги. Перед тем как продолжать давайте прикинем что нам потребуется? В моем случае это две виртуальных машины:

  • виртуальная машина с Postgres, куда мы поставим менеджера и агента PPEM, эта машина будет выступать центральным узлом для менеджера и его репозитория;

  • виртуальная машина с Postgres, куда мы поставим только агента, на этой машине будет работать экземпляр СУБД которым мы хотим управлять с помощью PPEM.

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

Установка

Установка выполняется из официального репозитория Postgres Pro. Понадобится скачать скрипт установки репозиториев PPEM, запустить его (скрипт пропишет репозитории пакетного менеджера в систему и обновит его метаданные). После чего установить PPEM можно будет уже с помощью пакетного менеджера. Напоминаю, у меня Debian 12 и выглядеть это будет так:

wget https://repo.postgrespro.ru/ppem/ppem/keys/pgpro-repo-add.sh  
sudo sh ./pgpro-repo-add.sh

Проделать это нужно на обеих машинах.

Установка, настройка и запуск менеджера

Менеджер у нас идет в связке с веб-приложением, который является интерфейсом для пользователя. Для установки обоих компонентов достаточно установить два пакета ppem и ppem-gui:

apt install ppem ppem-gui

Минимальная настройка менеджера заключается в указании реквизитов для подключения к базе репозитория. Предварительно потребуется создать пользователя и базу данных.

sudo -u postgres createuser --pwprompt ppem
sudo -u postgres createdb -O ppem ppem

Также стоит убедиться, что для созданного пользователя подключение к базе данных выполняется успешно. Проверить это можно через psql:

psql -h localhost -U ppem -d ppem

Если вдруг попытка проверки возвращает ошибку, то очень вероятно, что требуется настройка правил авторизации HBA и перезагрузка конфигурации СУБД. В официальной документации можно более подробно почитать про настройку pg_hba.conf.

Теперь следует отредактировать файл конфигурации менеджера /etc/ppem-manager.yml, в параметре repo.url указать URL для подключения к СУБД:

repo:  url: "postgres://ppem:password@localhost/ppem"

Осталось запустить службу менеджера и добавить ее в автозапуск.

sudo systemctl start ppem
sudo systemctl enable ppem

Теперь открываем браузер, вводим адрес сервера где был установлен менеджер. Для входа в систему можно использовать дефолтные креды от любого wifi-роутера: admin, admin.

На странице приветствия можно ознакомиться с краткой инструкцией по установке агентов, из этой инструкции нам понадобится API-ключ для последующей настройки агентов.

Страница приветствия
Страница приветствия

Установка, настройка и запуск агента

Установку агента следует выполнить на обеих виртуальных машинах (да, и на той, где установлена база данных репозитория для менеджера PPEM).

apt install ppem-agent

Также для агента создадим отдельного пользователя в СУБД:

sudo -u postgres createuser --pwprompt ppem_agent

И снова стоит сразу проверить, что для созданного пользователя подключение к СУБД выполняется успешно (при необходимости внести соответствующие разрешения в pg_hba.conf).

psql -h localhost -U ppem_agent -d ppem

Для настройки агента отредактируем файл /etc/ppem-agent.yml.

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

  • agent.name — уникальное имя агента (если не указано то будет использоваться hostname сервера).

  • agent.manager.url — URL для подключения к менеджеру. URL обязательно должен начинаться со схемы (http или https) и иметь путь к версии API; текущая версия v1. Пример URL: https://ppem.example.org/v1.

  • agent.manager.api_key — API-ключ используемый для подключения к менеджеру.

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

  • agent.instance.connection_defaults.user — пользователь СУБД.

  • agent.instance.connection_defaults.password — пароль пользователя СУБД.

Дополнительно можно настроить адрес прослушивания для HTTP-сервера, по умолчанию агент прослушивает все доступные адреса.

  • http.server.address — адрес для входящих сетевых подключений (пустая строка включает прослушивание всех адресов).

Если ориентироваться на инструкцию с рис. 1, то файл конфигурации будет выглядеть так:

agent:
  name: "my-favorite-database-server"
  manager:
    url: "http://192.168.23.168/v1"
    api_key: "dcf3975c-8044-4624-a581-842dab8d0158"
  instance:
    connection_defaults:
      user: "ppem_agent"
      password: "ppem_agent_password"
http:
  server:
    address: "192.168.23.168"

Осталось запустить службу агента и добавить ее в автозапуск.

sudo systemctl start ppem-agent
sudo systemctl enable ppem-agent

После запуска, агент выполнит автоматический поиск локальных экземпляров СУБД и автоматически добавит их в PPEM. Поэтому вернувшись в браузер можно обновить страничку и увидеть что PPEM обнаружил экземпляры СУБД.

Обзор возможностей

Давайте рассмотрим какие же возможности есть в PPEM. Документация заявляет следующее:

  • обслуживание экземпляров СУБД;

  • конфигурирование;

  • средства наблюдения и мониторинга;

  • средства резервного копирования.

Хотя это и не полный список, давайте пройдемся по перечисленным пунктам.

Обслуживание Postgres

Согласно описанию:

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

Действительно, если пройтись по разделам Кластеры и Экземпляры, можно найти разные средства как просмотра, так и управления экземплярами и их объектами. Из доступных операций обслуживания можно отметить:

  • управление службами экземпляров СУБД: запуск, остановка, перезапуск;

  • управление жизненным циклом экземпляров СУБД — создание новых, добавление существующих и удаление экземпляров;

  • управление жизненным циклом объектов СУБД таких, как табличные пространства, базы данных, схемы, таблицы, индексы, функции и последовательности;

  • выполнение регламентных заданий по обслуживанию баз данных: вакуум, сбор статистики, переиндексация.

Список экземпляров СУБД
Список экземпляров СУБД
Базы данных в одном из экземпляров
Базы данных в одном из экземпляров
Таблицы в одной из схем
Таблицы в одной из схем

Средства наблюдения и мониторинга

��нова обратимся к описанию:

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

Что же у нас со средствами наблюдения:

  • инструменты для просмотра текущей активности на основе статистических представлений pg_stat_activity и семейства pg_stat_progress_*;

  • статистика по запросам на основе pg_stat_statements и pgpro_stats;

  • журнал сообщений активности;

  • метрики производительности;

  • поддержка профилировщика pgpro_pwr.

В PPEM представлено несколько инструментов для отслеживания активности в экземплярах СУБД. Один из наиболее часто используемых, особенно когда что-то идет не по плану это Активность.

Текущая активность в экземпляре
Текущая активность в экземпляре

Cтраница Активность и ее табличное представление того что происходит в СУБД будет хорошо знакомо тем кто уже сталкивался с pg_stat_activity. Здесь можно отслеживать долгие запросы, смотреть их планы выполнения (через pg_query_state), отслеживать сессии с подозрительным состояниями, отменять запросы или даже принудительно завершать сеансы. Это довольно полезный и мощный инструмент для администратора, но вот новичку начать работать с этим может быть сложно и сначала потребуется сходить в документацию.

Следующий инструмент это SQL статистика, которая содержит накопленную за время работы информацию по запросам и использованию ресурсов. SQL статистика полагается на pg_stat_statements или pgpro_stats (в зависимости от того что установлено на сервере) и является мощным средством для анализа запросов которые используют больше всего ресурсов.

Статистика SQL выражений
Статистика SQL выражений

В прочем статистика pg_stat_statements и тем более pgpro_stats является еще более экзотической чем pg_stat_statements и здесь даже продвинутый DBA может не сразу справиться с поиском нужной информации, поэтому снова есть простор для улучшений.

Отдельно замечу что некоторые функции мониторинга полагаются на pgpro-otel-collector, это сбор и визуализация метрик и журналов. Для это задачи используется Коллектор, который собирает метрики и журналы с экземпляров СУБД и затем складывающий их в PPEM или еще лучше в OpenTelemetry-совместимые хранилища. Поэтому для полноценной работы функций мониторинга необходимо установить и настроить pgpro-otel-collector.

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

Журнал сообщений экземпляра
��урнал сообщений экземпляра

Графики расположены на отдельной странице "Метрики".

Сейчас все имеющиеся графики расположены на одной странице и тоже есть простор для улучшений.

Если в экземпляре установлен профайлер pgpro_pwr PPEM также может использовать его функции и отображать отчеты производительности экземпляра.

Отчет производительности pgpro_pwr
Отчет производительности pgpro_pwr

Здесь у нас выпало из рассмотрения несколько других инструментов, вроде Прогресс выполнения операций, Дерево блокировок, Просмотр планов выполняющихся запросов (да-да, выполняющихся, никакой ошибки), Визуализация планов... оставим это на самостоятельное изучение или на другую статью.

Если подвести некоторое резюме относительно инструментов по наблюдению/мониторингу. Инструментов несколько и под разные задачи, часть информации представлена в табличном виде и здесь на мой взгляд есть куда развиваться — сходу может быть довольно сложно найти, увидеть нужную информацию, особенно если ты не знаешь что искать :) Если говорить про графики, то ассортимент весьма ограничен, особенно если сравнивать с богатством и разнообразием дашбордов Grafana. Так что, есть куда развиваться.

Конфигурирование Postgres

Этот пункт в документации весьма краток:

PPEM предоставляет возможности по настройке экземпляров СУБД.

Что же есть в наличие?

  • возможности просмотра и изменения параметров конфигурации СУБД;

  • возможности управления правилами авторизации (pg_hba.conf);

  • управление ролями СУБД.

Управление настройками экземпляра
Управление настройками экземпляра

В целом это классический инструмент работы с конфигурацией СУБД — просмотр и управление. Впрочем, DBA повидавший и поевший разного, найдет здесь некоторый простор для развития и улучшений...

Средства резервного копирования

Из документации:

PPEM предоставляет возможности по настройке и управлению резервным копированием экземпляров СУБД и по развертыванию новых экземпляров из резервных копий.

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

  • создание и управление локальными и S3-хранилищами резервных копий;

  • выполнение задач резервного копирования, как по требованию, так и по расписанию;

  • восстановление экземпляров из резервных копий.

Управление резервными копиями
Управление резервными копиями

В целом кажется что все необходимое имеется, но человек хорошо знакомый с pg_probackup на практике, сможет заметить отхождение от подходов управления резервным копированием принятым в консольном pg_probackup и по началу может не хватать привычных средств хорошо знакомого им инструмента.

Итого

Когда я подошел к этому разделу, то некоторое время думал, что же здесь написать? Я вспомнил прошлое, те времена когда я начинал заниматься администрированием Postgres в далеком 2012 году... Тогда, ничего подобного PPEM в экосистеме Postgres попросту не было. Многим администраторам приходилось писать свои shell-скрипты для автоматизации и мониторинга, держать репозитории с полезными SQL-запросами и мы делились этими скриптами, разбирались в них и улучшали... Будь тогда у меня под рукой такой инструмент как PPEM, мне было бы сильно легче осваивать Postgres. В PPEM многие нужные инструменты собраны в одном месте и работа с ними хорошо упрощена и это реально помогает реже открывать черную ssh/psql-консоль сервера. Мне как разработчику PPEM, конечно же хочется показать продукт только с лучшей стороны, и все же хочется быть честным (с самим собой уж точно), я очень хорошо знаю PPEM и вижу места, которые хочется улучшить и сделать еще удобнее. Каких-то функций не хватает, а некоторые вещи хочется расширить, а еще лучше связать с другими функциями. Наверняка и ты читатель, заметил что-то такое, поэтому напиши об этом в комментариях и мы обязательно подумаем как это сделать. Мы, команда разработки PPEM, с большим интересом смотрим в бэклог будущее, ведь впереди у нас много интересных задач и идей. И мы будем дальше работать над тем чтобы, улучшить существующие и добавить новые функции. Все ради того, чтобы упростить работу администраторов Postgres, делать эту работу прозрачнее и понятнее, удобнее и комфортнее, а тем кто только приходит в мир Postgres облегчить знакомство, сделать его приятным и познавательным. Спасибо за внимание и хорошего дня!