跳到主要内容

FE 日志管理

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

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

日志分类

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

  • fe.log

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

  • fe.warn.log

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

  • fe.audit.log

审计日志。用于记录通过这个 FE 节点执行的所有数据库操作记录。包括 SQL、DDL、DML 语句等。

  • fe.out

用于接收标准输出流和错误数据流的日志。比如 start 脚本中的 echo 命令输出等,或其他未被 log4j 框架捕获到的日志信息。通常作为运行日志的补充。少数情况下,需要查看 fe.out 的内容以获取更多信息。

  • fe.gc.log

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

日志配置

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

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

配置项默认值可选项说明
LOG_DIRENV(DORIS_HOME)/log所有日志的存放路径。默认为 FE 部署路径的 log/ 目录下。注意这是一个环境变量,配置名需大写。
sys_log_levelINFOINFO, WARN, ERROR, FATALfe.log 的日志等级。默认为 INFO。不建议修改,INFO 等级包含许多关键日志信息。
sys_log_roll_num10控制 fe.logfe.warn.log 一天内的最大文件数量。默认 10。当因为日志滚动或切分后,日志文件数量大于这个阈值后,老的日志文件将被删除
sys_log_verbose_modules可以设置指定的 Java package 下的文件开启 DEBUG 级别日志。请参阅 "开启 DEBUG 日志" 章节
sys_log_enable_compressfalsetrue, false是否开启历史 fe.logfe.warn.log 日志压缩。默认关闭。开启后,历史审计日志会使用 gzip 压缩归档
log_rollover_strategyageage, size日志保留策略,默认为 age,即根据时间策略保留历史日志。size 为按日志大小保留历史日志
sys_log_delete_age7d支持格式如 7d, 10h, 60m, 120s仅当 log_rollover_strategyage 时生效。控制 fe.logfe.warn.log 文件的保留天数。默认 7 天。会自动删除 7 天前的日志
audit_log_delete_age7d支持格式如 7d, 10h, 60m, 120s仅当 log_rollover_strategyage 时生效。控制 fe.audit.log 文件的保留天数。默认 30 天。会自动删除 30 天前的日志
info_sys_accumulated_file_size4仅当 log_rollover_strategysize 时生效。控制 fe.log 文件的累计大小。默认为 4GB。当累计日志大小超过这个阈值后,会删除历史日志文件
warn_sys_accumulated_file_size2仅当 log_rollover_strategysize 时生效。控制 fe.warn.log 文件的累计大小。默认为 2GB。当累计日志大小超过这个阈值后,会删除历史日志文件
audit_sys_accumulated_file_size4仅当 log_rollover_strategysize 时生效。控制 fe.audit.log 文件的累计大小。默认为 4GB。当累计日志大小超过这个阈值后,会删除历史日志文件
log_roll_size_mb1024控制 fe.log, fe.warn.log, fe.audit.log 单个文件最大大小。默认 1024MB。单个日志文件超过这个阈值后,会自动切分新的文件
sys_log_roll_intervalDAYDAY, HOUR控制 fe.logfe.warn.log 的滚动间隔。默认为 1 天。即每天生成一个新日志文件
audit_log_roll_num90控制 fe.audit.log 最大文件数量。默认 90。当因为日志滚动或切分后,日志文件数量大于这个阈值后,老的日志文件将被删除
audit_log_roll_intervalDAYDAY, HOUR控制 fe.audit.log 的滚动间隔。默认为 1 天。即每天生成一个新日志文件
audit_log_dirENV(DORIS_HOME)/log可以单独指定 fe.audit.log 的存放路径。默认为 FE 部署路径的 log/ 目录下。
audit_log_modules{"slow_query", "query", "load", "stream_load"}fe.audit.log 中的模块类型。默认包括慢查询、查询、导入、stream load。其中“查询”只所有 DDL、DML、SQL 操作。“慢查询”指这些操作执行时间超过 qe_slow_log_ms 阈值的操作。“导入”指 Broker Load。“stream load”指 stream load 操作。
qe_slow_log_ms5000当 DDL、DML、SQL 语句的执行时间超过这个阈值后,会在 fe.audit.logslow_query 模块中单独记录。默认 5000 ms
audit_log_enable_compressfalsetrue, false是否开启历史 fe.audit.log 日志压缩。默认关闭。开启后,历史审计日志会使用 gzip 压缩归档
sys_log_modeNORMALNORMAL, BRIEF, ASYNCFE 日志的输出模式,其中 NORMAL 为默认的输出模式,日志同步输出且包含位置信息。ASYNC 默认是日志异步输出且包含位置信息。 BRIEF 模式是日志异步输出但不包含位置信息。三种日志输出模式的性能依次递增

