

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 設定可能なパーサータイプのプロセッサ
<a name="CloudWatch-Logs-Transformation-Configurable"></a>

このセクションでは、ログイベントトランスフォーマーで使用できる設定可能なデータパーサープロセッサについて説明します。

**Contents**
+ [parseJSON](#CloudWatch-Logs-Transformation-parseJSON)
+ [grok](#CloudWatch-Logs-Transformation-Grok)
  + [Grok の例](#Grok-Examples)
    + [例 1: grok を使用して非構造化ログからフィールドを抽出する](#Grok-Example1)
    + [例 2: grok を parseJSON と組み合わせて使用し、JSON ログイベントからフィールドを抽出する](#Grok-Example3)
    + [例 3: FIELD\$1NAME に点線注釈が付いた Grok パターン](#Grok-Example4)
  + [サポートされている grok パターン](#Grok-Patterns)
    + [一般的なログ形式の例](#Common-Log-Examples)
      + [Apache ログの例](#Apache-Log-Example)
      + [NGINX ログの例](#NGINX-Log-Example)
      + [Syslog Protocol (RFC 5424) ログの例](#syslog5424-Log-Example)
+ [csv](#CloudWatch-Logs-Transformation-csv)
+ [parseKeyValue](#CloudWatch-Logs-Transformation-parseKeyValue)

## parseJSON
<a name="CloudWatch-Logs-Transformation-parseJSON"></a>

**parseJSON** プロセッサは JSON ログイベントを解析し、抽出された JSON キーと値のペアを送信先に挿入します。送信先を指定しない場合、プロセッサはキーと値のペアをルートノードに配置します。`parseJSON` を最初のプロセッサとして使用する場合は、`@message` をソースフィールドとして使用してログイベント全体を解析する必要があります。最初の JSON 解析後、後続のプロセッサで特定のフィールドを操作できます。

元の `@message` コンテンツは変更されず、新しいキーがメッセージに追加されます。


| フィールド | 説明 | 必須? | デフォルト | 制限 | 
| --- | --- | --- | --- | --- | 
|  ソース | 解析されるログイベントのフィールドへのパス。ドット表記を使用して子フィールドにアクセスします。例: store.book |  いいえ | `@message`  | 最大長: 128 ネストされたキーの最大深度: 3 | 
|  destination | 解析された JSON の送信先フィールド |  いいえ | `Parent JSON node`  | 最大長: 128 ネストされたキーの最大深度: 3 | 

**例**

取り込まれたログイベントは次のようになります。

```
{
    "outer_key": {
        "inner_key": "inner_value"
    }
}
```

次に、この **parseJSON** プロセッサがある場合:

```
[
   {
        "parseJSON": {
            "destination": "new_key"
        }
   }
]
```

変換されたログイベントは次のとおりです。

```
{
    "new_key": {
        "outer_key": {
            "inner_key": "inner_value"
        }
    }
}
```

## grok
<a name="CloudWatch-Logs-Transformation-Grok"></a>

grok プロセッサを使用すると、パターンマッチングを使用して非構造化データを解析および構造化できます。このプロセッサは、ログメッセージからフィールドを抽出することもできます。


| フィールド | 説明 | 必須? | デフォルト | 制限 | 注意事項 | 
| --- | --- | --- | --- | --- | --- | 
|  ソース | Grok マッチングを適用するフィールドのパス |  いいえ | `@message`  | 最大長: 128 ネストされたキーの最大深度: 3 | 
|  match | ログイベントと照合する grok パターン  |  はい |  | 最大長: 512 最大 grok パターン: 20 一部の grok パターンタイプには個別の使用制限があります。次のパターンの任意の組み合わせを最大 5 回使用できます: \$1URI、URIPARAM、URIPATHPARAM、SPACE、DATA、GREEDYDATA、GREEDYDATA\$1MULTILINE\$1 Grok パターンは型変換をサポートしていません。 一般的なログ形式パターン (APACHE\$1ACCESS\$1LOG、NGINX\$1ACCESS\$1LOG、SYSLOG5424) では、共通のログパターンの後に DATA、GREEDYDATA、または GREEDYDATA\$1MULTILINE パターンのみを含めることができます。  | [サポートされているすべての Grok パターンを表示する](#Grok-Patterns) | 

**Grok パターンの構造**

サポートされている grok パターン構造は次のとおりです。

```
%{PATTERN_NAME:FIELD_NAME}
```
+ **PATTERN\$1NAME**: 特定タイプのデータを一致させるための事前定義された正規表現を指します。定義済みの [grok パターン](#Grok-Patterns)のみがサポートされています。カスタムパターンの作成は許可されません。
+ **FIELD\$1NAME**: 抽出された値に名前を割り当てます。`FIELD_NAME` はオプションですが、この値を指定しない場合、抽出されたデータは変換されたログイベントから削除されます。`FIELD_NAME` がドット表記 (「parent.child」など) を使用している場合、JSON パスと見なされます。
+ **型変換**: 明示的な型変換はサポートされていません。[TypeConverter プロセッサ](CloudWatch-Logs-Transformation-Datatype.md#CloudWatch-Logs-Transformation-typeConverter)を使用して、grok によって抽出された任意の値のデータ型を変換します。

より複雑なマッチング式を作成するには、複数の grok パターンを組み合わせることができます。ログイベントに合わせて最大 20 個の grok パターンを組み合わせることができます。例えば、`%{NUMBER:timestamp} [%{NUMBER:db} %{IP:client_ip}:%{NUMBER:client_port}] %{GREEDYDATA:data}` のパターンの組み合わせを使用して、次のような Redis スローログエントリからフィールドを抽出できます。

`1629860738.123456 [0 127.0.0.1:6379] "SET" "key1" "value1"`

### Grok の例
<a name="Grok-Examples"></a>

#### 例 1: grok を使用して非構造化ログからフィールドを抽出する
<a name="Grok-Example1"></a>

サンプルログ:

```
293750 server-01.internal-network.local OK "[Thread-000] token generated"
```

使用するトランスフォーマー:

```
[
     {
         "grok": {
             "match": "%{NUMBER:version} %{HOSTNAME:hostname} %{NOTSPACE:status} %{QUOTEDSTRING:logMsg}"
         }
    }
]
```

出力:

```
{
  "version": "293750",
  "hostname": "server-01.internal-network.local",
  "status": "OK",
  "logMsg": "[Thread-000] token generated"
}
```

サンプルログ:

```
23/Nov/2024:10:25:15 -0900 172.16.0.1 200
```

使用するトランスフォーマー:

```
[
    {
        "grok": {
            "match": "%{HTTPDATE:timestamp} %{IPORHOST:clientip} %{NUMBER:response_status}"
        }
    }
]
```

出力:

```
{
  "timestamp": "23/Nov/2024:10:25:15 -0900",
  "clientip": "172.16.0.1",
  "response_status": "200"
}
```

#### 例 2: grok を parseJSON と組み合わせて使用し、JSON ログイベントからフィールドを抽出する
<a name="Grok-Example3"></a>

サンプルログ:

```
{
    "timestamp": "2024-11-23T16:03:12Z",
    "level": "ERROR",
    "logMsg": "GET /page.html HTTP/1.1"
}
```

使用するトランスフォーマー:

```
[
     {
        "parseJSON": {}
    },
    {
         "grok": {
            "source": "logMsg",
             "match": "%{WORD:http_method} %{NOTSPACE:request} HTTP/%{NUMBER:http_version}"
         }
    }
]
```

出力:

```
{
  "timestamp": "2024-11-23T16:03:12Z",
  "level": "ERROR",
  "logMsg": "GET /page.html HTTP/1.1",
  "http_method": "GET",
  "request": "/page.html",
  "http_version": "1.1"
}
```

#### 例 3: FIELD\$1NAME に点線注釈が付いた Grok パターン
<a name="Grok-Example4"></a>

サンプルログ:

```
192.168.1.1 GET /index.html?param=value 200 1234
```

使用するトランスフォーマー:

```
[
    {
        "grok": {
            "match": "%{IP:client.ip} %{WORD:method} %{URIPATHPARAM:request.uri} %{NUMBER:response.status} %{NUMBER:response.bytes}"
        }
    }
]
```

出力:

```
{
  "client": {
    "ip": "192.168.1.1"
  },
  "method": "GET",
  "request": {
    "uri": "/index.html?param=value"
  },
  "response": {
    "status": "200",
    "bytes": "1234"
  }
}
```

### サポートされている grok パターン
<a name="Grok-Patterns"></a>

次の表に、`grok` プロセッサでサポートされているパターンを示します。

**一般的な grok パターン**


| Grok パターン | 説明 | 最大パターン制限 | 例 | 
| --- | --- | --- | --- | 
| USERNAME または USER | 小文字 (a～z)、大文字 (A～Z)、数字 (0～9)、ドット (.)、アンダースコア (\$1)、またはハイフン (-) を使用できる 1 つ以上の文字との一致 | 20 |  入力: `user123.name-TEST` パターン: `%{USERNAME:name}` 出力: `{"name": "user123.name-TEST"}`  | 
| INT | オプションのプラス記号またはマイナス記号の後に 1 つ以上の数字が続くものとの一致。 | 20 |  入力: `-456` パターン: `%{INT:num}` 出力: `{"num": "-456"}`  | 
| BASE10NUM | 整数または浮動小数点数とオプションの符号と小数点との一致 | 20 |  入力: `-0.67` パターン: `%{BASE10NUM:num}` 出力: `{"num": "-0.67"}`  | 
| BASE16NUM | 10 進数と 16 進数をオプションの記号 (\$1 または -) とオプションの 0x プレフィックスとの一致 | 20 |  入力: `+0xA1B2` パターン: `%{BASE16NUM:num}` 出力: `{"num": "+0xA1B2"}`  | 
| POSINT | 1 つ以上の数字 (1～9 の後に 0～9) で構成され、先頭にゼロのない正の整数全体との一致 | 20 |  入力: `123` パターン: `%{POSINT:num}` 出力: `{"num": "123"}`  | 
| NONNEGINT | ゼロと先頭にゼロがある数字を含むすべての整数 (1 つ以上の数字 0～9 で構成) との一致。 | 20 |  入力: `007` パターン: `%{NONNEGINT:num}` 出力: `{"num": "007"}`  | 
| WORD | 文字、数字、アンダースコアを含む 1 つ以上の単語文字 (\$1w) で構成される単語全体との一致 | 20 |  入力: `user_123` パターン: `%{WORD:user}` 出力: `{"user": "user_123"}`  | 
| NOTSPACE | 空白以外の 1 つ以上の文字との一致。 | 5 |  入力: `hello_world123` パターン: `%{NOTSPACE:msg}` 出力: `{"msg": "hello_world123"}`  | 
| SPACE | 0 個以上の空白類文字との一致。 | 5 |  入力: `" "` パターン: `%{SPACE:extra}` 出力: `{"extra": " "}`  | 
| DATA | 任意の文字 (改行文字を除く) に 0 回以上一致。最短マッチを実行。 | 5 |  入力: `abc def ghi` パターン: `%{DATA:x} %{DATA:y}` 出力: `{"x": "abc", "y": "def ghi"}`  | 
| GREEDYDATA | 任意の文字 (改行文字を除く) に 0 回以上一致。最長マッチを実行。 | 5 |  入力: `abc def ghi` パターン: `%{GREEDYDATA:x} %{GREEDYDATA:y}` 出力: `{"x": "abc def", "y": "ghi"}`  | 
| GREEDYDATA\$1MULTILINE | 任意の文字 (改行文字を含む) に 0 回以上一致。最長マッチを実行。 | 1 |  入力: `abc` `def` `ghi` パターン: `%{GREEDYDATA_MULTILINE:data}` 出力: `{"data": "abc\ndef\nghi"}`  | 
| QUOTEDSTRING | エスケープ文字付きの、引用符で囲まれた文字列 (一重引用符または二重引用符) との一致。 | 20 |  入力: `"Hello, world!"` パターン: `%{QUOTEDSTRING:msg}` 出力: `{"msg": "Hello, world!"}`  | 
| UUID | 標準の UUID 形式との一致。16 進数文字 8 文字の後に 16 進数文字 4 文字の 3 グループが続き、16 進数文字 12 文字で終わり、すべてハイフンで区切られます。 | 20 |  入力: `550e8400-e29b-41d4-a716-446655440000` パターン: `%{UUID:id}` 出力: `{"id": "550e8400-e29b-41d4-a716-446655440000"}`  | 
| URN | URN (Uniform Resource Name) 構文との一致。 | 20 |  入力: `urn:isbn:0451450523` パターン: `%{URN:urn}` 出力: `{"urn": "urn:isbn:0451450523"}`  | 

**AWS Grok パターン**


| パターン | 説明 | 最大パターン制限 | 例 | 
| --- | --- | --- | --- | 
|  ARN  |   AWS Amazon リソースネーム (ARNs) に一致し、パーティション (`aws`、`aws-cn`、または `aws-us-gov`)、サービス、リージョン、アカウント ID、スラッシュで区切られた最大 5 つの階層リソース識別子をキャプチャします。コロン間で情報が欠落している ARN には一致しません。  | 5 |  入力: `arn:aws:iam:us-east-1:123456789012:user/johndoe` パターン: `%{ARN:arn}` 出力: `{"arn": "arn:aws:iam:us-east-1:123456789012:user/johndoe"}`  | 

**ネットワーク grok パターン**


| Grok パターン | 説明 | 最大パターン制限 | 例 | 
| --- | --- | --- | --- | 
| CISCOMAC | 4-4-4 の 16 進形式の MAC アドレスとの一致。 | 20 |  入力: `0123.4567.89AB` パターン: `%{CISCOMAC:MacAddress}` 出力: `{"MacAddress": "0123.4567.89AB"}`  | 
| WINDOWSMAC | ハイフン付きの 16 進形式の MAC アドレスとの一致。 | 20 |  入力: `01-23-45-67-89-AB` パターン: `%{WINDOWSMAC:MacAddress}` 出力: `{"MacAddress": "01-23-45-67-89-AB"}`  | 
| COMMONMAC | コロン付きの 16 進形式の MAC アドレスとの一致。 | 20 |  入力: `01:23:45:67:89:AB` パターン: `%{COMMONMAC:MacAddress}` 出力: `{"MacAddress": "01:23:45:67:89:AB"}`  | 
| MAC | CISCOMAC、WINDOWSMAC、または COMMONMAC grok パターンのいずれかとの一致 | 20 |  入力: `01:23:45:67:89:AB` パターン: `%{MAC:m1}` 出力: `{"m1":"01:23:45:67:89:AB"}`  | 
| IPV6 | 圧縮フォームや IPv4 マップ IPv6 アドレスを含む IPv6 アドレスとの一致。 | 5 |  入力: `2001:db8:3333:4444:5555:6666:7777:8888` パターン: `%{IPV6:ip}` 出力: `{"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}`  | 
| IPV4 | IPv4 アドレスとの一致。 | 20 |  入力: `192.168.0.1` パターン: `%{IPV4:ip}` 出力: `{"ip": "192.168.0.1"}`  | 
| IP | %\$1IPv6\$1 でサポートされている IPv6 アドレスまたは %\$1IPv4\$1 でサポートされている IPv4 アドレスのいずれかとの一致。 | 5 |  入力: `192.168.0.1` パターン: `%{IP:ip}` 出力: `{"ip": "192.168.0.1"}`  | 
| HOSTNAME または HOST | サブドメインを含むドメイン名との一致 | 5 |  入力: `server-01.internal-network.local` パターン: `%{HOST:host}` 出力: `{"host": "server-01.internal-network.local"}`  | 
| IPORHOST | ホスト名または IP アドレスのいずれかとの一致 | 5 |  入力: `2001:db8:3333:4444:5555:6666:7777:8888` パターン: `%{IPORHOST:ip}` 出力: `{"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}`  | 
| HOSTPORT | %\$1IPORHOST\$1 パターンでサポートされている IP アドレスまたはホスト名にコロンとポート番号が続くものに一致し、出力でポートを「PORT」としてキャプチャします。 | 5 |  入力: `192.168.1.1:8080` パターン: `%{HOSTPORT:ip}` 出力: `{"ip":"192.168.1.1:8080","PORT":"8080"}`  | 
| URIHOST | %\$1IPORHOST\$1 パターンでサポートされている IP アドレスまたはホスト名との一致。オプションでコロンとポート番号が続き、ポートが存在する場合はポートを「port」としてキャプチャします。 | 5 |  入力: `example.com:443 10.0.0.1` パターン: `%{URIHOST:host} %{URIHOST:ip}` 出力: `{"host":"example.com:443","port":"443","ip":"10.0.0.1"}`  | 

**パス grok パターン**


| Grok パターン | 説明 | 最大パターン制限 | 例 | 
| --- | --- | --- | --- | 
| UNIXPATH | クエリパラメータを含む可能性のある URL パスとの一致。 | 20 |  入力: `/search?q=regex` パターン: `%{UNIXPATH:path}` 出力: `{"path":"/search?q=regex"}`  | 
| WINPATH | Windows ファイルパスとの一致。 | 5 |  入力: `C:\Users\John\Documents\file.txt` パターン: `%{WINPATH:path}` 出力: `{"path": "C:\\Users\\John\\Documents\\file.txt"}`  | 
| PATH | URL または Windows ファイルパスのいずれかとの一致 | 5 |  入力: `/search?q=regex` パターン: `%{PATH:path}` 出力: `{"path":"/search?q=regex"}`  | 
| TTY | ターミナルと擬似ターミナルの Unix デバイスパスとの一致。 | 20 |  入力: `/dev/tty1` パターン: `%{TTY:path}` 出力: `{"path":"/dev/tty1"}`  | 
| URIPROTO | 文字との一致。オプションでプラス (\$1) 文字と追加文字、またはプラス (\$1) 文字が続きます。 | 20 |  入力: `web+transformer` パターン: `%{URIPROTO:protocol}` 出力: `{"protocol":"web+transformer"}`  | 
| URIPATH | URI のパスコンポーネントとの一致 | 20 |  入力: `/category/sub-category/product_name` パターン: `%{URIPATH:path}` 出力: `{"path":"/category/sub-category/product_name"}`  | 
| URIPARAM | URL クエリパラメータとの一致 | 5 |  入力: `?param1=value1&param2=value2` パターン: `%{URIPARAM:url}` 出力: `{"url":"?param1=value1&param2=value2"}`  | 
| URIPATHPARAM | URI パスとの一致。オプションでクエリパラメータが続きます。 | 5 |  入力: `/category/sub-category/product?id=12345&color=red` パターン: `%{URIPATHPARAM:path}` 出力: `{"path":"/category/sub-category/product?id=12345&color=red"}`  | 
| [URI] | 完全な URI との一致 | 5 |  入力: `https://user:password@example.com/path/to/resource?param1=value1&param2=value2` パターン: `%{URI:uri}` 出力: `{"path":"https://user:password@example.com/path/to/resource?param1=value1&param2=value2"}`  | 

**日付と時刻の grok パターン**


| Grok パターン | 説明 | 最大パターン制限 | 例 | 
| --- | --- | --- | --- | 
| MONTH | 完全な英月名または省略された英月名の単語全体との一致 | 20 |  入力: `Jan` パターン: `%{MONTH:month}` 出力: `{"month":"Jan"}` 入力: `January` パターン: `%{MONTH:month}` 出力: `{"month":"January"}`  | 
| MONTHNUM | 1～12 の月番号との一致。1 桁の月ではオプションで先頭に 0 が付きます。 | 20 |  入力: `5` パターン: `%{MONTHNUM:month}` 出力: `{"month":"5"}` 入力: `05` パターン: `%{MONTHNUM:month}` 出力: `{"month":"05"}`  | 
| MONTHNUM2 | 01 から 12 までの 2 桁の月番号との一致。 | 20 |  入力: `05` パターン: `%{MONTHNUM2:month}` 出力: `{"month":"05"}`  | 
| MONTHDAY | 1 から 31 までの日付との一致。オプションで先頭に 0 が付きます。 | 20 |  入力: `31` パターン: `%{MONTHDAY:monthDay}` 出力: `{"monthDay":"31"}`  | 
| YEAR | 2 桁または 4 桁の年との一致 | 20 |  入力: `2024` パターン: `%{YEAR:year}` 出力: `{"year":"2024"}` 入力: `24` パターン: `%{YEAR:year}` 出力: `{"year":"24"}`  | 
| DAY | 完全な日付名または省略された日付名との一致。 | 20 |  入力: `Tuesday` パターン: `%{DAY:day}` 出力: `{"day":"Tuesday"}`  | 
| HOUR | 24 時間形式の時間との一致。オプションで先頭にゼロ (0)0～23 が付きます。 | 20 |  入力: `22` パターン: `%{HOUR:hour}` 出力: `{"hour":"22"}`  | 
| MINUTE | 分 (00～59) との一致。 | 20 |  入力: `59` パターン: `%{MINUTE:min}` 出力: `{"min":"59"}`  | 
| SECOND | 秒 (0)0～60 を表す数値との一致。オプションで小数点またはコロン、小数分の 1 桁以上が続きます。 | 20 |  入力: `3` パターン: `%{SECOND:second}` 出力: `{"second":"3"}` 入力: `30.5` パターン: `%{SECOND:minSec}` 出力: `{"minSec":"30.5"}` 入力: `30:5` パターン: `%{SECOND:minSec}` 出力: `{"minSec":"30:5"}`  | 
| TIME | 時間、分、秒を (H)H:mm:(s)s のフォーマットで表した時間形式との一致。秒にはうるう秒 (0)0～60 が含まれます。 | 20 |  入力: `09:45:32` パターン: `%{TIME:time}` 出力: `{"time":"09:45:32"}`  | 
| DATE\$1US | (M)M/(d)d/(yy)yy または (M)M-(d)d-(yy)yy の形式の日付との一致。 | 20 |  入力: `11/23/2024` パターン: `%{DATE_US:date}` 出力: `{"date":"11/23/2024"}` 入力: `1-01-24` パターン: `%{DATE_US:date}` 出力: `{"date":"1-01-24"}`  | 
| DATE\$1EU | (d)d/(M)M/(yy)yy、(d)d-(M)M-(yy)yy、または (d)d.(M)M.(yy)yyの形式の日付との一致。 | 20 |  入力: `23/11/2024` パターン: `%{DATE_EU:date}` 出力: `{"date":"23/11/2024"}` 入力: `1.01.24` パターン: `%{DATE_EU:date}` 出力: `{"date":"1.01.24"}`  | 
| ISO8601\$1TIMEZONE | UTC オフセット 'Z' またはタイムゾーンオフセットとの一致。オプションで [\$1-](H)H(:)mm 形式のコロンと一致させます。 | 20 |  入力: `+05:30` パターン: `%{ISO8601_TIMEZONE:tz}` 出力: `{"tz":"+05:30"}` 入力: `-530` パターン: `%{ISO8601_TIMEZONE:tz}` 出力: `{"tz":"-530"}` 入力: `Z` パターン: `%{ISO8601_TIMEZONE:tz}` 出力: `{"tz":"Z"}`  | 
| ISO8601\$1SECOND | 秒 (0)0～60 を表す数値との一致。オプションで小数点またはコロン、小数秒の 1 桁以上が続きます。 | 20 |  入力: `60` パターン: `%{ISO8601_SECOND:second}` 出力: `{"second":"60"}`  | 
| TIMESTAMP\$1ISO8601 | ISO8601 日時形式 (yy)yy-(M)M-(d)dT(H)H:mm:((s)s)(Z\$1[\$1-](H)H:mm) との一致。オプションで、秒とタイムゾーンと一致させます。 | 20 |  入力: `2023-05-15T14:30:00+05:30` パターン: `%{TIMESTAMP_ISO8601:timestamp}` 出力: `{"timestamp":"2023-05-15T14:30:00+05:30"}` 入力: `23-5-1T1:25+5:30` パターン: `%{TIMESTAMP_ISO8601:timestamp}` 出力: `{"timestamp":"23-5-1T1:25+5:30"}` 入力: `23-5-1T1:25Z` パターン: `%{TIMESTAMP_ISO8601:timestamp}` 出力: `{"timestamp":"23-5-1T1:25Z"}`  | 
| DATE | %\$1DATE\$1US\$1 を使用した米国形式または %\$1DATE\$1EU\$1 を使用した欧州形式の日付のいずれかとの一致 | 20 |  入力: `11/29/2024` パターン: `%{DATE:date}` 出力: `{"date":"11/29/2024"}` 入力: `29.11.2024` パターン: `%{DATE:date}` 出力: `{"date":"29.11.2024"}`  | 
| DATESTAMP | %\$1DATE\$1 の後に %\$1TIME\$1 パターンが続き、スペースまたはハイフンで区切られたものとの一致。 | 20 |  入力: `29-11-2024 14:30:00` パターン: `%{DATESTAMP:dateTime}` 出力: `{"dateTime":"29-11-2024 14:30:00"}`  | 
| TZ | 一般的なタイムゾーンの略語 (PST、PDT、MST、MDT、CST CDT、EST、EDT、UTC) との一致。 | 20 |  入力: `PDT` パターン: `%{TZ:tz}` 出力: `{"tz":"PDT"}`  | 
| DATESTAMP\$1RFC822 | 次の形式の日付と時刻との一致: Day MonthName (D)D (YY)YY (H)H:mm:(s)s Timezone | 20 |  入力: `Monday Jan 5 23 1:30:00 CDT` パターン: `%{DATESTAMP_RFC822:dateTime}` 出力: `{"dateTime":"Monday Jan 5 23 1:30:00 CDT"}` 入力: `Mon January 15 2023 14:30:00 PST` パターン: `%{DATESTAMP_RFC822:dateTime}` 出力: `{"dateTime":"Mon January 15 2023 14:30:00 PST"}`  | 
| DATESTAMP\$1RFC2822 | 以下の RFC2822 日時形式との一致: Day、(d)d MonthName (yy)yy (H)H:mm:(s)s Z\$1[\$1-](H)H:mm | 20 |  入力: `Mon, 15 May 2023 14:30:00 +0530` パターン: `%{DATESTAMP_RFC2822:dateTime}` 出力: `{"dateTime":"Mon, 15 May 2023 14:30:00 +0530"}` 入力: `Monday, 15 Jan 23 14:30:00 Z` パターン: `%{DATESTAMP_RFC2822:dateTime}` 出力: `{"dateTime":"Monday, 15 Jan 23 14:30:00 Z"}`  | 
| DATESTAMP\$1OTHER | 次の形式の日付と時刻との一致: Day MonthName (d)d (H)H:mm:(s)s Timezone (yy)yy | 20 |  入力: `Mon May 15 14:30:00 PST 2023` パターン: `%{DATESTAMP_OTHER:dateTime}` 出力: `{"dateTime":"Mon May 15 14:30:00 PST 2023"}`  | 
| DATESTAMP\$1EVENTLOG | 区切り文字なしのコンパクトな日時形式との一致: (yy)yyMM(d)d(H)Hmm(s)s | 20 |  入力: `20230515143000` パターン: `%{DATESTAMP_EVENTLOG:dateTime}` 出力: `{"dateTime":"20230515143000"}`  | 

**ログ grok パターン**


| Grok パターン | 説明 | 最大パターン制限 | 例 | 
| --- | --- | --- | --- | 
| logLevel | Alert/ALERT、Trace/TRACE、Debug/DEBUG、Notice/NOTICE、Info/INFO、Warn/Warning/WARN/WARNING、Err/Error/ERR/ERROR、Crit/Critical/CRIT/CRITICAL、Fatal/FATAL、Severe/SEVERE、Emerg/Emergency/EMERG/EMERGENCY など、さまざまな大文字と小文字の標準ログレベルとの一致。 | 20 |  入力: `INFO` パターン: `%{LOGLEVEL:logLevel}` 出力: `{"logLevel":"INFO"}`  | 
| HTTPDATE | ログファイルでよく使用される日付と時刻の形式との一致。形式: (d)d/MonthName/(yy)yy:(H)H:mm:(s)s Timezone MonthName: 完全または省略された英語の月名 (例:「Jan」または「January」) タイムゾーン: %\$1INT\$1 grok パターンとの一致 | 20 |  入力: `23/Nov/2024:14:30:00 +0640` パターン: `%{HTTPDATE:date}` 出力: `{"date":"23/Nov/2024:14:30:00 +0640"}`  | 
| SYSLOGTIMESTAMP | MMonthName (d)d (H)H:mm:(s)s を持つ日付形式との一致。MonthName: 完全な、または省略された英語の月名との一致 (例：「Jan」または「January」) | 20 |  入力: `Nov 29 14:30:00` パターン: `%{SYSLOGTIMESTAMP:dateTime}` 出力: `{"dateTime":"Nov 29 14:30:00"}`  | 
| PROG | 文字、数字、ドット、アンダースコア、スラッシュ、パーセント記号、ハイフンの文字列で構成されるプログラム名との一致。 | 20 |  入力: `user.profile/settings-page` パターン: `%{PROG:program}` 出力: `{"program":"user.profile/settings-page"}`  | 
| SYSLOGPROG | PROG grok パターンとの一致。オプションでプロセス ID が角括弧で囲まれます。 | 20 |  入力: `user.profile/settings-page[1234]` パターン: `%{SYSLOGPROG:programWithId}` 出力: `{"programWithId":"user.profile/settings-page[1234]","program":"user.profile/settings-page","pid":"1234"}`  | 
| SYSLOGHOST | %\$1HOST\$1 または %\$1IP\$1 パターンのいずれかとの一致。 | 5 |  入力: `2001:db8:3333:4444:5555:6666:7777:8888` パターン: `%{SYSLOGHOST:ip}` 出力: `{"ip": "2001:db8:3333:4444:5555:6666:7777:8888"}`  | 
| SYSLOGFACILITY | 10 進形式の syslog 優先度との一致。値は角括弧 (<>) で囲む必要があります。 | 20 |  入力: `<13.6>` パターン: `%{SYSLOGFACILITY:syslog}` 出力: `{"syslog":"<13.6>","facility":"13","priority":"6"}`  | 

**一般的なログ grok パターン**

事前定義されたカスタム grok パターンを使用して、Apache、NGINX、Syslog Protocol (RFC 5424) のログ形式を一致させることができます。これらの特定のパターンを使用する場合、それらは一致する設定の最初のパターンである必要があり、他のパターンの前に配置することはできません。また、1 つの **DATA** でのみ追跡できます。**GREEDYDATA** または **GREEDYDATA\$1MULTILINE** パターン。


| Grok パターン | 説明 | 最大パターン制限 | 
| --- | --- | --- | 
|  APACHE\$1ACCESS\$1LOG | Apache アクセスログとの一致 | 1 | 
|  NGINX\$1ACCESS\$1LOG | NGINX アクセスログとの一致 | 1 | 
|  SYSLOG5424 | Syslog Protocol (RFC 5424) ログとの一致 | 1 | 

以下は、これらの一般的なログ形式パターンを使用するための有効および無効な例を示しています。

```
"%{NGINX_ACCESS_LOG} %{DATA}" // Valid
"%{SYSLOG5424}%{DATA:logMsg}" // Valid
"%{APACHE_ACCESS_LOG} %{GREEDYDATA:logMsg}" // Valid
"%{APACHE_ACCESS_LOG} %{SYSLOG5424}" // Invalid (multiple common log patterns used)
"%{NGINX_ACCESS_LOG} %{NUMBER:num}" // Invalid (Only GREEDYDATA and DATA patterns are supported with common log patterns)
"%{GREEDYDATA:logMsg} %{SYSLOG5424}" // Invalid (GREEDYDATA and DATA patterns are supported only after common log patterns)
```

#### 一般的なログ形式の例
<a name="Common-Log-Examples"></a>

##### Apache ログの例
<a name="Apache-Log-Example"></a>

サンプルログ:

```
127.0.0.1 - - [03/Aug/2023:12:34:56 +0000] "GET /page.html HTTP/1.1" 200 1234
```

トランスフォーマー:

```
[
     {
        "grok": {
            "match": "%{APACHE_ACCESS_LOG}"
        }
    }
]
```

出力:

```
{
    "request": "/page.html",
    "http_method": "GET",
    "status_code": 200,
    "http_version": "1.1",
    "response_size": 1234,
    "remote_host": "127.0.0.1",
    "timestamp": "2023-08-03T12:34:56Z"
}
```

##### NGINX ログの例
<a name="NGINX-Log-Example"></a>

サンプルログ:

```
192.168.1.100 - Foo [03/Aug/2023:12:34:56 +0000] "GET /account/login.html HTTP/1.1" 200 42 "https://www.amazon.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
```

トランスフォーマー:

```
[
     {
        "grok": {
            "match": "%{NGINX_ACCESS_LOG}"
        }
    }
]
```

出力:

```
{
    "request": "/account/login.html",
    "referrer": "https://www.amazon.com/",
    "agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
    "http_method": "GET",
    "status_code": 200,
    "auth_user": "Foo",
    "http_version": "1.1",
    "response_size": 42,
    "remote_host": "192.168.1.100",
    "timestamp": "2023-08-03T12:34:56Z"
}
```

##### Syslog Protocol (RFC 5424) ログの例
<a name="syslog5424-Log-Example"></a>

サンプルログ:

```
<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource= "Application" eventID="1011"][examplePriority@32473 class="high"]
```

トランスフォーマー:

```
[
     {
        "grok": {
            "match": "%{SYSLOG5424}"
        }
    }
]
```

出力:

```
{
  "pri": 165,
  "version": 1,
  "timestamp": "2003-10-11T22:14:15.003Z",
  "hostname": "mymachine.example.com",
  "app": "evntslog",
  "msg_id": "ID47",
  "structured_data": "exampleSDID@32473 iut=\"3\" eventSource= \"Application\" eventID=\"1011\"",
  "message": "[examplePriority@32473 class=\"high\"]"
}
```

## csv
<a name="CloudWatch-Logs-Transformation-csv"></a>

**csv** プロセッサは、ログイベントからカンマ区切り値 (CSV) を解析して列に分けます。


| フィールド | 説明 | 必須? | デフォルト | 制限 | 
| --- | --- | --- | --- | --- | 
|  ソース | 解析されるログイベントのフィールドへのパス |  いいえ | `@message`  | 最大長: 128 ネストされたキーの最大深度: 3 | 
|  delimiter | 元のカンマ区切り値ログイベントの各列を区切るために使用される文字 |  いいえ | `,`  | 最大長: 1。値が `\t` または `\s` の場合を除く。  | 
|  quoteCharacter | データの単一の列のテキスト修飾子として使用される文字 |  いいえ | `"`  | 最大長: 1  | 
|  columns | 変換されたログイベントの列に使用する名前のリスト。 |  いいえ | `[column_1, column_2 ...]`  | 最大 CSV 列: 100 最大長: 128 ネストされたキーの最大深度: 3  | 
|  destination | 変換されたキーと値のペアを配置する親フィールド |  いいえ | `Root node`  | 最大長: 128 ネストされたキーの最大深度: 3  | 

`delimiter` を `\t` に設定するとタブ文字の各列が区切られ、`\t` に設定すると 1 つの空白文字の各列が区切られます。

**例**

取り込まれたログイベントの一部は次のようになります。

```
'Akua Mansa':28:'New York: USA'
```

**csv** プロセッサのみを使用するとします。

```
[
     {
        "csv": {
            "delimiter": ":",
            "quoteCharacter": "'"
        }
    }
]
```

変換されたログイベントは次のとおりです。

```
{
  "column_1": "Akua Mansa",
  "column_2": "28",
  "column_3": "New York: USA"
}
```

**例 2**

取り込まれたログイベントは次のようになります。

```
{
    "timestamp": "2024-11-23T16:03:12Z",
    "type": "user_data",
    "logMsg": "'Akua Mansa':28:'New York: USA'"
}
```

イベントを JSON として解析し、**CSV** プロセッサを使用して JSON フィールドを解析し、列名と宛先を指定するとします。

```
[
    {
        "parseJSON": {}
    },
    {
        "csv": {
            "source": "logMsg",
            "delimiter": ":",
            "quoteCharacter": "'",
            "columns":["name","age","location"],
            "destination": "msg"
        }
    }
]
```

変換されたログイベントは次のとおりです。

```
{
    "timestamp": "2024-11-23T16:03:12Z",
    "logMsg": "'Akua Mansa':28:'New York: USA'",
    "type": "user_data",
    "msg": {
        "name": "Akua Mansa",
        "age": "28",
        "location": "New York: USA"
    }
}
```

## parseKeyValue
<a name="CloudWatch-Logs-Transformation-parseKeyValue"></a>

**parseKeyValue** プロセッサを使用して、指定されたフィールドをキーと値のペアに解析します。以下のオプションを使用して、フィールド情報を解析するようにプロセッサをカスタマイズできます。


| フィールド | 説明 | 必須? | デフォルト | 制限 | 
| --- | --- | --- | --- | --- | 
|  ソース | 解析されるログイベントのフィールドへのパス |  いいえ | `@message`  | 最大長: 128 ネストされたキーの最大深度: 3 | 
|  destination | 抽出されたキーと値のペアを配置する送信先フィールド |  いいえ |   | 最大長: 128  | 
|  FieldDelimiter | 元のログイベントのキーと値のペア間で使用されるフィールド区切り文字の文字列 |  いいえ | `&`  | 最大長: 128  | 
|  keyValueDelimiter | 変換されたログイベントの各ペアのキーと値の間に使用する区切り文字の文字列 |  いいえ | `=`  | 最大長: 128  | 
|  nonMatchValue | キーと値のペアが正常に分割されない場合に、結果の値フィールドに挿入する値。 |  いいえ |   | 最大長: 128  | 
|  keyPrefix | 変換されたすべてのキーにプレフィックスを追加する場合は、ここで指定します。 |  いいえ |   | 最大長: 128  | 
|  overwriteIfExists | 送信先キーが既に存在する場合に値を上書きするかどうか |  いいえ | `false`  |   | 

**例**

ログイベントの例を以下に示します。

```
key1:value1!key2:value2!key3:value3!key4
```

次のプロセッサ設定を使用しているとします。

```
[
    {
        "parseKeyValue": {
            "destination": "new_key",
            "fieldDelimiter": "!",
            "keyValueDelimiter": ":",
            "nonMatchValue": "defaultValue",
            "keyPrefix": "parsed_"
        }
    }
]
```

変換されたログイベントは次のとおりです。

```
{
  "new_key": {
    "parsed_key1": "value1",
    "parsed_key2": "value2",
    "parsed_key3": "value3",
    "parsed_key4": "defaultValue"
  }
}
```