Mongrel2 を含むさまざまなログ ソースを管理するために、logstash を構成しようとしています。Mongrel2 で使用される形式はtnetstring
で、ログ メッセージは次の形式になります。
86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#]
上記のフォーマットから特定のフィールドを抽出するために、独自の grok パターンを作成したいと考えています。上記のメッセージhereで正規表現をテストすることから始めました。正規表現は
^(?:[^:]*\:){2}([^,]*)
これは一致しlocalhost
ます。フォームで grok パターンと同じ正規表現を使用する場合
TEST ^(?:[^:]*\:){2}([^,]*)
MONGREL %{TEST:test}
でlogstashを構成します
filter {
grok {
match => [ "message", "%{MONGREL}" ]
}
}
同じ正規表現が一致し86:9:localhost
ます。どこが間違っているのかわかりませんか?テストに使用した正規表現エンジンは Python に基づいていますが、grok フィルターの正規表現は Onigurama に基づいていますか?
現在、次の入力を使用してgrokdebugでテストしています
86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#]
そして次のパターン
(?<hostname>^(?:[^:]*\:){2}([^,]*))
その結果
{
"hostname": [
[
"86:9:localhost"
]
]
}
欲しいところ
{
"hostname": [
[
"localhost"
]
]
}