::: note 从 3.0.2 版本开始,sys_log_mode 配置默认改为 AYSNC。 :::

提示

sys_log_roll_num 控制的是一天的保留日志数量,而不是总数量,需要配合 sys_log_delete_age 共同确定总保留日志数量。

开启 DEBUG 日志

FE 的 Debug 级别日志可以通过修改配置文件开启,也可以通过界面或 API 在运行时打开。

  • 通过配置文件开启

    在 fe.conf 中添加配置项 sys_log_verbose_modules。举例如下:

    # 仅开启类 org.apache.doris.catalog.Catalog 的 Debug 日志
    sys_log_verbose_modules=org.apache.doris.catalog.Catalog

    # 开启包 org.apache.doris.catalog 下所有类的 Debug 日志
    sys_log_verbose_modules=org.apache.doris.catalog

    # 开启包 org 下所有类的 Debug 日志
    sys_log_verbose_modules=org

    添加配置项并重启 FE 节点,即可生效。

  • 通过 FE UI 界面

    通过 UI 界面可以在运行时修改日志级别。无需重启 FE 节点。在浏览器打开 FE 节点的 http 端口(默认为 8030),并登陆 UI 界面。之后点击上方导航栏的 Log 标签。

    通过 FE UI 界面

    我们在 Add 输入框中可以输入包名或者具体的类名,可以打开对应的 Debug 日志。如输入 org.apache.doris.catalog.Catalog 则可以打开 Catalog 类的 Debug 日志:

    通过 FE UI 界面

    你也可以在 Delete 输入框中输入包名或者具体的类名,来关闭对应的 Debug 日志。

    备注

    这里的修改只会影响对应的 FE 节点的日志级别。不会影响其他 FE 节点的日志级别。

  • 通过 API 修改

    通过以下 API 也可以在运行时修改日志级别。无需重启 FE 节点。

    curl -X POST -uuser:passwd fe_host:http_port/rest/v1/log?add_verbose=org.apache.doris.catalog.Catalog

    其中用户名密码为登陆 Doris 的 root 或 admin 用户。add_verbose 参数指定要开启 Debug 日志的包名或类名。若成功则返回:

    {
    "msg": "success",
    "code": 0,
    "data": {
    "LogConfiguration": {
    "VerboseNames": "org,org.apache.doris.catalog.Catalog",
    "AuditNames": "slow_query,query,load",
    "Level": "INFO"
    }
    },
    "count": 0
    }

    也可以通过以下 API 关闭 Debug 日志:

    curl -X POST -uuser:passwd fe_host:http_port/rest/v1/log?del_verbose=org.apache.doris.catalog.Catalog

    del_verbose 参数指定要关闭 Debug 日志的包名或类名。

容器环境日志配置

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

此时,可以通过 sh bin/start_fe.sh --console 命令前台启动 FE 进程,并将所有日志输出到标准输出流。

为了在同一标准输出流中区分不同日志类型,会在每条日志前添加不同的前缀以示区分。如:

RuntimeLogger 2024-06-24 00:05:21,522 INFO (main|1) [DorisFE.start():158] Doris FE starting...
RuntimeLogger 2024-06-24 00:05:21,530 INFO (main|1) [FrontendOptions.analyzePriorityCidrs():194] configured prior_cidrs value: 172.20.32.136/24
RuntimeLogger 2024-06-24 00:05:21,535 INFO (main|1) [FrontendOptions.initAddrUseIp():101] local address: /172.20.32.136.
RuntimeLogger 2024-06-24 00:05:21,740 INFO (main|1) [ConsistencyChecker.initWorkTime():106] consistency checker will work from 23:00 to 23:00
RuntimeLogger 2024-06-24 00:05:21,889 ERROR (main|1) [Util.report():128] SLF4J: Class path contains multiple SLF4J bindings.

不同的前缀说明如下:

  • StdoutLogger:标准输出流中的日志,对应 fe.out 中的内容。
  • StderrLogger:标准错误流中的日志,对应 fe.out 中的内容。
  • RuntimeLogger:对应 fe.log 中的日志。
  • AuditLogger:对应 fe.audit.log 中的日志。
  • 无前缀:对应 fe.gc.log 中的日志。

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

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