2016-07-28 6 views
0

を使用して文字列からテキストを解析私はREQUESTフィールドの中からいくつかのテキストを解析したいとApacheのアクセスログを持っている:私がやりたいはlogstashフィルタ

GET /foo/bar?contentId=ABC&_=1212121212 HTTP/1.1" 

何抽出され、 12121212122を値に割り当てますが、値は接頭辞ABC & _に基づいています(したがって、if文などが必要です)。プレフィックスは、他の形態を取ることができ(例えば、DDD & _)

だから基本的に私は私がに基づいてIDを抽出するためにlogstashで右のフィルタを構築するために苦労してきた

if (prefix == ABC&_) 
    ABCID = 1212121212 
elseif (prefix == DDD&_) 
    DDDID = <whatever value> 
else 
    do nothing 

言いたいです接頭辞。どんな助けも素晴らしいだろう。

ありがとうございました

答えて

0

これはgrokフィルタを使用します。例えば

[email protected]:~/dev/logstash$ ./logstash-2.3.2/bin/logstash -f conf2 
Settings: Default pipeline workers: 8 
Pipeline main started 
GET /foo/bar?contentId=ABC&_=1212121212 HTTP/1.1" 
{ 
     "message" => "GET /foo/bar?contentId=ABC&_=1212121212 HTTP/1.1\"", 
     "@version" => "1", 
    "@timestamp" => "2016-07-28T15:59:12.787Z", 
      "host" => "pandaadb", 
     "prefix" => "ABC&_", 
      "id" => "1212121212" 
} 

これはあなたのプレフィックスとIDを解析し、あなたのサンプル入力です。

ここではifの必要はありません。なぜならGROKフィルタの正規表現がそれを処理するからです。

ただし、フィールドを異なるフィールドに配置する必要がある場合は、フィールドを分析して別のフィールドに追加できます。

ようなこの希望出力:私はそれについて移動する方法を示し期待し

filter { 
    grok { 
     match => {"message" => ".*contentId=%{GREEDYDATA:prefix}=%{NUMBER:id}"} 

    } 

    if [prefix] =~ "ABC" { 
     mutate { 
      add_field => {"ABCID" => "%{id}"} 
     } 
    } 

    if [prefix] =~ "DDD" { 
     mutate { 
      add_field => {"DDDID" => "%{id}"} 
     } 
    } 

} 

GET /foo/bar?contentId=ABC&_=1212121212 HTTP/1.1" 
{ 
     "message" => "GET /foo/bar?contentId=ABC&_=1212121212 HTTP/1.1\"", 
     "@version" => "1", 
    "@timestamp" => "2016-07-28T16:05:07.442Z", 
      "host" => "pandaadb", 
     "prefix" => "ABC&_", 
      "id" => "1212121212", 
     "ABCID" => "1212121212" 
} 
GET /foo/bar?contentId=DDD&_=1212121212 HTTP/1.1" 
{ 
     "message" => "GET /foo/bar?contentId=DDD&_=1212121212 HTTP/1.1\"", 
     "@version" => "1", 
    "@timestamp" => "2016-07-28T16:05:20.026Z", 
      "host" => "pandaadb", 
     "prefix" => "DDD&_", 
      "id" => "1212121212", 
     "DDDID" => "1212121212" 
} 

私はこのために使用されるフィルタは、そのように見えます。あなたのGROKの正規表現をテストするためにこれを使用することができます:

http://grokdebug.herokuapp.com/

お楽しみに!

アルテール

関連する問題