log_config
Секция log_config управляет тем, как серверный процесс YDB обрабатывает и управляет своими логами. Она позволяет настраивать уровни логирования для различных компонентов, а также глобальные форматы логов и методы вывода.
Примечание
Этот документ описывает конфигурацию прикладного и системного логирования. Для информации о логировании для целей аудита и обеспечения безопасности, см. Аудитный лог.
Обзор
Логирование является критически важной частью системы наблюдаемости YDB. Секция log_config позволяет настраивать различные аспекты логирования, включая:
- уровень логирования по умолчанию;
- уровни логирования для конкретных компонентов;
- формат вывода логов;
- интеграцию с syslog или внешними сервисами логирования.
Способы вывода логов
- В stderr: по умолчанию, YDB отправляет все логи в stderr.
- В файл: логи могут быть записаны в файл с помощью параметра
backend_file_name. - В syslog: при включении параметра
sys_log: trueлоги перенаправляются в системный журнал syslog и перестают выводиться в stderr. Логи отправляются с использованием сокета/dev/log. - В Unified Agent: при настройке секции
uaclient_configлоги отправляются в Unified Agent и перестают выводиться в stderr.
При одновременном включении sys_log и настройке uaclient_config, логи будут отправляться и в syslog, и в Unified Agent. Если вам нужно продолжать выводить логи в stderr при использовании других способов, активируйте sys_log_to_stderr: true.
Параметры конфигурации
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
default_level |
uint32 | 5 (NOTICE) |
Уровень логирования по умолчанию для всех компонентов. |
default_sampling_level |
uint32 | 7 (DEBUG) |
Уровень семплирования по умолчанию для всех компонентов. |
default_sampling_rate |
uint32 | 0 | Частота семплирования по умолчанию для всех компонентов. Если установлено значение N (где N > 0), примерно 1 из каждых N сообщений журнала с приоритетом между default_level и default_sampling_level будет записано в лог. Например, чтобы записывать каждое 10-е сообщение, установите значение 10. Значение 0 означает, что сообщения в этом диапазоне не будут записаны в лог (все они отбрасываются). |
sys_log |
bool | false | Включить логирование через syslog. |
sys_log_to_stderr |
bool | false | Копировать логи в stderr в дополнение к syslog. |
format |
string | "full" | Формат вывода логов. Возможные значения: "full", "short", "json". |
cluster_name |
string | — | Имя кластера для включения в записи логов. Поле cluster_name добавляется в логи только при использовании формата json или при отправке в Unified Agent. В форматах full или short это поле не отображается. |
allow_drop_entries |
bool | true | Разрешить отбрасывание записей логов, если система логирования перегружена. При включении этой опции записи логов буферизуются в памяти и записываются в вывод, когда накапливается 10 сообщений или истекает время, указанное в time_threshold_ms. Если буфер переполняется, сообщения с низким приоритетом могут быть отброшены, чтобы освободить место для сообщений с более высоким приоритетом. |
use_local_timestamps |
bool | false | Использовать локальный часовой пояс для временных меток логов (по умолчанию используется UTC). |
backend_file_name |
string | — | Имя файла для вывода логов. Если указано, логи записываются в этот файл. |
sys_log_service |
string | — | Имя сервиса для syslog. Соответствует полю tag в старом протоколе syslog RFC 3164 или полю app-name в современном протоколе RFC 5424. |
time_threshold_ms |
uint64 | 1000 | Если allow_drop_entries = true, определяет как часто, в миллисекундах, YDB пишет записи логов из буфера в вывод. |
ignore_unknown_components |
bool | true | Игнорировать запросы логирования от неизвестных компонентов. |
entry |
array | [] | Конфигурация уровня логирования и/или семплирования для конкретных компонентов YDB, cм. Объекты Entry ниже. |
uaclient_config |
object | — | Конфигурация для клиента Unified Agent, см. Объект UAClientConfig ниже. |
Объекты Entry
Поле entry содержит массив объектов со следующей структурой:
| Параметр | Тип | Описание |
|---|---|---|
component |
string | Имя компонента. C полным списком доступных компонентов можно ознакомиться на GitHub. |
level |
uint32 | Уровень логирования для этого компонента. |
sampling_level |
uint32 | Уровень семплирования для этого компонента. Работает аналогично default_sampling_level. |
sampling_rate |
uint32 | Частота семплирования для этого компонента. Работает аналогично default_sampling_rate. |
Объект UAClientConfig
Поле uaclient_config настраивает интеграцию с Unified Agent:
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
uri |
string | — | grpc URI сервера Unified Agent. |
shared_secret_key |
string | — | Путь к файлу с секретным ключом для аутентификации клиентских соединений. |
max_inflight_bytes |
uint64 | 100000000 | Максимальное количество байт в передаче при отправке данных. |
grpc_reconnect_delay_ms |
uint64 | — | Задержка между попытками переподключения в миллисекундах. |
grpc_send_delay_ms |
uint64 | — | Задержка между попытками отправки в миллисекундах. |
grpc_max_message_size |
uint64 | — | Максимальный размер сообщения gRPC. |
client_log_file |
string | — | Файл логов для самого клиента UA. |
client_log_priority |
uint32 | — | Уровень логирования для самого клиента UA. |
log_name |
string | — | Имя лога, которое передается в метаданных сессии. |
Уровни логирования
YDB использует следующие уровни логирования, перечисленные от наивысшей к наименьшей серьезности:
| Уровень | Числовое значение | Описание |
|---|---|---|
EMERG |
0 | Возможен сбой системы (например, отказ кластера). |
ALERT |
1 | Возможна деградация системы, компоненты системы могут выйти из строя. |
CRIT |
2 | Критическое состояние. |
ERROR |
3 | Некритическая ошибка. |
WARN |
4 | Предупреждение, на которое следует отреагировать и исправить, если оно не временное. |
NOTICE |
5 | Произошло событие, существенное для системы или пользователя. |
INFO |
6 | Отладочная информация для сбора статистики. |
DEBUG |
7 | Отладочная информация для разработчиков. |
TRACE |
8 | Очень подробная отладочная информация. |
Примеры
Базовая конфигурация
log_config:
default_level: 5 # NOTICE
format: "full"
Данная конфигурация выводит логи в stderr с уровнем логирования NOTICE и выше.
Конфигурация с выводом в файл
log_config:
default_level: 5 # NOTICE
format: "full"
backend_file_name: "/var/log/ydb/ydb.log"
Эта конфигурация отправляет логи в файл, сохраняя уровень логирования NOTICE по умолчанию.
Конфигурация с выводом в syslog
log_config:
default_level: 5 # NOTICE
sys_log: true
sys_log_service: "ydb"
format: "full"
Эта конфигурация отправляет логи в syslog с именем сервиса "ydb".
Настройка уровней логирования для отдельных компонентов
log_config:
default_level: 5 # NOTICE
entry:
- component: "SCHEMESHARD"
level: 7 # DEBUG
- component: "TABLET_MAIN"
level: 6 # INFO
backend_file_name: "/var/log/ydb/ydb.log"
Конфигурация семплирования
log_config:
default_level: 5 # NOTICE
default_sampling_level: 7 # DEBUG
default_sampling_rate: 10 # Логировать каждое 10-е сообщение между NOTICE и DEBUG
entry:
- component: "BLOBSTORAGE"
sampling_level: 8 # TRACE
sampling_rate: 100 # Логировать каждое 100-е сообщение между NOTICE и TRACE
Эта конфигурация настраивает семплирование логов. При настройках по умолчанию каждое 10-е сообщение с приоритетом между NOTICE и DEBUG будет записано в лог. Для компонента BLOBSTORAGE каждое 100-е сообщение с приоритетом между NOTICE и TRACE будет записано в лог.
Конфигурация формата JSON
log_config:
default_level: 5 # NOTICE
format: "json"
cluster_name: "production-cluster"
uaclient_config:
uri: "[fd53::1]:16400"
grpc_max_message_size: 4194304
log_name: "ydb_logs"
Эта конфигурация выводит логи в формате JSON и отправляет их в Unified Agent.
Примечания
- Уровни логирования указываются в конфигурации как числовые значения, а не строки. Используйте таблицу выше для сопоставления между числовыми значениями и их значениями.
- Если указан параметр
backend_file_name, логи записываются в этот файл. Если параметрsys_logимеет значение true, логи отправляются в системный регистратор. - Параметр
formatопределяет, как форматируются записи логов. Формат «full» включает всю доступную информацию, «short» предоставляет более компактный формат, а «json» выводит логи в формате JSON, который удобен для парсинга сервисами логирования. - Внутренний буфер логов имеет следующие ограничения по размеру:
- Общий размер по умолчанию: 10МБ (10 * 1024 * 1024 байт)
- Размер гранулы по умолчанию: 64КБ (1024 * 64 байт)
- Максимальный размер сообщения: 1КБ (1024 байт)