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_DIR | ENV(DORIS_HOME)/log | 所有日志的存放路径。默认为 FE 部署路径的 log/ 目录下。注意这是一个环境变量,配置名需大写。 | |
sys_log_level | INFO | INFO , WARN , ERROR , FATAL | fe.log 的日志等级。默认为 INFO。不建议修改,INFO 等级包含许多关键日志信息。 |
sys_log_roll_num | 10 | 控制 fe.log 和 fe.warn.log 一天内的最大文件数量。默认 10。当因为日志滚动或切分后,日志文件数量大于这个阈值后,老的日志文件将被删除 | |
sys_log_verbose_modules | 可以设置指定的 Java package 下的文件开启 DEBUG 级别日志。请参阅 "开启 DEBUG 日志" 章节 | ||
sys_log_enable_compress | false | true, false | 是否开启历史 fe.log 和 fe.warn.log 日志压缩。默认关闭。开启后,历史审计日志会使用 gzip 压缩归档 |
log_rollover_strategy | age | age , size | 日志保留策略,默认为 age ,即根据时间策略保留历史日志。size 为按日志大小保留历史日志 |
sys_log_delete_age | 7d | 支持格式如 7d, 10h, 60m, 120s | 仅当 log_rollover_strategy 为 age 时生效。控制 fe.log 和 fe.warn.log 文件的保留天数。默认 7 天。会自动删除 7 天前的日志 |
audit_log_delete_age | 7d | 支持格式如 7d, 10h, 60m, 120s | 仅当 log_rollover_strategy 为 age 时生效。控制 fe.audit.log 文件的保留天数。默认 30 天。会自动删除 30 天前的日志 |
info_sys_accumulated_file_size | 4 | 仅当 log_rollover_strategy 为 size 时生效。控制 fe.log 文件的累计大小。默认为 4GB。当累计日志大小超过这个阈值后,会删除历史日志文件 | |
warn_sys_accumulated_file_size | 2 | 仅当 log_rollover_strategy 为 size 时生效。控制 fe.warn.log 文件的累计大小。默认为 2GB。当累计日志大小超过这个阈值后,会删除历史日志文件 | |
audit_sys_accumulated_file_size | 4 | 仅当 log_rollover_strategy 为 size 时生效。控制 fe.audit.log 文件的累计大小。默认为 4GB。当累计日志大小超过这个阈值后,会删除历史日志文件 | |
log_roll_size_mb | 1024 | 控制 fe.log , fe.warn.log , fe.audit.log 单个文件最大大小。默认 1024MB。单个日志文件超过这个阈值后,会自动切分新的文件 | |
sys_log_roll_interval | DAY | DAY , HOUR | 控制 fe.log 和 fe.warn.log 的滚动间隔。默认为 1 天。即每天生成一个新日志文件 |
audit_log_roll_num | 90 | 控制 fe.audit.log 最大文件数量。默认 90。当因为日志滚动或切分后,日志文件数量大于这个阈值后,老的日志文件将被删除 | |
audit_log_roll_interval | DAY | DAY , HOUR | 控制 fe.audit.log 的滚动间隔。默认为 1 天。即每天生成一个新日志文件 |
audit_log_dir | ENV(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_ms | 5000 | 当 DDL、DML、SQL 语句的执行时间超过这个阈值后,会在 fe.audit.log 的 slow_query 模块中单独记录。默认 5000 ms | |
audit_log_enable_compress | false | true, false | 是否开启历史 fe.audit.log 日志压缩。默认关闭。开启后,历史审计日志会使用 gzip 压缩归档 |
sys_log_mode | NORMAL | NORMAL , BRIEF , ASYNC | FE 日志的输出模式,其中 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
标签。我们在 Add 输入框中可以输入包名或者具体的类名,可以打开对应的 Debug 日志。如输入
org.apache.doris.catalog.Catalog
则可以打开 Catalog 类的 Debug 日志:你也可以在 Delete 输入框中输入包名或者具体的类名,来关闭对应的 Debug 日志。
:::note 这里的修改只会影响对应的 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_logger | true | true, false | 是否启用文件日志。默认为 true 。当使用 --console 命令启动 FE 进程时,日志会同时输出到标准输出流,以及正常的日志文件中。当为 false 时,日志只会输出到标准输出流,不会再产生日志文件 |