# Logstashを使用したlambdaのログのパースについて

**URL:** <https://discuss.elastic.co/t/logstash-lambda/278017>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [July 7, 2021, 5:14am UTC](https://discuss.elastic.co/t/logstash-lambda/278017 "2021-07-07T05:14:24Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![t-nakata](https://avatars.discourse-cdn.com/v4/letter/t/8491ac/32.png) [@t-nakata](https://discuss.elastic.co/u/t-nakata)\
**Post date:** [July 7, 2021, 5:14am UTC](https://discuss.elastic.co/t/logstash-lambda/278017/1 "2021-07-07T05:14:24Z")

</div>

logstashで、AWSのlambdaのログをパースしたいです。

サンプル

```auto
START RequestId: cce511d2-861d-4b2c-8813-e6f09b6567bb Version: $LATEST                                                                                            
END RequestId: cce511d2-861d-4b2c-8813-e6f09b6567bb                                                                                                               
REPORT RequestId: cce511d2-861d-4b2c-8813-e6f09b6567bb Duration: 1.88 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 43 MB Init Duration: 130.17 ms
START RequestId: 44014e8f-ac46-4994-a93b-edd300cae5c8 Version: $LATEST                                                                   
END RequestId: 44014e8f-ac46-4994-a93b-edd300cae5c8                                                                                      
REPORT RequestId: 44014e8f-ac46-4994-a93b-edd300cae5c8 Duration: 1.60 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 43 MB

```

「REPORT」から始まる行のみを対象とし、「Init Duration～」は、ある場合とない場合が混在します。  
上記のログを例にすると、以下のように分割したいです。grokを使用しているのですが上手くいっておらず、ご教示頂けないでしょうか。

フィールド名 値  
requestid cce511d2-861d-4b2c-8813-e6f09b6567bb  
duration 1.88  
billed\_duration 2  
memory\_size 128  
max\_memory\_used 43  
init\_duration 130.17(存在する場合のみ)

grok定義を、以下のようにすると、init\_durationがある場合は良いのですが、無い場合にエラーになってしまいます。また、先頭が「REPORT」で始まる行以外は無視したいです。  
`REPORT RequestId: %{DATA:request_id} Duration: %{NUMBER:duration} ms Billed Duration: %{NUMBER:billed_duration} ms Memory Size: %{NUMBER:memory_size} MB Max Memory Used: %{NUMBER:max_memory_used} MB Init Duration: %{NUMBER:init_duration} ms`

以下を参考としております

> **[Grok filter plugin | Logstash Reference \[7.13\] | Elastic](https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html)**

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [July 7, 2021, 9:39am UTC](https://discuss.elastic.co/t/logstash-lambda/278017/2 "2021-07-07T09:39:25Z")

</div>

こんにちわ。

Logstashについてはあまり詳しくないので、正しいアプローチかどうかわかりませんが以下のようにすると動作確認ができました。

１．REPORTで始まる行以外は無視する ⇒ ifを使い、REPORTで始まらないものはDropする  
２．Init Durationがあるものとないものがある ⇒ Grokのmatchに複数のパターンを記載しておく

## 使用したLogstashの設定

コンソールに提示されたログのテキストを貼り付けて、コンソールに出力された内容を確認します。

```auto
input {
  stdin {
      codec => "line"
  }
}
filter {
  # 先頭行REPORT以外は無視する
  if [message] !~ /^REPORT/ {
    drop {}
  }

  grok {
    "match" => { "message" => [
      "REPORT RequestId: %{DATA:request_id} Duration: %{NUMBER:duration} ms Billed Duration: %{NUMBER:billed_duration} ms Memory Size: %{NUMBER:memory_size} MB Max Memory Used: %{NUMBER:max_memory_used} MB Init Duration: %{NUMBER:init_duration} ms",
      "REPORT RequestId: %{DATA:request_id} Duration: %{NUMBER:duration} ms Billed Duration: %{NUMBER:billed_duration} ms Memory Size: %{NUMBER:memory_size} MB Max Memory Used: %{NUMBER:max_memory_used} MB"
    ]}
  }
}
output {
  stdout {}
}

```

Grokのmatchでは、Init Durationがあるパターンの方を先に書いています。  
行にInit Durationがある場合には、このパターンが使用され、なければ次の行で指定しているInit Durationがないパターンの方が使用されるようです。

### 出力の確認

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/c/e/ce5220cfc00d9d6c8f6a06eb58a72dd999380be0.png)

### 確認した環境

- Logstash 7.13.2 (公式Dockerイメージを利用）

いかがでしょうか？

---

<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:** [August 4, 2021, 9:40am UTC](https://discuss.elastic.co/t/logstash-lambda/278017/3 "2021-08-04T09:40:20Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
