在logstash中使用日期格式解析时间戳

时间:2014-08-19 07:48:58

标签: logging elasticsearch jodatime logstash grok

我正在解析couchdb日志中的时间戳。在stdout中看到整个时间戳正确处理,但是在使用Kibana在elasticsearch之上查看时会观察到_grokparsefailure。

Ex logline:

[Thu, 31 Jul 2014 17:14:28 GMT] [info] [<0.23047.647>] 10.30.50.48 - - HEAD /z_775-797_api_docs 200

我在解析日期格式时已按照以下链接进行操作:http://logstash.net/docs/1.4.2/filters/datehttp://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html

我的解析代码是:

grok{
      match => { "message" => "%{SYSLOG5424SD:Log_Time} \[info] %{SYSLOG5424SD:response_time} %{IPV4:ip_address} - - %{WORD:http_method} %{URIPATH} %{INT:file_value}" }
}

date{
match => ["Log_Time","[EEE, dd MMM YYYY HH:mm:ss zzz]"]
}

我的输出代码是:

output {
  elasticsearch { host => localhost }
  stdout { codec => json }
}

其中Log_Time = [Thu, 31 Jul 2014 17:14:28 GMT]且输出时间戳为 "@timestamp":"2014-07-31T17:14:28.000Z"

stdout下显示的数据是&#34; @ timestamp&#34;:&#34; 2014-07-31T17:14:28.000Z&#34;没有任何grok解析错误,但在Kibana中,解析的时间是以时间戳和_grokparseerror标记出现的。我无法理解为什么标准输出和Kibana之间存在这种差异。我尝试删除所有elasticsearch索引和.sincedb文件,但仍然存在错误。

如果您有任何想法,请提供帮助

1 个答案:

答案 0 :(得分:1)

Kibana只是一个观众! grok解析失败与Kibana无关。 您可能遇到的问题是您的某些日志格式不正确并导致解析失败。 然后,时间戳值将是日志事件当前时间。

请检查您的日志是否所有格式都是格式!或者,您可以尝试使用kibana日期选择器来选择您想要查看的日志时间,例如:2014-07-31。否则,kibana中的默认日期选择器将选择最近24小时的日志。

<强>更新 在您的评论中,您已经要求&#34;如何在logstash&#34;

中检测失败

当您的grok过滤器解析失败时,logstash将添加值为_grokparsefailure的标记。然后,您可以使用if条件来执行故障处理。

if "_grokparsefailure" in [tags] {
  # Failure handle
}