2014-05-07 102 views
1

我卡住了。我無法理解爲什麼grok在logstash下無法匹配一個簡單的正則表達式。 grok作爲一個獨立的作品很好。 唯一適用於我的模式是「。*」,其他一切都失敗了。logstash無法匹配grok篩選器

$ cat ./sample2-logstash.conf 
input { 
    stdin {} 
} 

filter { 
    grok { 
     match => [ "message1", "foo.*" ] 
     add_tag => [ "this_is_foo" ] 
     tag_on_failure => [ "STUPID_LOGSTASH" ] 
    } 
} 

output { 
    stdout { codec => json_lines } 
} 

下面是輸出:

$ echo "foo" |~/bin/logstash-1.4.0/bin/logstash -f ./sample2-logstash.conf 
{"message":"foo","@version":"1","@timestamp":"2014-05-07T00:32:49.915Z","host":"serega-sv","tags":["STUPID_LOGSTASH"]} 

看起來像我錯過了做logstash一些事情,因爲香草神交工作得很好:

$ cat grok.conf 
program { 
    file "./sample.log" 
    match { 
     pattern: "foo.*" 
     reaction: "LINE MATCHED! %{@LINE}" 
    } 
} 

平原神交的輸出:

$ echo "foo" > ./sample.log; grok -f grok.conf 
LINE MATCHED! foo 

謝謝!

回答

3

您的配置有錯誤。 grok匹配字段是message,而不是message1

然後,在logstash grok page有一個示例來展示如何使用grok。我認爲你有誤解。例如,如果你的日誌是

55.3.244.1 GET /index.html 15824 0.043 

爲logstash的神交模式是

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} 

對於%{IP:client},第一個參數(IP)是神交模式,第二個參數(客戶端)是場你想要把這個消息。

+0

只是想知道,爲什麼同樣的事情,工作只是甚至「MESSAGE1」很好,如果我改變? –

1

所有@Ben Lim說。文檔的非常下一節將展示如何語義適用於通用正則表達式語法:「FOO *」,「*」

filter { 
    grok { 
    match => [ "message", 
     "^(?<ip>\S+) (?<verb>\S+) (?<request>\S+) (?<bytes>\S+) (?<delay>\S+)$" 
    ] 
    } 
}