日期格式 YYYY/MM/DD HH:mm:ss 是否存在现有的 grok{} 模式?
Is there any existing grok{} pattern for date format YYYY/MM/DD HH:mm:ss?
我正在检查我们服务器上的 nginx 错误日志,发现它们以日期格式开头:
2015/08/30 05:55:20
即YYYY/MM/DD HH:mm:ss
。我试图找到一个现有的 grok 日期模式,它可以帮助我快速解析它,但遗憾的是找不到任何这样的日期格式。最终,我不得不将模式写为:
%{YEAR}/%{MONTHNUM}/%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
我仍然希望是否有相同的更短的模式?
没有。您在 github 上找到 included patterns。 datestamp
的评论似乎适合您的 YYYY/MM/DD,但 DATE_US
和 DATE_EU
不同。
我建议使用 grok 选项 patterns_dir 重载 DATE
模式并使用 DATESTAMP
。
DATE_YMD %{YEAR}/%{MONTHNUM}/%{MONTHDAY}
DATE %{DATE_US}|%{DATE_EU}|%{DATE_YMD}
或者只是将您的模式添加到模式文件中并使用 grok 的 patterns_dir 选项。
您也可以简单地包含简单而简短的 joda.time 模式。
date {
match => [ "timestamp", "yyyy/MM/dd HH:mm:ss" ]
target => "@timestamp"
}
有帮助link供参考:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
成功的时间戳捕获策略由 3 件事组成
- 原始日志中的精度和时区。更改您的 nginx 时间戳日志格式。
使用$msec
捕捉毫秒。否则无法准确排序。
log_format custom '[$msec] [$remote_addr] [$remote_user] '
'"$request" $status '
'"$http_referer" "$http_user_agent"';
- 原始时间戳。使用贪婪匹配将原始数据捕获到字段中。
使用 GREEDYDATA:
grok {
match => { "message" => "\[%{GREEDYDATA:raw_timestamp}\] %{GREEDYDATA:message}" }
overwrite => [ "message" ]
}
- 已解析的时间戳。使用
date
过滤器解析原始时间戳。
date {
match => [ "timestamp", "yyyy/MM/dd HH:mm:ss.S z" ]
target => "@timestamp"
}
要匹配 2015/08/30 05:55:20,请使用:
%{DATESTAMP:mytimestamp}
在 Logstash 6.5 上测试
来源:
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
我正在检查我们服务器上的 nginx 错误日志,发现它们以日期格式开头:
2015/08/30 05:55:20
即YYYY/MM/DD HH:mm:ss
。我试图找到一个现有的 grok 日期模式,它可以帮助我快速解析它,但遗憾的是找不到任何这样的日期格式。最终,我不得不将模式写为:
%{YEAR}/%{MONTHNUM}/%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
我仍然希望是否有相同的更短的模式?
没有。您在 github 上找到 included patterns。 datestamp
的评论似乎适合您的 YYYY/MM/DD,但 DATE_US
和 DATE_EU
不同。
我建议使用 grok 选项 patterns_dir 重载 DATE
模式并使用 DATESTAMP
。
DATE_YMD %{YEAR}/%{MONTHNUM}/%{MONTHDAY}
DATE %{DATE_US}|%{DATE_EU}|%{DATE_YMD}
或者只是将您的模式添加到模式文件中并使用 grok 的 patterns_dir 选项。
您也可以简单地包含简单而简短的 joda.time 模式。
date {
match => [ "timestamp", "yyyy/MM/dd HH:mm:ss" ]
target => "@timestamp"
}
有帮助link供参考:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
成功的时间戳捕获策略由 3 件事组成
- 原始日志中的精度和时区。更改您的 nginx 时间戳日志格式。
使用$msec
捕捉毫秒。否则无法准确排序。
log_format custom '[$msec] [$remote_addr] [$remote_user] '
'"$request" $status '
'"$http_referer" "$http_user_agent"';
- 原始时间戳。使用贪婪匹配将原始数据捕获到字段中。
使用 GREEDYDATA:
grok {
match => { "message" => "\[%{GREEDYDATA:raw_timestamp}\] %{GREEDYDATA:message}" }
overwrite => [ "message" ]
}
- 已解析的时间戳。使用
date
过滤器解析原始时间戳。
date {
match => [ "timestamp", "yyyy/MM/dd HH:mm:ss.S z" ]
target => "@timestamp"
}
要匹配 2015/08/30 05:55:20,请使用:
%{DATESTAMP:mytimestamp}
在 Logstash 6.5 上测试
来源: https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns