跳到主要内容

BE 日志管理

本文主要介绍 Backend(BE) 进程的日志管理。

该文档适用于 2.1.4 及之后的 Doris 版本。

日志分类

当使用 sh bin/start_be.sh --daemon 方式启动 BE 进程后,BE 日志目录下会产生以下类型的日志文件:

  • be.INFO

BE 进程运行日志。BE 的主日志文件。BE 进程所有等级(DEBUG、INFO、WARN、ERROR 等)的运行日志都会打印到这个日志文件中。

注意这个文件是一个软链,他指向的是当前最新的 BE 运行日志文件。

  • be.WARNING

BE 进程运行日志。但只会打印 WARN 级别以上的运行日志。be.WARNING 中的内容是 be.INFO 日志内容的子集。主要用于快速查看告警或错误级别日志。

注意这个文件是一个软链,他指向的是当前最新的 BE 告警日志文件。

  • be.out

用于接收标准输出流和错误数据流的日志。比如 start 脚本中的 echo 命令输出等,或其他未被 glog 框架捕获到的日志信息。通常作为运行日志的补充。

通常在 BE 异常宕机情况下,需要查看这个日志来获取异常堆栈。

  • jni.log

BE 进程通过 JNI 调用 Java 程序时,Java 程序打印的日志。

TODO:未来版本中,这部分日志会统一到 be.INFO 日志中。

  • be.gc.log

BE JVM 的 GC 日志。该日志的行为由 be.conf 中的 JVM 启动项 JAVA_OPTS 控制。

日志配置

包括配置日志的存放路径、保留时间、保留数目、大小等。

以下配置项均在 be.conf 文件中配置。

配置项默认值可选项说明
LOG_DIRENV(DORIS_HOME)/log所有日志的存放路径。默认为 BE 部署路径的 log/ 目录下。注意这是一个环境变量,配置名需大写。
sys_log_levelINFOINFO, WARNING, ERROR, FATALbe.INFO 的日志等级。默认为 INFO。不建议修改,INFO 等级包含许多关键日志信息。
sys_log_roll_num10控制 be.INFObe.WARNING 最大文件数量。默认 10。当因为日志滚动或切分后,日志文件数量大于这个阈值后,老的日志文件将被删除
sys_log_verbose_modules可以设置指定代码目录下的文件开启 DEBUG 级别日志。请参阅 "开启 DEBUG 日志" 章节
sys_log_verbose_level请参阅 "开启 DEBUG 日志" 章节
sys_log_verbose_flags_v请参阅 "开启 DEBUG 日志" 章节
sys_log_roll_modeSIZE-MB-1024TIME-DAY, TIME-HOUR, SIZE-MB-nnnbe.INFObe.WARNING 日志的滚动策略。默认为 SIZE-MB-1024,即每个日志达到 1024MB 大小后,生成一个新的日志文件。也可以设置按天或按小时滚动
log_buffer_level空 或 -1BE 日志输出模式。默认情况下,BE 日志会异步下刷到磁盘日志文件中。如果设置为 -1,则日志内容会实时下刷。实时下刷会影响日志性能,但可以尽可能多的保留最新的日志。如在 BE 异常宕机情况下,可以看到最后的日志信息。
disable_compaction_trace_logtruetrue, false默认为 true,即关闭 compaction 操作的 tracing 日志。如果为 false,则会打印和 Compaction 操作相关的 tracing 日志,用于排查问题。
aws_log_level0用于控制 aws sdk 的日志等级。默认为 0,表示关闭 aws sdk 日志。默认情况下,aws sdk 日志已经被 glog 主动捕获,并会正常打印主动捕获的日志。个别情况下,需要开启 aws sdk 日志以查看更多未被捕获的日志。不同数字代表不同日志等级:Off = 0, Fatal = 1, Error = 2, Warn = 3, Info = 4, Debug = 5, Trace = 6
s3_file_writer_log_interval_second60当执行 S3 Upload 操作时,会每隔 60 秒(默认)打印操作进度。
enable_debug_log_timeout_secs0当值大于 0 时,会打印 pipeline 执行引擎的一些详细执行日志。主要用于排查问题。默认情况下关闭
sys_log_enable_custom_date_time_formatfalse是否允许自定义日志中的日期格式(自 2.1.7 版本支持)
sys_log_custom_date_time_format%Y-%m-%d %H:%M:%S默认的日志日期自定义格式,仅当 sys_log_enable_custom_date_time_formattrue 时生效(自 2.1.7 版本支持)
sys_log_custom_date_time_ms_format,{:03d}默认的日志日期中的时间精度,仅当 sys_log_enable_custom_date_time_formattrue 时生效(自 2.1.7 版本支持)

开启 DEBUG 日志

静态配置

be.conf 中设置 sys_log_verbose_modulessys_log_verbose_level

sys_log_verbose_modules=plan_fragment_executor,olap_scan_node
sys_log_verbose_level=3

sys_log_verbose_modules 指定要开启的文件名,可以通过通配符 * 指定。比如:

sys_log_verbose_modules=*

表示开启所有 DEBUG 日志。

sys_log_verbose_level 表示 DEBUG 的级别。数字越大,则 DEBUG 日志越详细。取值范围在 1-10。

动态调整

通过以下 RESTful API 即可:

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

动态调整方式同样支持通配符,例如使用 module=*&level=10 将打开所有 BE vlog。但通配符与单独的模块名互不隶属,例如将 moduleA 的 vlog 级别调整为 10,再使用 module=*&level=-1,并不会关闭 moduleA 的 vlog。

注意:动态调整的配置不会被持久化,BE 重启后将会失效。

另外无论通过何种方式,只要模块不存在,GLOG 将会创建对应日志模块(没有实际影响),并不会返回错误。

容器环境日志配置

在某些情况下,通过容器环境(如 k8s)部署 FE 进程。所有日志需要通过标准输出流而不是文件进行输出。

此时,可以通过 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:对应 fe.log 中的日志。

后续版本会增加对 jni.log 的支持。

此外,针对容器环境还有一个额外配置参数:

配置项默认值可选项说明
enable_file_loggertruetrue, false是否启用文件日志。默认为 true。当使用 --console 命令启动 BE 进程时,日志会同时输出到标准输出流,以及正常的日志文件中。当为 false 时,日志只会输出到标准输出流,不会再产生日志文件