2014-09-24 97 views
0

我想配置logstash來管理我的各種日誌源,其中之一是Mongrel2。通過Mongrel2使用的格式是tnetstring,其中一個日誌消息將採取的形式鏈接grost過濾器模式爲logstash

86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#] 

我想寫我自己的神交模式來提取上述格式的某些字段。我嘗試提取主機時收到this question的幫助。所以,如果在grok-patterns我定義

M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*) 

然後在logstash的conf指定

filter { 
    grok { 
    match => [ "message", "%{M2HOST}" ] 
    } 
} 

它按預期工作。我現在遇到的問題是我想指定多個模式,例如M2HOST,我試圖在同一神交圖案定義其他的人M2ADDR等文件

M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*) 
M2ADDR ^(?:[^:]*\:){3}(?<address>[^,]*) 

和改變logstash的conf

filter { 
    grok { 
    match => [ "message", "%{M2HOST} %{M2ADDR}" ] 
    } 
} 

,但現在我只想找到錯誤_grokparsefailure

+0

在這裏你的問題是拼接,認爲用他們的正則表達式替換M2HOST和M2ADDR,你會得到'^(?:[^:] * \:){2}(? [^,] *)^(?:[^:] * \ :) {3}(?

[^,] *)'你的比賽中間有一個起跑線,顯然不能工作。使用pultiples ALIASES的主要想法是將正則表達式部分拆分爲重用它們,但不要將它們奇蹟般地合併。 – Tensibai 2014-09-24 14:56:02

+0

啊好的。我想要的是將M2HOST正則表達式應用於消息,然後將M2ADDR應用於消息。你知道正確的語法是什麼嗎? – 2014-09-24 14:57:43

+1

好吧,我會和你已經知道的grok測試工作,trynig匹配每個領域,一旦完成,你可能會分裂有趣的部分。這個例子我會說(測試)'(?:[^:] *:){2}(? [^,] *)[^:] * :(?

[^,] *)'would do – Tensibai 2014-09-24 15:00:06

回答

1

與其他問題,並與一些猜測值的名字您的樣品輸入完整的比賽將是:

(?:[^:]*:){2}(?<hostname>[^,]*)[^:]*:(?<address>[^,]*)[^:]*:(?<pid>[^#]*)[^:]*:(?<time>[^#]*)[^:]*:(?<method>[^,]*)[^:]*:(?<query>[^,]*)[^:]*:(?<protocol>[^,]*)[^:]*:(?<code>[^#]*)[^:]*:(?<bytes>[^#]*).*

生產:

{ 
    "hostname": [ 
    [ 
     "localhost" 
    ] 
    ], 
    "address": [ 
    [ 
     "192.168.33.1" 
    ] 
    ], 
    "pid": [ 
    [ 
     "57089" 
    ] 
    ], 
    "time": [ 
    [ 
     "1411396297" 
    ] 
    ], 
    "method": [ 
    [ 
     "GET" 
    ] 
    ], 
    "query": [ 
    [ 
     "/" 
    ] 
    ], 
    "protocol": [ 
    [ 
     "HTTP/1.1" 
    ] 
    ], 
    "code": [ 
    [ 
     "200" 
    ] 
    ], 
    "bytes": [ 
    [ 
     "145978" 
    ] 
    ] 
}