Знакомство с PPEM 2
Недавно у 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 (в зависимости от того что установлено на сервере) и является мощным средством для анализа запросов которые используют больше всего ресурсов.

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

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

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

Здесь у нас выпало из рассмотрения несколько других инструментов, вроде Прогресс выполнения операций, Дерево блокировок, Просмотр планов выполняющихся запросов (да-да, выполняющихся, никакой ошибки), Визуализация планов… оставим это на самостоятельное изучение или на другую статью.
Если подвести некоторое резюме относительно инструментов по наблюдению/мониторингу. Инструментов несколько и под разные задачи, часть информации представлена в табличном виде и здесь на мой взгляд есть куда развиваться — сходу может быть довольно сложно найти, увидеть нужную информацию, особенно если ты не знаешь что искать :) Если говорить про графики, то ассортимент весьма ограничен, особенно если сравнивать с богатством и разнообразием дашбордов 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 облегчить знакомство, сделать его приятным и познавательным. Спасибо за внимание и хорошего дня!