Перейти к содержимому
Последнее обновление

Управление журналами BE

В этом документе описана система журналирования процесса Backend (BE) в Apache Doris: типы файлов журналов, настройка путей хранения и правил ротации, включение журналов DEBUG и вывод журналов в стандартный поток вывода в контейнерных средах, таких как Kubernetes.

Документ применим к Apache Doris 2.1.4 и более поздним версиям.

Сценарии использования​

СценарийРекомендуемый раздел
Узнать, какие файлы журналов создаёт процесс BEТипы журналов
Изменить путь хранения журналов, правила ротации или количество сохраняемых файловНастройка журналов
Диагностировать проблемы, для которых нужны журналы уровня DEBUGВключение журналов DEBUG
Развернуть BE в контейнерной среде (например, Kubernetes) и направить журналы в stdoutНастройка журналов в контейнерной среде
Найти трассировку стека после аварийного завершения BEПроверьте be.out (см. Типы журналов)

Типы журналов​

После запуска процесса BE командой sh bin/start_be.sh --daemon в каталоге журналов BE создаются следующие файлы:

Имя файлаСодержимоеПримечания
be.INFOОсновной журнал работы процесса BE. Включает все уровни: DEBUG, INFO, WARN, ERRORСимволическая ссылка на текущий файл журнала работы BE
be.WARNINGЗаписи о работе процесса только уровня WARN и выше. Подмножество be.INFOСимволическая ссылка на текущий файл журнала предупреждений BE. Удобна для быстрого просмотра предупреждений и ошибок
be.outСообщения из стандартного потока вывода (stdout) и стандартного потока ошибок (stderr), например вывод echo в скрипте запуска и сообщения, не перехваченные библиотекой glogПри аварийном завершении BE этот файл обычно содержит трассировку стека
jni.logЖурналы Java-программ, которые BE вызывает через JNITODO: В одной из будущих версий этот журнал будет объединён с be.INFO
be.gc.logЖурнал GC для JVM процесса BEУправляется параметром запуска JVM JAVA_OPTS в be.conf

Настройка журналов​

Все перечисленные ниже параметры находятся в файле be.conf. Они управляют путём хранения журналов, сроком хранения, количеством сохраняемых файлов, размером каждого файла, правилами ротации и другими настройками.

