2016-10-18 5 views
0

logstashを使用して解析したい2つのURIを持つログを解析しようとしています。Logstash Grok分解をフィールドに格納する

この入力(スペースで区切られた2 URI)で

:私はこのGROKフィルタを使用しようとしている

{ 
    "source": { 
    "URI" : "https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html?toto", 
    "URIPROTO" : "https", 
    "URIHOST": "www.elastic.co", 
    "URIPATHPARAM": "/guide/en/logstash/current/plugins-filters-grok.html?toto", 

    ... 
    }, 
    "destination" : { 
    "URI" : "https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns", 
    "URIPROTO" : "https", 
    "URIHOST": "github.com", 
    "URIPATHPARAM": "/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns", 

    ... 
    } 
} 

私は次のドキュメントを取得したいと思い

https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html?toto https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns 

%{URI:source} %{URI:destination} 

しかし、次の結果が得られます。送信元と送信先の情報(URIPROTOURIHOSTが...)私の文書のルート・ノードで配列にマージされています

{ 
    "source": [ 
    "https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html?toto" 
    ], 
    "URIPROTO": [ 
    "https", 
    "https" 
    ], 

    ... 

    "URIHOST": [ 
    "www.elastic.co", 
    "github.com" 
    ], 
    "IPORHOST": [ 
    "www.elastic.co", 
    "github.com" 
    ], 
    "HOSTNAME": [ 
    "www.elastic.co", 
    "github.com" 
    ], 
    "IP": [ 
    null, 
    null 
    ], 

    ... 

    "destination": [ 
    "https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns" 
    ] 
} 

は、誰もがこのような状況をencouteredし、解決策を見つけていますか? ご協力いただきありがとうございます!

+0

Logstash Configurationを投稿してください。それから私たちはそこから行くことができます。 – Fairy

+0

表示されている出力のようですが、デフォルトではすべてのキャプチャ(フィールドに名前が付けられていないものも含む)が表示されるgrokデバッガからのものです。 –

答えて

1

%{URI}パターンは、URIのコンポーネントからフィールドを作成しません。分割したい場合は(1つのURIまたは2つのURIに対して)、独自のパターンを作成する必要があります。 URIHOSTは、2つのURIでユニークでなければなりません。「ポート」フィールドに、作成すること

%{URIPROTO:[foo][proto]}://(?:%{USER:[foo][user]}(?::[^@]*)[email protected])?(?:%{URIHOST:[foo][host]})?(?:%{URIPATHPARAM:[foo][pathparam]})? %{URIPROTO:[bar][proto]}://(?:%{USER:[bar][user]}(?::[^@]*)[email protected])?(?:%{URIHOST:[bar][host]})?(?:%{URIPATHPARAM:[bar][pathparam]})? 

注:URIの定義をコピーして、フィールドの割り当てを追加すると、あなたにこれを提供します。これを解決するには、私のパターンの各URIHOSTを次のように置き換えてください:

%{IPORHOST}(?::%{POSINT:[myField]})? 

各 'myField'に希望の宛先を使用してください。

+0

ありがとう@AlainCollins!従って、povidedの例では、[foo]をソースで、[bar]をデスティネーションで置き換えると、期待される結果が得られます。 – Antonin

関連する問題