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:ss | syslog 风格(英文月份) | Oct 12 08:30:00 |
格式串数组按顺序尝试,把更具体、更少歧义的格式放在前面,能减少误判;例如同时存在 12/10/2026 与 10/12/2026 这类区域格式时,务必显式指定唯一格式。
源日志不带时区信息时,时区完全由 timezone 参数决定;漏写会按 Logstash 进程所在主机的时区解析,跨机房部署会带来数小时的整体偏移。