无法使用grok过滤日志

时间:2018-01-12 04:24:13

标签: elasticsearch logstash logstash-grok

我想用grok过滤我的日志,我已经浏览了很多文档,但是我找不到解决问题的方法。我有这样的日志,

2017-01-24|15:00:11|UpToDate.Editorial.Service.Topic.IcgDataIslandSaveUtil|1|[(null)]| - Step 0, Start saving data island. 0.0010006 seconds since last step, 0.0020005 seconds since start. 

,格式为,

date|time|class|level|user|log

我为此创建了一个conf文件,如下所示

input {
    beats {
        port => "5044"
    }
}
filter {
  grok {
    match => { "message" => "%{YEAR}-%{MONTHNUM}-%{MONTHDAY}|%{HOUR}:%{MINUTE}:%{SECOND}|%{GREEDYDATA:class}|%{NUMBER:level}|%{GREEDYDATA:user}|%{GREEDYDATA:log}\n" }
  }
}
output {
    elasticsearch {
        hosts => [ "localhost:9200" ]
    }
}

但它未能过滤掉这些细节,它只是索引整个日志。谁能指出我在这里做错了什么?任何帮助将非常感激。

1 个答案:

答案 0 :(得分:1)

你在模式中有特殊字符。使用此:

%{YEAR}-%{MONTHNUM}-%{MONTHDAY}\|%{HOUR}:%{MINUTE}:%{SECOND}\|%{GREEDYDATA:class}\|%{NUMBER:level}\|%{GREEDYDATA:user}\|%{GREEDYDATA:log}<br/>

我删除了&#39; \ n&#39;最后,它搞砸了我的解析。如果你再次运行grok模式问题,使用这个网站,它会有很大帮助:
http://grokconstructor.appspot.com/do/match