Logstash 如何用 date 过滤器把日志时间解析为 @timestamp?

Logstash 的 date 过滤器把日志里的时间字符串解析为事件时间戳 @timestamp:match 指定字段与格式(如 dd/MMM/yyyy:HH:mm:ss Z)。本文给出配置示例、常见格式速查与时区注意事项。

最佳实践
Logstash 如何用 date 过滤器把日志时间解析为 @timestamp?封面

date 过滤器:指定日志中时间字段的位置与格式,解析成功后会替换事件的 @timestamp——ES 里的时间序列就按日志真实时间排序,而不是按采集时间。

基本配置

filter {
  grok {
    match => { "message" => "%{HTTPDATE:log_time}" }   # 先提取时间字符串
  }
  date {
    match => ["log_time", "dd/MMM/yyyy:HH:mm:ss Z"]    # 再解析为时间戳
  }
}

Nginx 时间 10/Oct/2000:13:55:36 +0000 对应格式 dd/MMM/yyyy:HH:mm:ss Z

常见格式速查

日志时间样例 match 格式
2024-01-15 10:30:00 yyyy-MM-dd HH:mm:ss
2024-01-15T10:30:00.123Z ISO8601(内置别名)
15/Jan/2024:10:30:00 +0800 dd/MMM/yyyy:HH:mm:ss Z
1705314600(Unix 秒) UNIX
1705314600123(毫秒) UNIX_MS

支持写多个格式按序尝试:match => ["ts", "ISO8601", "yyyy-MM-dd HH:mm:ss"]

时区注意

格式里没有时区信息时,用 timezone => "Asia/Shanghai" 显式指定——否则按 UTC 解析,时间会差 8 小时。

观测云对照

观测云 DataKit Pipeline 的时间字段处理同样支持自定义格式解析,time 字段会作为日志的标准时间在查看器中使用;多格式兼容与默认值处理都有内置函数。

常见问题(FAQ)

Q:解析失败会怎样? 事件带上 _dateparsefailure 标签继续流转,@timestamp 保留采集时间——可以在 Kibana 筛这个标签找问题日志。

Q:为什么要用日志时间而不是采集时间? 网络延迟/重试会让采集时间偏离真实发生时间,排障与统计都会错位。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台