特殊日期格式的Logstash日期过滤器

时间:2015-08-18 10:04:32

标签: elasticsearch logstash logstash-grok

我试图将旧的日志文件存储在弹性和im使用logstash中。

日志中的时间戳具有以下格式:

13 AUG 2015 | 07:04:35 | .......

第一个问题是月份是大写的事实所以我复制了#34; MONTH"模式,因为它出现在grok模式和上层所有它:

原版MONTH:

MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b

我的大写" MONTHCAP":

MONTHCAP \b(?:JAN(?:UARY)?|FEB(?:RUARY)?|MAR(?:CH)?|APR(?:IL)?|MAY|JUN(?:E)?|JUL(?:Y)?|AUG(?:UST)?|SEP(?:TEMBER)?|OCT(?:OBER)?|NOV(?:EMBER)?|DEC(?:EMBER)?)\b

接下来我尝试做的是使用日期过滤器,因此弹性使用日志中的时间戳作为@timestamp字段而不是行存储在弹性中的时间:

date{
                match => ["MONTHDAY","dd","MONTHCAP","MMM","YEAR","yyyy","TIME","HH:mm:ss"]
    }

问题是我在尝试存储数据时遇到以下错误:

Error: Cannot register filter date plugin. The error reported is:
Illegal pattern component: O for pattern 'MONTHCAP'

其他信息: 这是我用来解析日志行的grok过滤器:

%{MONTHDAY} %{MONTHCAP} %{YEAR} \| %{TIME} \|

任何想法为什么我在使用thr模式时仍然会收到此错误的是' MMM' ? 谢谢!

1 个答案:

答案 0 :(得分:0)

在文档中,匹配仅适用于一个字段:

match => [ "logdate", "MMM dd YYY HH:mm:ss",
      "MMM  d YYY HH:mm:ss", "ISO8601" ]

它需要第一个与logdate字段匹配的解决方案。

您需要构建一个您的日期字段,然后才能进行日期过滤。

 match => [logdate, dd MMM yyyy HH:mm:ss]