Logstash Grok过滤器 - 解析自定义文件

时间:2016-06-03 23:52:34

标签: logstash logstash-grok

我发现logstash不是我的过滤器的粉丝。戴上第二眼就好了。

首先 - 我的日志文件 - 具有以下条目,每个卷都有新行。

/vol/vol0/ 298844160 6916836 291927324 2%  /vol/vol0/

我的配置文件如下所示:

INPUT

file {
   type => "testing"
   path => "/opt/log_repo/ssh/netapp/*"
   tags => "netapp"
   start_position => "beginning"
   sincedb_path => "/dev/null"
}

FILTER

if [type] == "testing" {
   grok{
        match => [ "@message", "{UNIXPATH:volume}%{SPACE}%{INT:total}%{SPACE}%{INT:used}%{SPACE}%{INT:avail}%{SPACE}%{PROG:cap}%{SPACE}%{UNIXPATH:vols}"]
   }
}

输出

if [type] == "testing" {
     elasticsearch {
         action => "index"
         hosts => ["http://localhost:9200"]
         index => ["testing4-%{+YYYY.MM.dd}"]
     }
}

当我运行它时,它告诉我它有一个错误的配置文件。如果我将过滤器更改为:

match => [ "@message", "{UNIXPATH:volume}" ]

它使用卷名创建一个名为volume的新字段。我正在使用空间组件,因为日志不一致。有些卷在可用空间之间有4个空格,有些卷会有更多或更少,具体取决于卷名和大小。

为了实现此配置,我利用了以下网站: https://grokdebug.herokuapp.com/discover?# http://grokconstructor.appspot.com/do/constructionstep

仍在努力解决我所缺少的问题......任何帮助都将不胜感激。

更新:在添加以下建议后,它仍然不会创建新字段。

_index      string              
message     string              
type    string              
tags    string              
path    string              
@timestamp      date                
@version    string              
host    string              
_source     _source             
_id     string              
_type   string              
_score  

1 个答案:

答案 0 :(得分:1)

由于一个非常简单和愚蠢的原因,您的模式不会对样本日志进行限制 - 您在模式开始时缺少%。如果你要添加它,它就像一个魅力:

enter image description here

所以完整的过滤器是:

if [type] == "testing" {
   grok{
        match => [ "@message", "%{UNIXPATH:volume}%{SPACE}%{INT:total}%{SPACE}%{INT:used}%{SPACE}%{INT:avail}%{SPACE}%{PROG:cap}%{SPACE}%{UNIXPATH:vols}"]
   }
}