Logstash Grok-如何使用HTTPDERROR_日期模式解析@timestamp字段?

Logstash Grok-如何使用HTTPDERROR_日期模式解析@timestamp字段?,logstash,date-format,logstash-grok,logstash-configuration,filebeat,Logstash,Date Format,Logstash Grok,Logstash Configuration,Filebeat,我的日志文件具有以下模式: [Sun Oct 30 17:16:09 2016] [TRACE_HIGH] [TEST1] MessageTest1 [Sun Oct 30 17:16:10 2016] [TRACE_HIGH] [TEST2] MessageTest2 模式: \A\[%{HTTPDERROR_DATE}](?<message>(.|\r|\n)*) \A\[%{HTTPDERROR\u DATE}](?(.\r\n)*) 过滤器: filter { if

我的日志文件具有以下模式:

[Sun Oct 30 17:16:09 2016] [TRACE_HIGH] [TEST1] MessageTest1
[Sun Oct 30 17:16:10 2016] [TRACE_HIGH] [TEST2] MessageTest2
模式:

\A\[%{HTTPDERROR_DATE}](?<message>(.|\r|\n)*)
\A\[%{HTTPDERROR\u DATE}](?(.\r\n)*)
过滤器:

filter {
  if [type] == "mycustomlog" {
    grok {
      match => { "message" => "\A\[%{HTTPDERROR_DATE}](?<message>(.|\r|\n)*)"}
    }
    date {
      # Format: Wed Jan 13 11:50:44.327650 2016 (GROK: HTTPDERROR_DATE)
      match => [ "timestamp", "EEE MMM dd HH:mm:ss yyyy"]     
    }
    multiline {
      pattern => "^%{SYSLOG5424SD}%{SPACE}"
      what => "previous"
      negate=> true
    }
  }
} 
过滤器{
如果[type]=“mycustomlog”{
格罗克{
match=>{“message”=>“\A\[%{HTTPDERROR_DATE}](?(.|\r|\n)*)”)
}
日期{
#格式:2016年1月13日星期三11:50:44.327650(集团:HTTPDERROR_日期)
匹配=>[“时间戳”,“EEE MMM dd HH:mm:ss yyyy”]
}
多行{
模式=>“^%{SYSLOG5424SD}%{SPACE}”
什么=>“以前的”
否定=>true
}
}
} 
我试图将我的日期时间日志使用到@timestamp字段中,但我无法将此格式解析为@timestamp。为什么日期筛选器没有替换@timestamp值?

My@timestamp与日志行不同:

第[0]行

  • @时间戳:[11月2日星期三15:56:422016]
  • 信息:[11月2日星期三15:56:412016]

我将学习本教程:

使用:

Elasticsearch 2.2.x、Logstash 2.2.x和Kibana 4.4.x

Grok构造函数打印:

使用的grok模式,
\A\[%{HTTPDERROR\u DATE}](?(.\r\124;\ n)*)
不会从%{HTTPDERROR\u DATE}创建字段。
您需要有%{pattern:field},以便模式捕获的数据创建一个字段(cf)

所以在你的情况下是这样的:

\A\[%{HTTPDERROR_DATE:timestamp}](?<message>(.|\r|\n)*)
\A\[%{HTTPDERROR_DATE:timestamp}](?(.|\r |\n)*)

我认为Elasticsearch/Kibana@timestamp不支持“EEE-MMM-dd-HH:mm:ss-yyyy”格式。因此,您可以使用mutate处理器将时间戳转换为“dd/MMM/yyyy:HH:mm:ss.SSSSSS”格式

片段如下:

grok {
                match => [ "message", "\[%{DAY:day} %{MONTH:month} %{MONTHDAY:monthday} %{TIME:time} %{YEAR:year}\] %{GREEDYDATA:message}" ]
    }
   mutate {
                add_field => {
                                "timestamp" => "%{monthday}/%{month}/%{year}:%{time}"
        }
    }
   date {
                locale => "en"
                timezone => "UTC"
                match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss.SSSSSS"]
                target => "@timestamp"
                remove_field => ["timestamp", "monthday", "year", "month", "day", "time"]
    }

它可能会帮助某人。谢谢

要应用新字段,必须输入目标以覆盖该字段:

target=>“@timestamp”

举例来说:

 date {
      match => [ "timestamp", "dd MMM yyyy HH:mm:ss" ]
      target => "@timestamp"
      locale => "en"
      remove_field => [ "timestamp" ]
    }

你能显示日志的全部内容吗(来自Kibana或ES)?因为看起来问题不在于日期解析,而在于grok过滤器。测试时,它不起作用。(因此时间戳字段不存在,并且日期过滤器确实有一个字段要处理)。我不是正则表达式专家,但我认为问题来自第二部分,尝试匹配\r和\n时,我将仅尝试使用时间戳,然后返回更多information@baudsp对不起,我在图案上放了另一个版本,请用这个试试。.你放的(
\A\[%{HTTPDERROR\u DATE})(?(.\r\124;\ n)*)
)没有从
%{HTTPDERROR\u DATE}
创建字段。您需要有
%{HTTPDERROR_DATE:timestamp}