

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

# フィールドインデックスを作成してクエリパフォーマンスを改善し、スキャン量を削減する
<a name="CloudWatchLogs-Field-Indexing"></a>

ログイベントでフィールドの*フィールドインデックス*を作成して、同等性ベースの検索を効率的に行うことができます。その後、CloudWatch Logs Insights クエリでフィールドインデックスを使用すると、クエリはインデックス付きフィールドを含まないことがわかっているログイベントの処理のスキップを試行します。これによってフィールドインデックスを使用するクエリのスキャン量が減少し、結果をより迅速に返すことができます。これにより、数千のロググループ全体で合計ログのペタバイトをすばやく検索し、関連するログをより迅速に見つけることができます。インデックス付けに適したフィールドは、多くの場合、クエリが必要なフィールドです。値のカーディナリティが高いフィールドは、フィールドインデックスの候補としても適しています。これらのフィールドインデックスを使用するクエリは、一致するログイベントをターゲット値に制限するため、より迅速に完了するからです。

例えば、`requestId` のフィールドインデックスを作成したとします。次に、 `requestId = value`または を含むそのロググループの CloudWatch Logs Insights クエリ`requestId IN [value, value, ...]`は、そのインデックス付きフィールドとクエリされた値を含むことがわかっており、CloudWatch Logs がそのフィールドの値を過去に検出したログイベントのみを処理しようとします。

フィールドインデックスを活用して、多数のロググループの効率的なクエリを作成することもできます。`filter` コマンドの代わりにクエリで `filterIndex` コマンドを使用すると、フィールドインデックスを持つログイベントで選択したロググループに対してクエリが実行されます。これらのクエリは、最大 5 つのロググループ名のプレフィックスを指定することで、最大 10,000 個のロググループをスキャンできます。これが CloudWatch のクロスアカウントオブザーバビリティのモニタリングアカウントの場合は、すべてのソースアカウントを選択するか個々のソースアカウントを指定してロググループを選択できます。

インデックス付きのフィールドでは、大文字と小文字が区別されます。例えば、`RequestId` のフィールドインデックスは、`requestId` を含むログイベントと一致しません。

フィールドインデックスは、JSON ログとサービスログの構造化ログ形式でのみサポートされます。

CloudWatch Logs は、標準ログクラスのすべてのロググループにデフォルトのフィールドインデックスを提供します。デフォルトのフィールドインデックスは、次のフィールドで自動的に使用できます。
+ `@logStream`
+ `@aws.region`
+ `@aws.account`
+ `@source.log`
+ `@data_source_name`
+ `@data_source_type`
+ `@data_format`
+ `traceId`
+ `severityText`
+ `attributes.session.id`

CloudWatch Logs は、特定のデータソース名とタイプの組み合わせのデフォルトのフィールドインデックスも提供します。デフォルトのフィールドインデックスは、次のデータソース名とタイプの組み合わせで自動的に使用できます。


| データソース名とタイプ | デフォルトのフィールドインデックス | 
| --- | --- | 
|  `amazon_vpc.flow`  |  `action` `logStatus` `region` `flowDirection` `type`  | 
|  `amazon_route53.resolver_query`  |  `query_type` `transport` `rcode`  | 
|  `aws_waf.access`  |  `action` `httpRequest.country`  | 
|  `aws_cloudtrail.data` ` aws_cloudtrail.management`  |  `eventSource` `eventName` `awsRegion` `userAgent` `errorCode` `eventType` `managementEvent` `readOnly` `eventCategory` `requestId`  | 

デフォルトのフィールドインデックスは、ポリシー内で定義した任意のカスタムフィールドインデックスに追加されます。デフォルトのフィールドインデックスは、[フィールドインデックスクォータ](CloudWatchLogs-Field-Indexing-Syntax.md)にはカウントされません。

CloudWatch Logs は、インデックスポリシーの作成後に取り込まれたログイベントのみをインデックス化します。ポリシーの作成前に取り込まれたログイベントはインデックス化されません。フィールドインデックスを作成すると、一致する各ログイベントは、ログイベントの取り込み時間から 30 日間インデックスが付いたままになります。

**注記**  
モニタリングアカウントにフィールドインデックスポリシーを作成する場合、そのポリシーはリンクされたソースアカウントのロググループには使用されません。フィールドインデックスポリシーは、それが作成されたアカウントにのみ適用されます。

