首页/云/可观测性速查/Date 过滤器:统一时间戳
日志平台52 条

Date 过滤器:统一时间戳

把日志里的时间字符串解析成 @timestamp:格式串数组按序尝试,带时区信息才不漂移;解析失败会标记 _dateparsefailure。

可观测性速查云更新于 2026-10-13

date 过滤器是什么

date 过滤器把日志正文里的时间字符串解析成 Logstash 的 @timestamp 字段,让事件时间来自业务日志本身,而不是采集时刻。它按 match 数组里给出的格式依次尝试,命中即写入目标字段;解析失败会追加 _dateparsefailure 标签,事件本身不会丢弃。多机房场景下统一把时间转成 UTC 存储,展示层再按需转换,可以避免跨区域日志排序错乱。

基本信息

适用平台Logstash 7.x / 8.x,需安装 logstash-filter-date 插件
必需参数match 指定源字段与格式串数组
常用参数timezone 指定源时间时区,target 指定写入字段
失败标记_dateparsefailure,可用于后续分流告警

典型使用场景

  • 日志正文自带时间戳:让 @timestamp 反映业务发生时刻而不是采集时刻
  • 时区不一致的多机房:显式指定 timezone 后统一入库
  • 补采历史日志:按文件内部时间排序,避免整批数据挤在同一时刻
  • 格式迁移期兼容:数组里同时保留新老格式串,平滑过渡
  • 校验采集链路:配合 _dateparsefailure 统计解析失败比例

解析示例

解析示例
filter {
  date {
    match => [ "log_ts", "ISO8601", "yyyy-MM-dd HH:mm:ss,SSS", "MMM dd HH:mm:ss" ]
    timezone => "Asia/Shanghai"      # 源日志所用时区,按实际填写
    target => "@timestamp"            # 写入事件时间字段
  }
}
# 解析失败的文档带 _dateparsefailure 标签,可在后续 filter 中分流

常用格式串

格式串含义示例值
ISO8601标准带时区的时间格式2026-10-12T08:30:00+08:00
yyyy-MM-dd HH:mm:ss常见无时区格式2026-10-12 08:30:00
UNIX秒级时间戳1760000000
UNIX_MS毫秒级时间戳1760000000000
MMM d HH:mm:sssyslog 风格(英文月份)Oct 12 08:30:00
格式串数组按顺序尝试,把更具体、更少歧义的格式放在前面,能减少误判;例如同时存在 12/10/2026 与 10/12/2026 这类区域格式时,务必显式指定唯一格式。
源日志不带时区信息时,时区完全由 timezone 参数决定;漏写会按 Logstash 进程所在主机的时区解析,跨机房部署会带来数小时的整体偏移。

易错点

  • 漏写 timezone 时按主机时区解析,容器镜像默认 UTC 会让日志时间整体偏移,排序与关联全部失真
  • 格式串顺序写反(宽泛格式在前)会导致部分日志被错误解析,但事件照样入库,问题难以察觉
  • 解析失败只加 _dateparsefailure 标签不告警,采集端长期错误却无人发现,建议单独统计该标签比例
  • 把 target 写成新的自定义字段而不是 @timestamp 时,Kibana 时间轴仍按采集时间展示,排障时会误判先后顺序

数据来源与参考

  • Elastic 官方文档 · Date filter
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