You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fluent-Bit解析的Tomcat日志在Opensearch-Dashboards时间偏移问题排查

Tomcat日志解析时间偏移问题排查

技术栈

Opensearch + Opensearch-Dashboards + Fluent-Bit

目标

解析Apache Tomcat的catalina.out日志文件

配置

fluent-bit.conf

[SERVICE]
    Flush                 5
    Log_Level             info
    Parsers_File          parsers.conf


[INPUT]
    Name   tail
    Tag   tomcat.access
    Path    /u01/tomcat/apache-tomcat/logs/access*.txt
    Parser   tomcat_access

[INPUT]
    Name tail
    Tag tomcat.catalina
    Path /u01/tomcat/apache-tomcat/logs/catalina.out

[FILTER]
    Name multiline
    Match tomcat.catalina
    multiline.key_content log
    multiline.parser tomcat_catalina_multiline, java

[FILTER]
    Name     parser
    Match    tomcat.catalina
    Key_Name log
    Parser   tomcat_catalina_spring
    Preserve_key On

[OUTPUT]
    Name file
    Match tomcat.catalina
    Path /u01/fluent-bit
    Format out_file

[OUTPUT]
    Name                  opensearch
    Match                 tomcat*
    Host                  <host>
    Port                  <port>
    Suppress_Type_Name    On
    Index                 tomcat-test

parsers.conf

[PARSER]
    Name        tomcat_access
    Format      regex
    Regex       ^(?<host>\S+) (?<ident>\S+) (?<user>\S+) \[(?<time>.*)\] "(?<method>\S+) (?<url>\S+) (?<protocol>\S+)" (?<status>\S+) (?<size>\S+)$
    Time_Key    time
    Time_Format %d/%b/%Y:%H:%M:%S %z

[PARSER]
    Name        tomcat_catalina_spring
    Format      regex
    Regex       ^(?<time>\d+-\d+-\d+ \d+:\d+:\d+\.\d+)\s+(?<level>\S+) \d+ --- \[\s*(?<thread>[^\]]+)\] (?<context>\S+)\s+: (?<message>.*)$
    Time_Key    time
    Time_Format %Y-%m-%d %H:%M:%S.%L

[MULTILINE_PARSER]
    name          tomcat_catalina_multiline
    type          regex
    flush_timeout 500
    #
    # rules |   state name    | regex pattern                             | next state
    # ------|-----------------|--------------------------------------------------------
    rule      "start_state"      "/^(\d+-\d+-\d+ \d+:\d+:\d+\.\d+)(.*)$/"  "empty_row"
    rule      "empty_row"        "/^$/"                                    "error_row"
    rule      "error_row"        "/^.*$/"                                  "stacktrace"
    rule      "stacktrace"       "/^(\s*at .*|)$/"                         "stacktrace"

文件输出调试

为调试配置了文件输出,tomcat.catalina的日志内容显示正常,包含已解析的单行日志(带有level、thread、context、message字段)、多行日志及仅含\n的空行日志。

问题

最初在Opensearch-Dashboards的Discover页面无法找到已解析的单行日志,仅能看到多行日志和空行日志。相关字段已存在于tomcat-test索引的映射及索引模式的字段列表中,尝试刷新索引模式字段、删除重建索引、重启Fluent-Bit与Tomcat均未解决问题,且无报错信息。

更新

日志实际已写入索引,但时间偏移了3小时,调整时间过滤器后可在Dashboards中找到。现需排查该时间偏移问题的根本原因。


时间偏移问题排查方向

1. 日志解析器时区配置缺失

Tomcat输出的catalina.out日志时间为本地时区(比如UTC+3),但当前tomcat_catalina_spring解析器仅定义了时间格式,未指定时区。Fluent-Bit默认会将解析到的时间当作UTC时间存入Opensearch,若Dashboards使用本地时区显示,就会出现3小时的偏移。

解决方式:在tomcat_catalina_spring解析器中添加Time_Zone配置,指定Tomcat日志使用的时区:

[PARSER]
    Name        tomcat_catalina_spring
    Format      regex
    Regex       ^(?<time>\d+-\d+-\d+ \d+:\d+:\d+\.\d+)\s+(?<level>\S+) \d+ --- \[\s*(?<thread>[^\]]+)\] (?<context>\S+)\s+: (?<message>.*)$
    Time_Key    time
    Time_Format %Y-%m-%d %H:%M:%S.%L
    Time_Zone   UTC+3  # 替换为实际时区,如Asia/Shanghai对应东八区

2. Opensearch-Dashboards时区设置

检查Dashboards的时区配置:进入Stack Management > Advanced Settings,找到timezone选项,确认其是否与Tomcat日志时区一致,或是否设置为Browser(使用浏览器所在时区)。若两者时区差3小时,会直接导致显示偏移。

3. Fluent-Bit服务器系统时区

Fluent-Bit运行的服务器系统时区若与Tomcat日志时区不一致,也可能影响时间解析。可在Fluent-Bit的[SERVICE]段添加Time_Zone配置指定全局时区,或确保服务器系统时区与Tomcat日志时区一致。

4. 验证解析后的时间

查看文件输出的日志内容,对比@timestamp字段(Fluent-Bit默认存储解析后的时间)与日志原始时间,确认是否存在时区转换偏差。若@timestamp比原始时间少3小时,说明Fluent-Bit将本地时间当作UTC处理,添加Time_Zone配置即可解决。


内容的提问来源于stack exchange,提问作者manururu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:37:33