このセクションの残りのトピックでは、フィールドインデックスを作成する方法について説明します。クエリでフィールドインデックスを参照する方法については「[filterIndex](CWL_QuerySyntax-FilterIndex.md)」および「[フィルター](CWL_QuerySyntax-Filter.md)」を参照してください。

**Topics**
+ [フィールドインデックスの構文とクォータ](CloudWatchLogs-Field-Indexing-Syntax.md)
+ [アカウントレベルのフィールドインデックスポリシーを作成する](CloudWatchLogs-Field-Indexing-CreateAccountLevel.md)
+ [ロググループレベルのフィールドインデックスポリシーを作成する](CloudWatchLogs-Field-Indexing-CreateLogGroupLevel.md)
+ [クエリ作成時のロググループの選択オプション](Field-Indexing-Selection.md)
+ [フィールドインデックスポリシーを削除した場合の影響](CloudWatchLogs-Field-Indexing-Deletion.md)

# フィールドインデックスの構文とクォータ
<a name="CloudWatchLogs-Field-Indexing-Syntax"></a>

フィールドインデックスを作成するには、*フィールドインデックスポリシー*を作成します。アカウント全体に適用されるアカウントレベルのインデックスポリシーを作成できます。また、単一のロググループのみに適用されるポリシーを作成することもできます。アカウント全体のインデックスポリシーでは、アカウント内のすべてのロググループに適用されるインデックスポリシーを設定できます。ロググループ名のプレフィックスによって選択された、アカウントのロググループのサブセットに適用されるアカウントレベルのインデックスポリシーを作成することもできます。同じアカウントに複数のアカウントレベルのポリシーがある場合、これらのポリシーのロググループ名のプレフィックスを重複させることはできません。同様に、特定のデータソース名とタイプの組み合わせに適用されるアカウントレベルのインデックスポリシーを作成できます。データソース名とタイプの組み合わせごとに作成できるアカウントポリシーは 1 つだけです。

