Logstash 将日期格式从YYYY/MM/DD HH:MM:SS格式转换为YYYY-MM-DD格式,用于nginx错误日志的日志存储

Logstash 将日期格式从YYYY/MM/DD HH:MM:SS格式转换为YYYY-MM-DD格式,用于nginx错误日志的日志存储,logstash,logstash-grok,logstash-configuration,Logstash,Logstash Grok,Logstash Configuration,我有以下格式的nginx错误日志:- 2015/09/30 22:19:38[错误]32317#0:*23[lua]回复。lua:61: handler():Cassandra错误:唯一检查期间出错:Cassandra 错误:连接被拒绝,客户端:127.0.0.1,服务器:,请求:“POST” /consumers/HTTP/1.1”,主机:“localhost:8001” 如前所述,我能够解析这些日志 我的过滤器配置如下所示:- filter { grok { match

我有以下格式的nginx错误日志:-

2015/09/30 22:19:38[错误]32317#0:*23[lua]回复。lua:61: handler():Cassandra错误:唯一检查期间出错:Cassandra 错误:连接被拒绝,客户端:127.0.0.1,服务器:,请求:“POST” /consumers/HTTP/1.1”,主机:“localhost:8001”

如前所述,我能够解析这些日志

我的过滤器配置如下所示:-

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\u day
),该字段的日期为
2015-09-30

最好将时间/日期保存在
日期类型的字段中。它使您能够使用Elasticsearch或Kibana

您可以使用解析日期

过滤器:

date {
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
}
"@timestamp" => "2015-09-30T20:19:38.000Z"
date {
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
    target => "log_day"
}
"log_day" => "2015-09-30T20:19:38.000Z"
结果:

date {
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
}
"@timestamp" => "2015-09-30T20:19:38.000Z"
date {
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
    target => "log_day"
}
"log_day" => "2015-09-30T20:19:38.000Z"
默认情况下,日期过滤器将结果放入
@timestamp
字段

避免默认映射到
@timestamp
字段,请指定目标字段,如“log_day”,如下所示:

过滤器:

date {
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
}
"@timestamp" => "2015-09-30T20:19:38.000Z"
date {
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
    target => "log_day"
}
"log_day" => "2015-09-30T20:19:38.000Z"
结果:

date {
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
}
"@timestamp" => "2015-09-30T20:19:38.000Z"
date {
    match => [ "mydate", "YY/MM/dd HH:mm:ss" ]
    target => "log_day"
}
"log_day" => "2015-09-30T20:19:38.000Z"
一旦有了类型为
date
的字段,就可以继续执行进一步的操作。您可以使用过滤器以特殊格式创建另一个日期字段

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

结果:
“日志日”=>“2015-09-30”

谢谢@hurb。这是预期的工作。我有一个后续问题。我们可以在不修改
@timestamp
字段的情况下执行此操作吗?现在,这将用日志中的日期覆盖
@timestamp
。当然,只需将
target=>“log\u day”
添加到日期筛选器中即可。见我编辑。