2016-10-06 3 views
1

LogstashとElasticSearchを使用してApache Webサーバの動作を監視しようとしています。現時点ではうまくいきますが、私のリクエストフィールドに関するより具体的な情報が必要です。 は、この時点で私のlogstash構成は次のとおりです。Logstash:URLパラメータをハッシュに変換する

{ 
     "message" => "255.254.230.10 - - [11/Dec/2013:00:01:45 -0800] \"GET /xampp/boreal%3A123456/status.php?pretty=true&test=boreal:%3A12345 HTTP/1.1\" 200 3891 \"http://cadenza/xampp/navi.php\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"", 
     "@version" => "1", 
     "@timestamp" => "2013-12-11T08:01:45.000Z", 
      ... 
     "request" => "/xampp/boreal%3A123456/status.php?pretty=true&test=boreal%3A12345", 
     "url_path" => "/xampp/boreal:123456/status.php", 
     "url_params" => "pretty=true&test=boreal%3A12345", 
"url_param_pretty" => "true", 
    "url_param_test" => "boreal%3A12345", 
      ...  
} 

と(夢の世界で:

255.254.230.10 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/boreal%3A123456/status.php?pretty=true&test=boreal%3A12345 HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0" 

この第一の構成の結果は次のとおりです。

filter { 
    grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } 
    grok { match => { "request" => [ "url", "%{URIPATH:url_path}%{URIPARAM:url_params}?" ]} } 
    urldecode{ field => "url_path" } 
    mutate { gsub => ["url_params","\?","" ] } 
    kv { 
    field_split => "&" 
    source => "url_params" 
    prefix => "url_param_" 
    } 
    date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } 
    geoip { source => "clientip" } 
    useragent { source => "agent" } 
} 

は、基本的なApacheのログを取ります)、私はurlパラメータのためのこの応答を持っています:

{ 
     ... 
     "request" => "/xampp/boreal%3A123456/status.php?pretty=true&test=boreal%3A12345", 
     "url_path" => "/xampp/boreal:123456/status.php", 
     "url_params" => { 
       "pretty" => "true", 
     "url_param_test" => "boreal:12345" 
     }, 
      ...  
} 

マイwhishes

  • url_paramsはハッシュ配列になります。
  • このハッシュの各キーは、それぞれ対応する値が

質問

  • urldecode値になりますのparam
  • の名前になります私は(私自身のプラグインを作成する必要がありません私はまだルビーに精通していません)?
  • 既存のプラグインが存在しますか(私は見つかりませんでした...おそらく悪い検索)?
  • プラグインなしでこれを行う方法ですか?

あなたの助けのおかげで(と私の英語のため申し訳ありません)

ルノー

ソリューション:ヴァルへ

おかげで、彼は解決策を見つけました。 「&」(26%)の文字が分割が正しいurl_params文字列にしている場合でも、このソリューションを使用して

grok { match => { "request" => [ "url", "%{URIPATH:url_path}%{URIPARAM:url_params}?" ]} } 
urldecode{ field => "url_path" } 
mutate { gsub => ["url_params","\?","" ] } 
kv { 
    field_split => "&" 
    source => "url_params" 
    target => "url_params_hash" 
} 
urldecode{ field => "url_params_hash" } 

:私はに私の設定を変更しました。

答えて

1

kvフィルタを使用すると、ほとんど問題なく処理できます。設定を少し変更する必要があります。

はまた、あなたがこのような何かを得るでしょうちょうどパス

urldecode{ field => "url_path" } 
urldecode{ field => "url_params" } 
mutate { gsub => ["url_params","\?","" ] } 
kv { 
    field_split => "&" 
    source => "url_params" 
    target => "url_params_hash" 
} 

のためのもう一つの後url_paramsのために別のurldecodeフィルタを追加する必要があります。

{ 
     "message" => "255.254.230.10 - - [11/Dec/2013:00:01:45 -0800] \"GET /xampp/boreal%3A123456/status.php?pretty=true&test=boreal:%3A12345 HTTP/1.1\" 200 3891 \"http://cadenza/xampp/navi.php\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"", 
     "@version" => "1", 
    "@timestamp" => "2013-12-11T08:01:45.000Z", 
"url_params_hash" => { 
     "pretty" => "true", 
      "test" => "boreal:12345" 
    } 
} 
+0

うん!それはかなりうまくいく。どうもありがとう。私は順序またはurldecodeを変更しました: "url_params"フィールドのurldecodeは "kv"フィルタの後に行われます。そうすることで、 "&"(%26)がparams文字列にあれば問題ありません。 –

+0

恐ろしい、それは助けてうれしい! – Val

+0

私の答えの代わりにあなたの質問を編集する必要があることに注意してください。 – Val

関連する問題