ロググループレベルのフィールドインデックスポリシーは、アカウントレベルのフィールドインデックスポリシーを上書きします。これは、ロググループ全体に適用されます (選択基準のないアカウントレベルのポリシーや、ロググループ名のプレフィックスベースの選択基準を持つアカウントレベルのポリシーなど）。ログイベントレベルで一致するアカウントレベルのポリシー (特定のデータソース名とタイプの組み合わせなど) は、ロググループ全体に一致するポリシーに加えて適用されます。ロググループレベルのインデックスポリシーを作成する場合、そのロググループは、ロググループレベルで一致するアカウントレベルのポリシーを使用しません。

ログイベントとフィールドインデックスの名前の一致では、大文字と小文字が区別されます。例えば、`RequestId` のフィールドインデックスは、`requestId` を含むログイベントと一致しません。

最大 40 のアカウントレベルのインデックスポリシーを持つことができ、そのうち 20 はロググループ名のプレフィックス選択基準を使用し、20 はデータソースベースの選択基準を使用できます。ロググループ名のプレフィックスに対してフィルタリングされた複数のアカウントレベルのインデックスポリシーがある場合、同じまたは重複するロググループ名のプレフィックスを 2 つ使用することはできません。例えば、`my-log` で始まるロググループに対してフィルタリングされたポリシーが 1 つある場合、別のフィールドインデックスポリシーを `my-logpprod` または `my-logging` に対してフィルタリングすることはできません。同様に、データソース名とタイプの組み合わせにフィルタリングされた複数のアカウントレベルのインデックスポリシーがある場合、2 つのポリシーで同じデータソース名とタイプを使用することはできません。たとえば、1 つのポリシーをデータソース名`amazon_vpc`とデータソースタイプにフィルタリングした場合`flow`、この組み合わせで別のポリシーを作成することはできません。

名前プレフィックスがなく、すべてのロググループに適用されるアカウントレベルのインデックスポリシーがある場合、ロググループ名プレフィックスフィルターを持つ他のアカウントレベルのインデックスポリシーを作成することはできません。データソース名とタイプフィルターを使用するアカウントレベルのインデックスポリシーを作成できます。

各インデックスポリシーには、次のクォータと制限があります。
+ 最大 20 個のフィールドをポリシーに含めることができます。
+ 各フィールド名には最大 100 文字を含めることができます。
+ `@` で始まるロググループにカスタムフィールドのインデックスを作成するには、フィールド名の先頭に `@` を追加してフィールドを指定する必要があります。例えば、ログイベントに `@userId` という名前のフィールドが含まれている場合は、`@@userId` を指定してこのフィールドのインデックスを作成する必要があります。

データソース名とタイプベースの選択基準を持つアカウントレベルのインデックスポリシーでは、追加の制限が適用されます。すべてのフィールドはプリミティブデータ型でなければならず、ネストされたプリミティブは 構造体でのみサポートされます。

**生成されたフィールドと予約されたフィールド**

CloudWatch Logs Insights は、各ログイベントにシステムフィールドを自動的に生成します。これらの生成されたフィールドには `@` のプレフィックスが付きます。生成されたフィールドの詳細については「[サポートされるログと検出されるフィールド](CWL_AnalyzeLogData-discoverable-fields.md)」を参照してください。

これらの生成されたフィールドのうち、フィールドインデックスとして使用するために以下がサポートされています。
+ `@logStream`
+ `@ingestionTime`
+ `@requestId`
+ `@type`
+ `@initDuration`
+ `@duration`
+ `@billedDuration`
+ `@memorySize`
+ `@maxMemoryUsed`
+ `@xrayTraceId`
+ `@xraySegmentId`

これらの生成されたフィールドをインデックス付けするには、`@` で始まるカスタムフィールドに対して行う必要があるため、それらを指定するときに `@` を追加する必要はありません。例えば、`@logStream` のフィールドインデックスを作成するには、`@logStream` をフィールドインデックスとして指定します。

CloudWatch Logs は、標準ログクラスのすべてのロググループにデフォルトのフィールドインデックスを提供します。デフォルトのフィールドインデックスは、次のフィールドで自動的に使用できます。
+ `@logStream`
+ `@aws.region`
+ `@aws.account`
+ `@source.log`
+ `@data_source_name`
+ `@data_source_type`
+ `@data_format`
+ `traceId`
+ `severityText`
+ `attributes.session.id`

CloudWatch Logs は、特定のデータソース名とタイプの組み合わせのデフォルトのフィールドインデックスも提供します。デフォルトのフィールドインデックスは、次のデータソース名とタイプの組み合わせで自動的に使用できます。


| データソース名とタイプ | デフォルトのフィールドインデックス | 
| --- | --- | 
|  `amazon_vpc.flow`  |  `action` `logStatus` `region` `flowDirection` `type`  | 
|  `amazon_route53.resolver_query`  |  `query_type` `transport` `rcode`  | 
|  `aws_waf.access`  |  `action` `httpRequest.country`  | 
|  `aws_cloudtrail.data` ` aws_cloudtrail.management`  |  `eventSource` `eventName` `awsRegion` `userAgent` `errorCode` `eventType` `managementEvent` `readOnly` `eventCategory` `requestId`  | 

デフォルトのフィールドインデックスは、ポリシー内で定義した任意のカスタムフィールドインデックスに追加されます。デフォルトのフィールドインデックスは、[フィールドインデックスクォータ](#CloudWatchLogs-Field-Indexing-Syntax)にはカウントされません。

**JSON ログの子フィールドと配列フィールド**

JSON ログのネストされた子フィールドまたは配列フィールドであるフィールドにインデックスを作成できます。

例えば、このログ内の `userIdentity` フィールド内に `accessKeyId` 子フィールドのインデックスを作成できます。

```
{
    "eventVersion": "1.0",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "EXAMPLE_PRINCIPAL_ID",
        "arn": "arn: aws: iam: : 123456789012: user/Alice",
        "accessKeyId": "11112222",
        "accountId": "123456789012",
        "userName": "Alice"
    },
    "eventTime": "2014-03-06T21: 22: 54Z",
    "eventSource": "ec2.amazonaws.com",
    "eventName": "StartInstances",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "192.0.2.255",
    "userAgent": "ec2-api-tools1.6.12.2",
    "requestParameters": {
        "instancesSet": {
            "items": [{
                "instanceId": "i-abcde123",
                "currentState": {
                    "code": 0,
                    "name": "pending"
                },
                "previousState": {
                    "code": 80,
                    "name": "stopped"
                }
            }]
        }
    }
}
```

このフィールドを作成するには、フィールドインデックスを作成する時とクエリでそれを指定する時の両方で、ドット表記 (`userIdentity.accessKeyId`) を使用して参照します。クエリは次のようになります。

```
fields @timestamp, @message 
| filterIndex userIdentity.accessKeyId = "11112222"
```

前の例のイベントの場合、`instanceId` フィールドは `requestParameters.instancesSet.items` 内の配列にあります。フィールドインデックスの作成時とクエリ時の両方でこのフィールドを表すには、`requestParameters.instancesSet.items.0.instanceId` として参照します。0 は配列内のそのフィールドの場所を参照します。

すると、このフィールドのクエリは次のようになります。

```
fields @timestamp, @message 
| filterIndex requestParameters.instancesSet.items.0.instanceId="i-abcde123"
```

# アカウントレベルのフィールドインデックスポリシーを作成する
<a name="CloudWatchLogs-Field-Indexing-CreateAccountLevel"></a>

このセクションのステップを使用して、アカウント内のすべてのロググループ、または同じ文字列で始まるロググループ名を持つ複数のロググループに適用されるフィールドインデックスポリシーを作成します。

**アカウントレベルのフィールドインデックスポリシーを作成するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[設定]** を選択し、**[ログ]** を選択します。

1. **[アカウントレベルのインデックスポリシー]** セクションで、**[管理]** を選択します。

1. **[インデックスポリシーを作成]** を選択します。

1. **ポリシー名**に、新しいポリシーの名前を入力します。

1. **ポリシーの範囲を選択する**には、次のいずれかを実行します。
   + **[すべての標準ロググループ]** を選択して、インデックスポリシーをアカウントのすべての標準クラスロググループに適用します。
   + **プレフィックス一致でロググループ**を選択し、同じ文字列で始まる名前を持つロググループのサブセットにポリシーを適用します。次に、これらのロググループのプレフィックスを **[プレフィックス名を入力]** に入力します。

     プレフィックスを入力したら、**[プレフィックスが一致したロググループをプレビュー]** を選択して、プレフィックスが期待したロググループと一致することを確認できます。

     **データソース別のログデータ**を選択して、ポリシーを特定のデータソース名とタイプの組み合わせに適用します。その後、ドロップダウンメニューから**データソース**と**データ型**を選択できます。

     データソース名とタイプを選択したら、**フィールドの取得**を選択して、**フィールドインデックスとファセットの設定**セクションに、使用可能なフィールド、含まれるロググループ、デフォルトフィールドインデックスとカスタムフィールドインデックスなどの関連情報を入力できます。

1. **[カスタムインデックスフィールド設定]** で **[フィールドパスを追加]** を選択し、インデックスを作成する最初のフィールドを入力します。

   次に、フィールド名の値として使用する文字列を入力するか、ドロップダウンメニューからフィールドを選択します。これは、ログイベントに表示されるものと完全に一致する必要があります。例えば、ログイベントに `requestId` が含まれている場合は、ここに `requestId` と入力する必要があります。`RequestId`、`requestID`、`request Id` は一致しません。

   `@` 文字で始まるカスタムログフィールドにインデックスを作成する場合は、インデックス文字列を入力するときに追加の `@` 文字を含める必要があります。例えば、カスタムログフィールド `@emailname` がある場合は、**[フィールドパスの追加]** ボックスに `@@emailname` と入力します。

   CloudWatch Logs が自動的に生成する `@ingestionTime` および `@logStream` フィールドのインデックスを作成することもできます。その場合は、指定するときに `@` を追加する必要はありません。

1. (オプション) フィールドパスを指定するだけでなく、**ファセットとして設定**を選択して、ファセットとしてフィールドを作成できます。

1. 前のステップを繰り返して、最大 20 個のフィールドインデックスを追加します。

1. 終了したら、**[Create]** (作成) を選択します。

# ロググループレベルのフィールドインデックスポリシーを作成する
<a name="CloudWatchLogs-Field-Indexing-CreateLogGroupLevel"></a>

このセクションのステップを使用して、単一のロググループに適用されるフィールドインデックスポリシーを作成します。

**ロググループレベルのフィールドインデックスポリシーを作成するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. 左側のナビゲーションペインで、**[Logs]** (ログ)、**[Log groups]** (ロググループ) の順に選択します。

1. ロググループの名前を選択します。

1. **[フィールドインデックス]** タブを選択します。

1. **[このロググループのフィールドインデックスを管理]** を選択します。

1. **[ロググループレベルのフィールドインデックスを管理]** で **[フィールドパスの追加]** を選択し、インデックスを作成する最初のフィールドを入力します。

   次に、フィールド名の値として使用する文字列を入力します。これは、ログイベントに表示されるものと完全に一致する必要があります。例えば、ログイベントに `requestId` が含まれている場合は、ここに `requestId` と入力する必要があります。`RequestId`、`requestID`、`request Id` は一致しません。

   `@` 文字で始まるカスタムログフィールドにインデックスを作成する場合は、インデックス文字列を入力するときに追加の `@` 文字を含める必要があります。例えば、カスタムログフィールド `@emailname` がある場合は、**[フィールドパスの追加]** ボックスに `@@emailname` と入力します。

   CloudWatch Logs が自動的に生成する `@ingestionTime` および `@logStream` フィールドのインデックスを作成することもできます。その場合は、指定するときに `@` を追加する必要はありません。

1. (オプション) フィールドパスを指定するだけでなく、**ファセットとして設定**を選択して、ファセットとしてフィールドを作成できます。

1. 前のステップを繰り返して、最大 20 個のフィールドインデックスを追加します。

1. 完了したら、[**Save**] を選択します。

# クエリ作成時のロググループの選択オプション
<a name="Field-Indexing-Selection"></a>

このセクションでは、クエリに含めるロググループを選択するさまざまな方法について説明します。

**コンソールでクエリのロググループを選択するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[ログ]**、**[Logs Insights]** を選択します。

1. このクエリに使用するクエリ言語を選択します。**Logs Insights QL**、**OpenSearch PPL**、**OpenSearch SQL** のいずれかを選択できます。

1. クエリのロググループを選択する方法は 3 つあります。
   + **[ロググループ名]** ボックスを使用します。これはデフォルトの選択方法です。この方法では、最大 50 個のロググループ名を入力できます。これが CloudWatch のクロスアカウントオブザーバビリティのモニタリングアカウントの場合は、モニタリングアカウントだけでなくソースアカウントのロググループも選択できます。1 つのクエリで複数のアカウントのログを一度にクエリできます。
   + **[ロググループの条件]** セクションを使用します。このセクションでは、ロググループ名のプレフィックスに基づいてロググループを選択できます。1 つのクエリに最大 5 つのプレフィックスを含めることができます。これらのプレフィックスが名前に含まれているロググループが選択されます。または、**[すべてのロググループ]** オプションで、アカウントからすべてのロググループを選択します。
   + これが CloudWatch クロスアカウントオブザーバビリティのモニタリングアカウントである場合は、アカウントドロップダウンメニューで**[すべてのアカウント]** を選択して、リンクされたすべてのアカウントからロググループを選択できます。または、このクエリに含めるアカウントを個別に選択できます。

   選択肢が 10,000 を超えるロググループと一致する場合、選択肢を絞り込むよう求めるエラーが表示されます。

1. クエリのデフォルトのログクラスは **標準** です。**[ログクラス]** を使用して**低頻度アクセス**に変更できます。

**の使用 AWS CLI**

コマンドラインからクエリを開始するときにこれらのタイプの選択を行うには、クエリで `source` コマンドを使用できます。詳細な説明と例については、[SOURCE](CWL_QuerySyntax-Source.md) を参照してください。

# フィールドインデックスポリシーを削除した場合の影響
<a name="CloudWatchLogs-Field-Indexing-Deletion"></a>

しばらく有効になっているフィールドインデックスポリシーを削除すると、次のようになります。
+ ポリシーが削除されてから最大 30 日間、クエリはインデックスが作成されたログイベントから恩恵を受けることができます。
+ ロググループレベルのインデックスポリシーを削除し、そのロググループに適用されるアカウントレベルのポリシーがすでに設定されている場合、アカウントレベルのポリシーは最終的にそのロググループに適用されます。