2015-10-06 57 views
3

我有以下形式的nginx的错误日志: -从YYYY/MM/DD HH转换日期格式YYYY-MM-DD SS格式在Logstash为nginx的错误日志

2015/09/30 22:19:38 [error] 32317#0: *23 [lua] responses.lua:61: handler(): Cassandra error: Error during UNIQUE check: Cassandra error: connection refused, client: 127.0.0.1, server: , request: "POST /consumers/ HTTP/1.1", host: "localhost:8001"

作为提到here我能解析这个日志。

我的过滤器配置就像下面: -

filter { 
    grok { 
     match => { 
     "message" => [ 
      "%{DATESTAMP:mydate} \[%{DATA:severity}\] (%{NUMBER:pid:int}#%{NUMBER}: \*%{NUMBER}|\*%{NUMBER}) %{GREEDYDATA:mymessage}", 
      "%{DATESTAMP:mydate} \[%{DATA:severity}\] %{GREEDYDATA:mymessage}", 
      "%{DATESTAMP:mydate} %{GREEDYDATA:mymessage}" 
     ] 
     } 
     add_tag => ["nginx_error_pattern"] 
    } 

    if ("nginx_error_pattern" in [tags]) {  
     grok { 
     match => { 
      "mymessage" => [ 
      "server: %{DATA:[request_server]}," 
      ] 
     }   
     } 

     grok { 
     match => { 
      "mymessage" => [ 
      "host: \"%{IPORHOST:[request_host]}:%{NUMBER:[port]}\"" 
      ] 
     }   
     } 

     grok { 
     match => { 
      "mymessage" => [ 
      "request: \"%{WORD:[request_method]} %{DATA:[request_uri]} HTTP/%{NUMBER:[request_version]:float}\"" 
      ] 
     }   
     } 

     grok { 
     match => { 
      "mymessage" => [ 
      "client: %{IPORHOST:[clientip]}", 
      "client %{IP:[clientip]} " 
      ] 
     }   
     } 

     grok { 
     match => { 
      "mymessage" => [ 
      "referrer: \"%{DATA:[request_referrer]}\"" 
      ] 
     }  
     }     
    } 
} 

mydate是具有形式的日期: -

"mydate" => "15/09/30 22:19:38" 

有人可以让我知道我可以添加一个字段(让我们说log_day)日期形式2015-09-30

回答

3

date类型的字段中保存时间/日期总是一个好主意。它使您能够通过Elasticsearch或Kibana执行complex range queries

您可以使用logstash's date filter解析日期。

筛选:

date { 
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ] 
} 

结果:

"@timestamp" => "2015-09-30T20:19:38.000Z" 

日期过滤器在默认情况下把结果在@timestamp领域。

避免默认映射@timestamp字段中,指定目标字段等 “log_day”,如以下:

过滤:

date { 
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ] 
    target => "log_day" 
} 

结果:

"log_day" => "2015-09-30T20:19:38.000Z" 

一旦你有一个date类型的字段,你可以继续进行进一步的操作。您可以使用date_formatter过滤器以特殊格式创建另一个日期字段。

date_formatter { 
     source => "log_day" 
     pattern => "YYYY-MM-dd" 
} 

结果:"log_day" => "2015-09-30"

+0

谢谢@hurb。这是按预期工作的。我有一个后续问题。我们可以在不修改'@ timestamp'字段的情况下做到这一点吗?现在这将覆盖'@ timestamp'和日志中的日期。 – tuk

+0

当然,只需将'target =>“log_day”'添加到日期过滤器即可。看我编辑。 – hurb

相关问题