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.