Логирование в postgresql
Настройка журнальных записей
Приемник сообщений (log_destination = список)
stderr поток ошибок
csvlog формат CSV (только с коллектором)
jsonlog формат JSON (только с коллектором)
syslog демон syslog
eventlog журнал событий Windows
Коллектор сообщений (logging_collector = on) позволяет собирать дополнительную информацию, никогда не теряет сообщения (в отличие от syslog), записывает stderr, csvlog и jsonlog в файл log_directory/log_filename
Журнал сообщений сервера можно направлять в разные приемники и выводить в разных форматах. Основной параметр, который определяет приемник и формат — log_destination (можно указать один или несколько приемников через запятую)
Значение stderr (установленное по умолчанию) выводит сообщенияв стандартный поток ошибок в текстовом виде. Значение syslog направляет сообщения демону syslog в Unix-системах, а eventlog —в журнал событий Windows
Обычно дополнительно включают специальный процесс — коллектор сообщений. Он позволяет записать больше информации, поскольку собирает ее со всех процессов, составляющих PostgreSQL. Он спроектирован так, что никогда не теряет сообщения; как следствие, при большой нагрузке он может стать узким местом
Коллектор сообщений включается параметром logging_collector. При значении stderr информация записывается в каталог, определяемый параметром log_directory, в файл, определяемый параметром log_filename.
Включенный коллектор сообщений позволяет также указать приемник csvlog; в этом случае информация будет сбрасываться в формате CSV в файл log_filename с расширением csv. При использовании приемника jsonlog содержимое файла отчета будет записываться в формате JSON, а имя файла будет иметь расширение json
Информация о журнале
сообщения определенного уровня log_min_messages
время выполнения длинных команд log_min_duration_statement
время выполнения команд log_duration
имя приложения application_name
контрольные точки log_checkpoint
sподключения и отключения log_(dis)connections
длинные ожидания log_lock_waits
текст выполняемых команд log_statement
использование временных файлов log_temp_files
Ротация файлов журнала
С помощью коллектора сообщений:
настройка параметрмаска имени файла log_filename
время ротации, мин log_rotation_age
размер файла для ротации, КБ log_rotation_size
перезаписывать ли файлы log_truncate_on_rotation = on
комбинируя маску файла и время ротации, получаем разные схемы:'postgresql-%H.log', '1h' 24 файла в сутки'
postgresql-%a.log', '1d' 7 файлов в неделю
Внешние средства:
системная утилита logrotate
Если записывать журнал в один файл, рано или поздно он вырастетдо огромных размеров, что крайне неудобно для администрированияи анализа. Поэтому обычно используется та или иная схема ротации журналов.
https://postgrespro.ru/docs/postgresql/16/logfile-maintenance
Коллектор сообщений имеет встроенные средства ротации, которые настраиваются несколькими параметрами, основные из которых приведены на слайде.Параметр log_filename позволяет задавать не просто имя, а маску имени файла с помощью спецсимволов даты и времени.Параметр log_rotation_age задает время переключения на следующий файл в минутах (а log_rotation_size — размер файла, при котором надо переключаться на следующий).Включение log_truncate_on_rotation перезаписывает уже существующие файлы.Таким образом, комбинируя маску и время переключения, можно получать разные схемы ротации
https://postgrespro.ru/docs/postgresql/16/runtime-config-logging#RUNTIME-CONFIG-LOGGING-WHERE
В качестве альтернативы можно воспользоваться внешними программами ротации, например пакетный дистрибутив для Ubuntu использует системную утилиту logrotate (ее настройки находятся в файле /etc/logrotate.d/postgresql-common).
Можно искать определенную информацию средствами ОС или специально разработанными скриптами
Стандартом де-факто для анализа является программа PgBadger https://github.com/darold/pgbadger, но надо иметь в виду, что она накладывает определенные ограничения на содержимое журнала.В частности, допускаются сообщения только на английском языке.
Источник: https://edu.postgrespro.ru/16/dba1-16/dba1_12_admin_monitoring.html
#Включим вывод всех команд и времени их выполнения:
megabase=# ALTER SYSTEM SET log_min_duration_statement=0;
ALTER SYSTEM
megabase=#
megabase=# SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
megabase=#
Теперь выполним какую-нибудь команду:
megabase=# SELECT sum(random()) FROM generate_series(1,1000000);
sum
--------------------
500059.86041098554
(1 row)
#И посмотрим журнал
less /var/log/postgresql/postmaster.log
logging collector
logging_collector (boolean) включает сборщик сообщений, после его включения необходимо перезагрузить сервер
log_destination (string) - указывает методы протоколирования через запятую: stderr ( по умолчанию), csvlog и syslog
stderr log/postgresql.log
csvlog log/postgresql.csv
log_directory (string) - определяет каталог, в котором создаются журнальные файлы
log_filename - задает имена журнальных файлов
log_statement - указывает какие SQL-команды записывать в журнал ( none, ddl, mod и all )
logging_collector = on
log_statement = 'all'
log_destination = 'stderr,csvlog,syslog'
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
...............
/etc/init.d/postgresql restart
Источники
Связанные темы
Использование модуля pg_stat_statements в postgresql
Управление планировщиком в Postgresql