Логирование
Greengage DB может логировать различные события, включая запуск и завершение работы СУБД, сбои сегментов, попытки подключения, операции с данными и многое другое. Мониторинг этих логов помогает выявлять потенциальные угрозы безопасности. Например, вы можете отслеживать, кто и когда создал новых пользователей.
Эта статья описывает, как настроить ведение логов с различным уровнем детализации и как просматривать логи, соответствующие определенным критериям.
Обзор
Расположение лог-файлов
Логи сохраняются в кастомном формате, который использует значения, разделенные запятыми (CSV).
Утилита gplogfilter позволяет просматривать и фильтровать логи.
Координатор-хост и сегмент-хосты хранят лог-файлы в следующих местах:
-
Координатор-хост
На координатор-хосте логи хранятся в каталоге $COORDINATOR_DATA_DIRECTORY/log. По умолчанию утилита
gplogfilterиспользует этот путь, если лог-файл не указан. -
Сегмент-хосты
На сегмент-хостах логи сохраняются в каталогах /<data_dir>/primary/gpseg<N>/log и /<data_dir>/mirror/gpseg<N>/log. Например, на сегмент-хосте
sdw1, инициализированном в статье Инициализация СУБД, логи находятся в следующих местах:-
основные сегменты: /data1/primary/gpseg0/log, /data1/primary/gpseg1/log;
-
зеркальные сегменты: /data1/mirror/gpseg2/log, /data1/mirror/gpseg3/log.
-
По умолчанию логи, создаваемые административными утилитами, такими как gpinitsystem, gpstart и gpconfig, сохраняются в каталоге ~/gpAdminLogs административного пользователя Greengage DB.
Примеры записей в логах
Ниже приведены несколько примеров записей в логах в формате, используемом gplogfilter:
-
Указывает, что экземпляр координатора (
seg-1) запущен и готов принимать клиентские подключения:2026-04-22 13:50:03.112519 UTC|||p6097|th736475584||||0|||seg-1|||||LOG: |00000|database system is ready to accept connections|PostgreSQL 12.22 (Greengage Database 7.4.1 build dev) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0, 64-bit compiled on Apr 21 2026 14:51:47||||||0||postmaster.c|3548|
-
Показывает, что пользователь
gpadminподключился локально с использованием сокета домена Unix и создал базу данныхcrm:2026-04-22 13:55:04.810736 UTC|gpadmin|postgres|p6353|th736475584|[local]||2026-04-22 13:54:59 UTC|0|con22|cmd1|seg-1||||sx1|LOG: |00000|statement: CREATE DATABASE crm;|||||||0||postgres.c|1691|
-
Показывает успешное подключение пользователя
aliceк базе данныхcrmс удаленного хоста с IP-адресом192.168.10.55:2026-04-22 13:59:47.365002 UTC|alice|crm|p6478|th736475584|192.168.10.55|44588|2026-04-22 13:59:47 UTC|0|con42||seg-1||||sx1|LOG: |00000|connection authorized: user=alice database=crm application_name=psql|||||||0||postinit.c|351|
Параметры конфигурации логирования
Конфигурация логирования управляется параметрами, названия которых начинаются с log_ или gp_log_.
Вы можете изменить значения параметров по умолчанию, как описано в разделе Настройка логирования.
Следующие разделы группируют важные параметры конфигурации логирования по соответствующим категориям.
Уровни логирования и детализации
- log_min_messages
-
Позволяет задать уровень критичности сообщений, записываемых в лог-файлы. Возможные значения включают
INFO,WARNING,FATALи другие. - log_error_verbosity
-
Управляет уровнем детализации сообщений в логе. Возможные значения включают
DEFAULT,TERSEиVERBOSE. - log_statement
-
Управляет тем, какие SQL-запросы записываются в лог. Например, можно включить логирование только DDL-запросов. Возможные значения включают
NONE,DDL,MODиALL.
Клиентские подключения
- log_connections/log_disconnections
-
Определяют, нужно ли логировать подключения и отключения клиентов.
- log_hostname
-
Определяет, добавлять ли имя хоста клиента в сообщения логов подключений. В зависимости от конфигурации разрешения имен хостов, включение этого параметра может привести к заметному снижению производительности.
Статистика производительности
- log_statement_stats
-
Записывает общую статистику производительности парсера запросов, планировщика и исполнителя в лог-файл сервера для каждого SQL-запроса.
- log_parser_stats
-
Записывает статистику производительности парсера запросов в лог-файл сервера для каждого SQL-запроса.
- log_planner_stats
-
Записывает статистику производительности Postgres-планировщика в лог-файл сервера для каждого SQL-запроса.
Ротация лог-файлов
- log_rotation_size
-
Устанавливает максимальный размер лог-файла перед его ротацией. Когда размер файла достигает указанного значения, он закрывается и создается новый лог-файл.
- log_rotation_age
-
Устанавливает максимальный возраст лог-файла перед его ротацией. Как только с момента создания файла проходит указанное время, создается новый лог-файл. По умолчанию ротация логов происходит каждые 24 часа.
Настройка логирования
Для изменения параметров конфигурации логирования используйте команду gpconfig -c.
Ниже приведены несколько примеров изменения значений по умолчанию для некоторых параметров логирования:
-
Включить логирование клиентских подключений на координаторе:
$ gpconfig -c log_connections -v 'on' --coordinatoronly -
Настроить координатор на логирование только DDL-операций (таких как
CREATE,ALTERилиDROP):$ gpconfig -c log_statement -v 'ddl' --coordinatoronly -
Установить максимальный размер лог-файла перед его ротацией в 256 МБ для всего кластера Greengage DB:
$ gpconfig -c log_rotation_size -v 256MB
Чтобы применить изменения, перезагрузите конфигурацию или перезапустите кластер с помощью gpstop.
Например, для log_connections и log_statement достаточно перезагрузки конфигурации, в то время как изменение gp_log_format требует перезапуска кластера:
$ gpstop -u
$ gpstop -ra
Просмотр логов
Для просмотра логов используйте утилиту gplogfilter.
По умолчанию эта утилита выполняет поиск в лог-файлах координатора Greengage DB в каталоге, определяемом переменной окружения COORDINATOR_DATA_DIRECTORY.
Административная схема gp_toolkit предоставляет набор представлений gp_log_*, которые позволяют просматривать серверные логи с помощью SQL-запросов.
Фильтрация логов
Примеры ниже показывают, как фильтровать лог-файлы координатора.
-
Показать записи
ERROR,FATALилиPANIC:$ gplogfilter --trouble -
Показать последние 10 записей в логе:
$ gplogfilter --tail 10 -
Показать события за указанный период:
$ gplogfilter --begin '2025-02-28 07:20' --end '2025-02-28 07:30' -
Показать все сообщения из лога за последние 10 минут:
$ gplogfilter --duration :10 -
Выбрать только определенные столбцы:
$ gplogfilter --columns '2,3,19' -
Выбрать только записи, содержащие определенную строку:
$ gplogfilter --find 'connection authorized' -
Выполнить поиск записей, соответствующих указанному регулярному выражению:
$ gplogfilter --match 'connection authorized:.*database=crm'
Настройки ввода и вывода
Примеры ниже демонстрируют, как записать вывод gplogfilter в файл и прочитать определенные лог-файлы.
-
Записать вывод в файл coordinatorlog.out вместо стандартного вывода (stdout):
$ gplogfilter --end '2025-02-28 07:30' --out coordinatorlog.out -
Сжать результирующий файл с использованием указанного уровня сжатия:
$ gplogfilter --end '2025-02-28 07:30' --out coordinatorlog.out --zip=7 -
Прочитать лог-файл coordinatorlog.out:
$ gplogfilter coordinatorlog.out -
Прочитать сжатый лог-файл:
$ gplogfilter coordinatorlog.out.gz --unzip
Просмотр логов на сегментах
Чтобы читать лог-файлы на сегмент-хостах, используйте утилиту gpssh.
Следующая команда:
-
запускает
gplogfilterна всех сегмент-хостах, указанных в файле hostfile_segment_hosts; -
фильтрует логи, показывая только сообщения
ERROR,FATALилиPANIC; -
записывает результат в файл seglog.out.
$ gpssh -f hostfile_segment_hosts -e " \
source /usr/local/gpdb/greengage_path.sh && \
gplogfilter /data1/*/*/log/gpdb*.csv \
--trouble \
" > seglog.out