Управление журналами 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 вызывает через JNI | TODO: В одной из будущих версий этот журнал будет объединён с be.INFO |
be.gc.log | Журнал GC для JVM процесса BE | Управляется параметром запуска JVM JAVA_OPTS в be.conf |
Настройка журналов
Все перечисленные ниже параметры находятся в файле be.conf. Они управляют путём хранения журналов, сроком хранения, количеством сохраняемых файлов, размером каждого файла, правилами ротации и другими настройками.
| Параметр | Значение по умолчанию | Допустимые значения | Описание |
|---|---|---|---|
LOG_DIR | ENV(DORIS_HOME)/log | — | Путь хранения всех журналов. По умолчанию используется каталог log/ в каталоге развёртывания BE. Обратите внимание: это переменная окружения, поэтому имя параметра должно быть записано в верхнем регистре. |
sys_log_level | INFO | INFO, WARNING, ERROR, FATAL | Уровень журналирования для be.INFO. По умолчанию используется INFO. Менять его не рекомендуется, поскольку уровень INFO включает множество важных сообщений. |
sys_log_roll_num | 10 | — | Максимальное количество файлов для 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_mode | SIZE-MB-1024 | TIME-DAY, TIME-HOUR, SIZE-MB-nnn | Правило ротации для be.INFO и be.WARNING. По умолчанию используется SIZE-MB-1024: новый файл создаётся каждый раз, когда размер журнала достигает 1024 МБ. Также можно настроить ротацию по дням или часам. |
log_buffer_level | Не задано | Не задано или -1 | Режим вывода журналов BE. По умолчанию данные сбрасываются на диск асинхронно. При значении -1 журналы записываются на диск в реальном времени. Это несколько снижает производительность, но позволяет сохранить как можно больше последних записей при аварийном завершении BE. |
disable_compaction_trace_log | true | true, false | Отключает журналы трассировки операций Compaction. Значение по умолчанию: true, то есть трассировка отключена. При значении false выводятся журналы трассировки Compaction, которые помогают диагностировать проблемы с Compaction. |
aws_log_level | 0 | 0–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_second | 60 | — | Интервал в секундах, с которым выводится информация о ходе загрузки в S3. |
enable_debug_log_timeout_secs | 0 | — | Если значение больше 0, для диагностики выводятся подробные журналы работы движка выполнения Pipeline. По умолчанию отключено. |
sys_log_enable_custom_date_time_format | false | true, 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уровень vlog10, а затем выполнить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_logger | true | true, 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, чтобы избежать чрезмерного объёма журналов.