ApacheログのRequestによって挙動を変えたい


(Akihiro Nishida) #1

Apacheログを処理しようとしています。
Requestのトップディレクトリを抜き出そうとしていますが、トップへのアクセスはディレクトリがありません。
そのため、トップへのアクセスだけ例外処理をしようとしていますが、うまくいきません。
下記で
"first_path" => "/"
とするためのif文の書き方を教えてください。

テストデータ
> 10.236.75.4 - - [04/Jul/2016:23:59:09 +0900] "GET / HTTP/1.1" 200 41715 "-" "a10h
> m/1.0"

スクリプト(関連部分抜粋)

filter {
  grok {
    match => {
          "message" => "%{COMBINEDAPACHELOG}"
        }
  }
  if [ "request" ] == "/" {
    mutate {
      add_field => { "first_path" => "/" }
    }
  }
  else {
    mutate {
      add_field => { "first_path" => "not /" }
    }
  }

結果

{
        "message" => "10.236.75.4 - - [04/Jul/2016:23:59:09 +0900] \"GET / HTTP/ 1.1\" 200 41715 \"-\" \"a10hm/1.0\"",
       "@version" => "1",
     "@timestamp" => "2016-07-04T14:59:09.000Z",
           "host" => "ip-172-31-30-226",
       "clientip" => "10.236.75.4",
          "ident" => "-",
           "auth" => "-",
           "verb" => "GET",
        "request" => "/",
    "httpversion" => "1.1",
       "response" => "200",
          "bytes" => "41715",
       "referrer" => "\"-\"",
          "agent" => "\"a10hm/1.0\"",
     "first_path" => "not /"
}

(Jun Ohtani) #2

この部分を次のように置き換えると動くかと。request前後のダブルクォートとスペースがいらないです。

if [request] == "/" {

JSONのフィールドの名前を指定する方法についてはこちらに説明があります。

https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#logstash-config-field-references


(Akihiro Nishida) #3

スペースが不要とは盲点でした。
動きました。
どうもありがとうございました。


(system) #4