Перейти к содержанию

Настройка журналирования PostgreSQL

Настройка журналирования запросов, log_line_prefix, локали и вспомогательной статистики для pgBadger

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

Минимальное журналирование запросов

Чтобы включить текст и длительность запросов, включите журналирование операторов по длительности:

log_min_duration_statement = 0

Значение 0 записывает каждый завершённый оператор. На загруженном сервере выберите более высокий порог в миллисекундах, чтобы контролировать объём журнала. Прежде чем включать низкий порог в производственной среде, измерьте накладные расходы и рост хранилища.

Если нужны только длительность и число запросов, но не их текст, используйте:

log_min_duration_statement = -1
log_duration = on

Если нужны отчёты о самых медленных запросах и суммарном времени запросов, предпочтителен log_min_duration_statement.

Обязательные поля префикса

Пользовательский log_line_prefix должен включать оба следующих элемента:

  • поле времени: %t, %m или %n;
  • поле процесса или сеанса: %p или %c.

Минимальный префикс stderr:

log_line_prefix = '%t [%p]: '

Более информативный префикс записывает пользователя, базу данных, приложение и клиента:

log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '

Эквивалентный префикс для назначения syslog не содержит поля времени и процесса, которые уже предоставляет syslog:

log_line_prefix = 'user=%u,db=%d,app=%a,client=%h '

Также поддерживается другой порядок ключей:

log_line_prefix = '%t [%p]: db=%d,user=%u,app=%a,client=%h '

Если pgBadger не распознаёт ваш префикс, передайте его точное значение через --prefix. Не упрощайте и не перепечатывайте его иначе, чем в postgresql.conf.

Включите те классы событий, которые должны появиться в отчёте:

log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_error_verbosity = default

Эти параметры могут значительно увеличить объём журнала. В частности, log_temp_files = 0 и log_autovacuum_min_duration = 0 записывают каждое подходящее событие; скорректируйте их в соответствии с рабочей нагрузкой и доступным объёмом хранения.

Серверные сообщения должны быть на английском языке

Синтаксический анализатор распознаёт сообщения сервера PostgreSQL на английском языке. Используйте один из вариантов:

lc_messages = 'en_US.UTF-8'

или:

lc_messages = 'C'

Локали наподобие fr_FR.UTF-8 не поддерживаются анализатором исходного проекта.

Не допускайте конфликтующих параметров операторов

Не включайте одновременно log_min_duration_statement, log_duration и log_statement = 'all'. Одно выполнение может попасть в журнал несколько раз, что завышает счётчики pgBadger и сильно увеличивает объём журнала.

ЦельРекомендуемый параметр
Текст запроса и время выполненияlog_min_duration_statement = 0 или выбранный порог
Только длительность и количествоlog_min_duration_statement = -1, log_duration = on
Расширенный аудит операторовРассматривайте log_statement как отдельную политику журналирования; не сочетайте все три параметра для статистики pgBadger

После перезагрузки конфигурации PostgreSQL изучите несколько реальных записей журнала, прежде чем запускать большой анализ. Убедитесь, что отметка времени, идентификатор процесса/сеанса, пользователь, база данных, приложение и клиент соответствуют выбранному формату.