2.10. Ведение журнала
Shardman — критически важная точка в пользовательской инфраструктуре, так как в ней хранятся все пользовательские данные. Это делает ведение журнала обязательным. Поэтому пользователь должен понимать, как работает ведение журнала в Shardman. Из-за сложности устройства Shardman поддерживаются журналы из нескольких источников: журналы демона shardmand, который управляет конфигурацией кластера, и журналы из экземпляров базы данных PostgreSQL.
2.10.1. Журналы PostgreSQL
Shardman использует стандартные параметры ведения журнала PostgreSQL, описанные здесь. Параметры ведения журнала должны быть внесены в файл sdmspec.json
в раздел pgParameters
, как показано в следующем примере:
{ "ShardSpec": { "pgParameters": { "log_line_prefix": "%m [%r][%p]", "log_min_messages": "INFO", "log_statement": "none", "log_destination": "stderr", "log_filename": "pg.log", "logging_collector": "on", "log_checkpoints": "false", ... }, ... }, ... }
По умолчанию журналы размещаются в каталоге вида /var/lib/pgpro/sdm-14/data/keeper-cluster0-clover-1-shrn1-0/postgres/log
. В этом примере cluster0
— текущий кластер, clover-1-shrn1
— имя текущего сегмента, 0
— идентификатор интегрированного процесса keeper
. Чтобы изменить каталог размещения журналов, задайте параметр log_directory
.
2.10.2. Журналы shardmand
shardmand — это модуль systemd, его журналы записываются в journald. Ознакомиться с его работой можно, используя команду journalctl
. Например, чтобы получить все журналы с 2023-05-09 10:00
для службы shardmand кластера cluster0
, можно использовать следующую команду:
$
journalctl -u shardmand@cluster0.service
Для фильтра журналов по времени можно использовать параметры --since
и --until
, ограничивающие отображаемые записи после или до заданного времени соответственно. Значения времени могут быть представлены в различных форматах. Для абсолютных значений времени следует использовать YYYY-MM-DD HH:MM:SS
. Например можно увидеть все записи с 10:15 10 января 2023 года, выполнив:
$
journalctl -u shardmand@cluster0.service --since "2023-01-10 17:15:00"
Если компоненты вышеуказанного формата опущены, будут применены некоторые значения по умолчанию. Например, если дата не указана, предполагается текущая дата. Если компонент времени отсутствует, указывается «00:00:00» (полночь). Секунды также можно не указывать, чтобы по умолчанию подставлялось значение «00»:
$
journalctl -u shardmand@cluster0.service --since "2023-01-10" --until "2023-01-11 03:00"
Чтобы задать уровень детализации журнала для всех служб Shardman, укажите SDM_LOG_LEVEL
в файле конфигурации shardmand.