Shardman — критически важная точка в пользовательской инфраструктуре, так как в ней хранятся все пользовательские данные. Это делает ведение журнала обязательным. Поэтому пользователь должен понимать, как работает ведение журнала в Shardman. Из-за сложности устройства Shardman поддерживаются журналы из нескольких источников: журналы демона shardmand, который управляет конфигурацией кластера, и журналы из экземпляров базы данных 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.
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.