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

**URL:** <https://discuss.elastic.co/t/apache-request/56464>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [July 27, 2016, 1:21am UTC](https://discuss.elastic.co/t/apache-request/56464 "2016-07-27T01:21:01Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![nishida2](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nishida2/32/11078_2.png) [@nishida2](https://discuss.elastic.co/u/nishida2)\
**Post date:** [July 27, 2016, 1:21am UTC](https://discuss.elastic.co/t/apache-request/56464/1 "2016-07-27T01:21:01Z")

</div>

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 /"
> }
> 
> ```

---

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [July 27, 2016, 3:21am UTC](https://discuss.elastic.co/t/apache-request/56464/2 "2016-07-27T03:21:35Z")

</div>

> [@nishida2](#):
>
> if ["request"] == "/" {

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

```auto
if [request] == "/" {

```

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

> **[Accessing event data and fields | Logstash Reference \[8.11\] | Elastic](https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#logstash-config-field-references)**

---

<div class="post-metadata">

**Author:** ![nishida2](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nishida2/32/11078_2.png) [@nishida2](https://discuss.elastic.co/u/nishida2)\
**Post date:** [July 27, 2016, 4:13am UTC](https://discuss.elastic.co/t/apache-request/56464/3 "2016-07-27T04:13:00Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:46pm UTC](https://discuss.elastic.co/t/apache-request/56464/4 "2017-07-06T13:46:55Z")

</div>


