--- title: Инструменты для обслуживания postgresql description: published: true date: 2025-06-17T09:33:07.672Z tags: postgresql editor: markdown dateCreated: 2025-06-17T09:33:07.672Z --- Расскажу про парочку инструментов, которые упростят обслуживание сервера PostgreSQL. Начну с наиболее простого - pgBadger (https://pgbadger.darold.net/examples/sample.html). Это анализатор лога, который на его основе генерирует отчёты в формате html. На выходе получаются одиночные html файлы, которые можно просто открыть в браузере. Сделано всё аккуратно и добротно, легко настраивается, отчёты наглядные и информационные. 🔹Чтобы было что анализировать, необходимо включить логирование интересующих вас событий. Для разовой отладки это всё можно включать на ходу, либо постоянно через файл конфигурации `postgresql.conf` и перезапуск сервера. Он обычно хорошо прокомментирован. Вас будут интересовать параметры, начинающие с log_*. Они собраны все в отдельном блоке. Для примера я включил почти всё: ``` log_min_duration_statement = 0 log_checkpoints = on log_connections = on log_disconnections = on log_duration = on log_line_prefix = '%m [%p] %q%u@%d ' log_lock_waits = on log_temp_files = 0 log_timezone = 'Europe/Moscow' ``` Вся включенная статистика стала писаться в общий лог-файл `/var/log/postgresql/postgresql-17-main.log`. С ним и будем работать. Устанавливаем pgBadger: ``` # wget https://github.com/darold/pgbadger/archive/refs/tags/v13.1.tar.gz # tar xzvf v13.1.tar.gz # cd pgbadger-* # apt install make # make && make install ``` Анализируем лог файл: ``` # pgbadger /var/log/postgresql/postgresql-17-main.log ``` Тут же в директории, где его запускали, увидите файл out.html. Забирайте его к себе и смотрите. Там будет информация с общей статистикой сервера, информация по запросам и их типам, времени исполнения, подключениям, по пользователям, базам и хостам откуда подключались и много всего остального. PgBadger удобен тем, что по сути это одиночный скрипт на Perl. Можно включить логирование в конфигурации, применить её через `SELECT pg_reload_conf();` без перезапуска сервера СУБД. Пособирать некоторое время данные, забрать лог и анализировать его. Логирование отключить и снова перечитать конфиг. В итоге всё будет сделано без перезапуска сервера. 🔹Второй инструмент - PgHero (https://github.com/ankane/pghero), он показывает примерно то же самое, только в режиме реального времени и работает в виде веб сервиса. Для него уже надо создавать пользователя, настраивать доступ, отдельную базу. Немного другой подход. Надо будет дёргать сервер с СУБД. Надо перейти в консоль и создать необходимые сущности: ```sql # su postgres # psql > CREATE USER pghero WITH PASSWORD 'pgheropass'; > CREATE DATABASE pgherodb OWNER pghero; > \q ``` Разрешаем этому пользователю подключаться. Добавляем в `pg_hba.conf` строку: ``` host pgherodb pghero 172.17.0.0/24 md5 ``` `172.17.0.0/24` - подсеть, из которой будет подключаться PgHero. В данном случае это Docker контейнер, запущенный на этом же хосте. PostgreSQL должен принимать запросы с локального IP адреса, к которому будет доступ из Docker сети. Можно добавить в конфиг `postgresql.conf` параметр: ``` listen_addresses = 'localhost,172.17.0.1' ``` Перезапускаем PotgreSQL: ``` # systemctl restart postgresql ``` Запускаем PgHero в Docker контейнере: ``` # docker run -ti -e DATABASE_URL=postgres://pghero:pgheropass@172.17.0.1:5432/pgherodb -p 8080:8080 ankane/pghero ``` Идём на порт севера 8080, где запущен контейнер и смотрим информацию о PostgreSQL. Если у вас не настроено расширение **pg_stat_statements**, которое использует PgHero для сбора статистики, то установите его. Для этого в конфигурацию `postgresql.conf` добавьте параметры: ``` shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.track = all pg_stat_statements.max = 10000 track_activity_query_size = 2048 ``` Перезапустите Postgresql и выполните в консоли СУБД: ```sql > CREATE EXTENSION IF NOT EXISTS pg_stat_statements; > GRANT pg_read_all_stats TO pghero; ``` Теперь можно возвращаться в веб интерфейс и смотреть информацию. По умолчанию, пользователь pghero не будет видеть запросы других пользователей, если ему не дать права superuser. Это можно исправить, выдав ему набор прав и ролей из этой инструкции (https://github.com/ankane/pghero/blob/master/guides/Permissions.md). ![photo_2025-05-21_20-48-32.jpg](/DevOps/attachments/photo_2025-05-21_20-48-32.jpg) ![photo_2025-05-21_20-48-32_(2).jpg](/DevOps/attachments/photo_2025-05-21_20-48-32_(2).jpg)