Logstash 日期格式YYYY/MM/DD HH:MM:ss是否有任何现有的grok{}模式?

Logstash 日期格式YYYY/MM/DD HH:MM:ss是否有任何现有的grok{}模式?,logstash,logstash-grok,Logstash,Logstash Grok,我在检查服务器上的nginx错误日志时发现,日志以日期开头,格式如下: 2015/08/30 05:55:20 i、 e.YYYY/MM/DD HH:MM:ss。我试图找到一个现有的grok日期模式,这可能有助于我快速解析它,但遗憾的是找不到任何这样的日期格式。最后,我不得不将模式写成: %{YEAR}/%{MONTHNUM}/%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? 我仍然希望是否有一个更短

我在检查服务器上的nginx错误日志时发现,日志以日期开头,格式如下:

2015/08/30 05:55:20
i、 e.
YYYY/MM/DD HH:MM:ss
。我试图找到一个现有的grok日期模式,这可能有助于我快速解析它,但遗憾的是找不到任何这样的日期格式。最后,我不得不将模式写成:

%{YEAR}/%{MONTHNUM}/%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? 
我仍然希望是否有一个更短的模式用于相同的?

否。您可以在github上找到。
datestamp
的注释似乎适合您的YYYY/MM/DD,但是
DATE\u US
DATE\u EU
是不同的

我建议使用grok选项重载
日期
模式,并使用
日期戳

DATE_YMD %{YEAR}/%{MONTHNUM}/%{MONTHDAY}
DATE %{DATE_US}|%{DATE_EU}|%{DATE_YMD}

或者只需将您的模式添加到模式文件中,并使用grok的patterns\u dir选项。

您也可以简单地包含简单而简短的joda.time模式

date {
  match => [ "timestamp", "yyyy/MM/dd HH:mm:ss" ]
  target => "@timestamp"
}

有用的参考链接:

成功的时间戳捕获策略由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
    过滤器解析原始时间戳

  • 要匹配2015/08/30 05:55:20,请使用:

    %{DATESTAMP:mytimestamp}
    
    在Logstash 6.5上测试

    资料来源:

    模式实际上必须包含
    [T]
    %{ISO8601\u时区}?
    ?看看你的一个例子,它们是不必要的。还有,为什么要选择秒数?同意你的看法。这些是没有必要的。但是有没有任何模式可以解析这个日期格式呢?但是如何将匹配的模式解析成一个合适的日期类型呢?我认为另一个答案应该在这里合并。谢谢!它也适用于开放发行版!:)
    %{DATESTAMP:mytimestamp}