ПараметрЗначение по умолчаниюДопустимые значенияОписание
LOG_DIRENV(DORIS_HOME)/log—Путь хранения всех журналов. По умолчанию используется каталог log/ в каталоге развёртывания BE. Обратите внимание: это переменная окружения, поэтому имя параметра должно быть записано в верхнем регистре.
sys_log_levelINFOINFO, WARNING, ERROR, FATALУровень журналирования для be.INFO. По умолчанию используется INFO. Менять его не рекомендуется, поскольку уровень INFO включает множество важных сообщений.
sys_log_roll_num10—Максимальное количество файлов для be.INFO и be.WARNING. По умолчанию: 10. Если при ротации или разделении журналов количество файлов превышает этот порог, старые журналы удаляются.
sys_log_verbose_modulesНе задано—Указывает файлы исходного кода, для которых нужно включить журналы уровня DEBUG. Подробнее см. Включение журналов DEBUG.
sys_log_verbose_levelНе задано—Уровень детализации журналов DEBUG. Подробнее см. Включение журналов DEBUG.
sys_log_verbose_flags_vНе задано—Соответствует FLAGS_v в glog. Используется для глобального управления детализацией журналов DEBUG. Подробнее см. Включение журналов DEBUG.
sys_log_roll_modeSIZE-MB-1024TIME-DAY, TIME-HOUR, SIZE-MB-nnnПравило ротации для be.INFO и be.WARNING. По умолчанию используется SIZE-MB-1024: новый файл создаётся каждый раз, когда размер журнала достигает 1024 МБ. Также можно настроить ротацию по дням или часам.
log_buffer_levelНе заданоНе задано или -1Режим вывода журналов BE. По умолчанию данные сбрасываются на диск асинхронно. При значении -1 журналы записываются на диск в реальном времени. Это несколько снижает производительность, но позволяет сохранить как можно больше последних записей при аварийном завершении BE.
disable_compaction_trace_logtruetrue, falseОтключает журналы трассировки операций Compaction. Значение по умолчанию: true, то есть трассировка отключена. При значении false выводятся журналы трассировки Compaction, которые помогают диагностировать проблемы с Compaction.
aws_log_level00–6Управляет уровнем журналирования AWS SDK. Значение по умолчанию: 0 (отключено). По умолчанию glog уже перехватывает и выводит журналы AWS SDK; включайте этот параметр только для просмотра сообщений, которые не были перехвачены. Соответствие уровней: Off=0, Fatal=1, Error=2, Warn=3, Info=4, Debug=5, Trace=6.
s3_file_writer_log_interval_second60—Интервал в секундах, с которым выводится информация о ходе загрузки в S3.
enable_debug_log_timeout_secs0—Если значение больше 0, для диагностики выводятся подробные журналы работы движка выполнения Pipeline. По умолчанию отключено.
sys_log_enable_custom_date_time_formatfalsetrue, falseРазрешает настройку формата даты в журналах (поддерживается начиная с версии 2.1.7).
sys_log_custom_date_time_format%Y-%m-%d %H:%M:%S—Пользовательский формат даты в журналах. Действует только при значении sys_log_enable_custom_date_time_format, равном true (поддерживается начиная с версии 2.1.7).
sys_log_custom_date_time_ms_format,{:03d}—Пользовательский формат миллисекундной части даты в журналах. Действует только при значении sys_log_enable_custom_date_time_format, равном true (поддерживается начиная с версии 2.1.7).

Включение журналов DEBUG​

BE поддерживает два способа включения журналов DEBUG:

  • Статическая настройка: задайте параметры в be.conf и перезапустите BE, чтобы изменения вступили в силу. Настройки сохраняются после перезапуска.
  • Динамическое изменение: измените параметры во время работы через RESTful API без перезапуска. Настройки не сохраняются и теряются после перезапуска BE.

Статическая настройка​

Задайте sys_log_verbose_modules и sys_log_verbose_level в be.conf:

sys_log_verbose_modules=plan_fragment_executor,olap_scan_node
sys_log_verbose_level=3

Описание параметров:

ПараметрНазначение
sys_log_verbose_modulesУказывает имена исходных файлов, для которых нужно включить DEBUG. Разделяйте имена файлов запятыми. Поддерживается подстановочный знак *. Например, sys_log_verbose_modules=* включает журналы DEBUG для всех модулей.
sys_log_verbose_levelУровень детализации DEBUG. Допустимый диапазон: от 1 до 10. Чем выше значение, тем подробнее журналы.
sys_log_verbose_flags_vСоответствует FLAGS_v в glog и глобально управляет детализацией журналов. Сообщения VLOG(n) выводятся только при n <= FLAGS_v, что позволяет точнее управлять выводом. Область действия этого параметра не ограничивается sys_log_verbose_modules.

В большинстве случаев достаточно настроить sys_log_verbose_modules и sys_log_verbose_level. Задавайте sys_log_verbose_flags_v, только если некоторые отладочные сообщения не появляются, хотя должны.

Динамическое изменение​

Начиная с Doris 2.1, журналы DEBUG в BE можно настраивать динамически через RESTful API:

curl -X POST "http://<be_host>:<webport>/api/glog/adjust?module=<module_name>&level=<level_number>"

Параметры:

  • <be_host>: адрес хоста узла BE.
  • <webport>: HTTP-порт BE. Значение по умолчанию: 8040.
  • <module_name>: имя настраиваемого модуля (имя исходного файла). Поддерживается подстановочный знак *.
  • <level_number>: уровень детализации DEBUG. Значение -1 отключает журналирование DEBUG.

Особенности использования:

  • Настройки не сохраняются: динамические изменения теряются после перезапуска BE. После перезапуска их необходимо задать заново.
  • Подстановочные знаки и отдельные модули настраиваются независимо: например, если сначала установить для moduleA уровень vlog 10, а затем выполнить module=*&level=-1, vlog для moduleA не отключится.
  • Имена модулей не проверяются: независимо от способа настройки, если модуль не существует, glog создаёт соответствующий модуль журналирования (без какого-либо фактического эффекта) и не возвращает ошибку.

Настройка журналов в контейнерной среде​

При развёртывании BE в контейнерных средах, таких как Kubernetes, обычно требуется направлять все журналы в стандартный поток вывода вместо файлов, чтобы платформа оркестрации контейнеров могла собирать их централизованно.

Запуск​

Используйте параметр --console, чтобы запустить процесс BE на переднем плане и направить все журналы в стандартный поток вывода:

sh bin/start_be.sh --console

Описание префиксов журналов​

Поскольку журналы разных типов направляются в один стандартный поток вывода, BE добавляет к каждой записи префикс, позволяющий различать их. Пример вывода:

RuntimeLogger W20240624 00:36:46.325274 1460943 olap_server.cpp:710] Have not get FE Master heartbeat yet
RuntimeLogger I20240624 00:36:46.325999 1459644 olap_server.cpp:208] tablet checkpoint tasks producer thread started
RuntimeLogger I20240624 00:36:46.326066 1460954 olap_server.cpp:448] begin to produce tablet meta checkpoint tasks.
RuntimeLogger I20240624 00:36:46.326093 1459644 olap_server.cpp:213] tablet path check thread started
RuntimeLogger I20240624 00:36:46.326190 1459644 olap_server.cpp:219] cache clean thread started
RuntimeLogger I20240624 00:36:46.326336 1459644 olap_server.cpp:231] path gc threads started. number:1
RuntimeLogger I20240624 00:36:46.326643 1460958 olap_server.cpp:424] try to start path gc thread!

Значение префиксов:

ПрефиксСоответствующий журнал
RuntimeLoggerЗаписи из be.INFO

Поддержка префиксов для jni.log будет добавлена в одной из будущих версий.

Настройки для контейнерной среды​

ПараметрЗначение по умолчаниюДопустимые значенияОписание
enable_file_loggertruetrue, falseВключает дополнительную запись журналов в файлы. Значение по умолчанию: true. Это означает, что при запуске BE с --console журналы записываются и в stdout, и в файлы. При значении false журналы выводятся только в stdout, а файлы журналов не создаются.

Часто задаваемые вопросы​

Вопрос: BE аварийно завершился, но в be.INFO нет явной трассировки стека​

Проверьте be.out. Трассировка стека при аварийном завершении BE обычно записывается в этот файл.

Вопрос: настройки журналов не применяются после редактирования be.conf​

Для применения статических настроек необходимо перезапустить BE. Чтобы изменить настройки немедленно, используйте RESTful API, описанный в разделе Динамическое изменение.

Вопрос: динамически заданный уровень vlog теряется после перезапуска​

Динамические изменения не сохраняются. Задайте их заново после перезапуска или запишите в be.conf.

Вопрос: после включения журналов DEBUG их объём слишком велик, и места на диске не хватает​

Уменьшите sys_log_verbose_level, сузьте область действия sys_log_verbose_modules или измените sys_log_roll_num, чтобы управлять количеством сохраняемых файлов.

Вопрос: в контейнерной среде журналы не выводятся в stdout​

Убедитесь, что BE запущен командой sh bin/start_be.sh --console. Чтобы отключить запись журналов в файлы, установите enable_file_logger в false.

Вопрос: как диагностировать проблемы с AWS SDK​

Временно повысьте aws_log_level (например, до 4 или 5), а после диагностики верните значение 0, чтобы избежать чрезмерного объёма журналов.