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

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

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

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

## Минимальное журналирование запросов {#minimum-query-logging}

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

```postgresql
log_min_duration_statement = 0
```

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

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

```postgresql
log_min_duration_statement = -1
log_duration = on
```

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

## Обязательные поля префикса {#required-prefix-fields}

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

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

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

```postgresql
log_line_prefix = '%t [%p]: '
```

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

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

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

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

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

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

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

## Рекомендуемые параметры событий {#recommended-event-settings}

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

```postgresql
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` записывают каждое подходящее событие; скорректируйте их в соответствии с рабочей нагрузкой и доступным объёмом хранения.

## Серверные сообщения должны быть на английском языке {#message-locale}

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

```postgresql
lc_messages = 'en_US.UTF-8'
```

или:

```postgresql
lc_messages = 'C'
```

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

## Не допускайте конфликтующих параметров операторов {#statement-setting-conflicts}

Не включайте одновременно `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 изучите несколько реальных записей журнала, прежде чем запускать большой анализ. Убедитесь, что отметка времени, идентификатор процесса/сеанса, пользователь, база данных, приложение и клиент соответствуют выбранному формату.

---

Обратные ссылки:

- [pgBadger](/ru/docs/pgbadger/)
- [Загрузка и установка](/ru/docs/pgbadger/download/)
