

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立欄位索引以改善查詢效能並減少掃描磁碟區
<a name="CloudWatchLogs-Field-Indexing"></a>

您可以在日誌事件中建立欄位*的欄位索引*，以進行以等式為基礎的高效率搜尋。當您接著在 CloudWatch Logs Insights 查詢中使用欄位索引時，查詢會嘗試略過處理已知不包含索引欄位的日誌事件。這可減少使用欄位索引的查詢掃描量，因此可以更快地傳回結果。這可協助您在數千個日誌群組中快速搜尋總日誌數 PB，並更快速地在相關日誌上進行搜尋。要編製索引的良好欄位是您通常需要查詢的欄位。具有高基數值的欄位也是欄位索引的良好候選項目，因為使用這些欄位索引的查詢會更快完成，因為它會限制與目標值相符的日誌事件。

例如，假設您已建立 的欄位索引`requestId`。然後，該日誌群組 CloudWatch Logs 上包含`requestId = value`或`requestId IN [value, value, ...]`將嘗試僅處理已知包含該索引欄位和查詢值的日誌事件，且該 CloudWatch Logs 在過去已偵測到該欄位的值。

您也可以利用欄位索引來建立更多日誌群組的有效查詢。當您在查詢中使用 `filterIndex`命令而非 `filter`命令時，查詢會在具有欄位索引的日誌事件上針對選取的日誌群組執行。這些查詢最多可以掃描 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>

您可以透過建立欄位索引*政策來建立欄位索引*。您可以建立套用至整個帳戶的帳戶層級索引政策，也可以建立僅適用於單一日誌群組的政策。對於整個帳戶的索引政策，您可以有一個適用於帳戶中所有日誌群組的索引政策。您也可以建立套用到帳戶中日誌群組子集的帳戶層級索引政策，由其日誌群組名稱的字首選取。如果您在同一個帳戶中有多個帳戶層級政策，則這些政策的日誌群組名稱字首無法重疊。同樣地，您可以建立套用至特定資料來源名稱和類型組合的帳戶層級索引政策。每個資料來源名稱和類型組合只能建立一個帳戶政策。

日誌群組層級欄位索引政策會覆寫帳戶層級欄位索引政策：整體套用至日誌群組 （例如，沒有選取條件或日誌群組名稱字首型選取條件的帳戶層級政策）。除了符合整體日誌群組的政策之外，還會套用符合日誌事件層級的帳戶層級政策 （例如，指定資料來源名稱和類型組合）。如果您建立日誌群組層級索引政策，則該日誌群組不會使用與日誌群組層級相符的帳戶層級政策。

日誌事件與欄位索引名稱的比對會區分大小寫。例如， 的欄位索引與包含 的日誌事件`RequestId`不相符`requestId`。

您最多可以有 40 個帳戶層級索引政策，其中 20 個政策可以使用日誌群組名稱字首選擇條件，而 20 個政策可以使用資料來源型選擇條件。如果您有多個帳戶層級索引政策篩選為日誌群組名稱字首，則其中沒有任何兩個政策可以使用相同或重疊的日誌群組名稱字首。例如，如果您有一個政策篩選為以 開頭的日誌群組`my-log`，則您無法將另一個欄位索引政策篩選為 `my-logpprod`或 `my-logging`。同樣地，如果您有多個帳戶層級索引政策篩選為資料來源名稱和類型組合，則其中沒有任何兩個政策可以使用相同的資料來源名稱和類型。例如，如果您有一個政策篩選為資料來源名稱`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 日誌中為巢狀子欄位或陣列欄位的欄位編製索引。

例如，您可以在此日誌的 欄位內建立`accessKeyId`子`userIdentity`欄位的索引：

```
{
    "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. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 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. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 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. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，選擇**日誌**，然後選擇 **Logs Insights**。

1. 選取您要用於此查詢的查詢語言。您可以選擇：**Logs Insights QL**、**OpenSearch PPL** 或 **OpenSearch SQL**。

1. 有三種方式可以選取查詢的日誌群組：
   + 使用**日誌群組名稱**方塊。這是預設選擇方法。您可以使用此方法輸入最多 50 個日誌群組名稱。如果這是 CloudWatch 跨帳戶觀察功能中的監控帳戶，您可以在來源帳戶和監控帳戶中選取日誌群組。單一查詢可以一次查詢來自不同帳戶的日誌。
   + 使用**日誌群組條件**區段。在本節中，您可以根據日誌群組名稱的字首選擇日誌群組。您可以在一個查詢中包含最多五個字首。將會選取名稱中具有這些字首的日誌群組。或者，**所有日誌群組**選項會從帳戶選取所有日誌群組。
   + 如果這是 CloudWatch 跨帳戶可觀測性的監控帳戶，您可以在帳戶下拉式功能表中選取**所有**帳戶，從所有連結帳戶中選取日誌群組。或者，您可以個別選取此查詢應包含哪些帳戶。

   如果您的選擇符合超過 10，000 個日誌群組，您會看到錯誤，提示您縮小選擇範圍。

1. 查詢的預設日誌類別為**標準**。您可以使用**日誌類別**將其變更為**不常存取**。

**使用 AWS CLI**

若要在從命令列啟動查詢時進行這些類型的選擇，您可以在查詢中使用 `source`命令。如需詳細資訊和範例，請參閱 [SOURCE](CWL_QuerySyntax-Source.md)。

# 刪除欄位索引政策的效果
<a name="CloudWatchLogs-Field-Indexing-Deletion"></a>

如果您刪除已生效一段時間的欄位索引政策，會發生下列情況：
+ 在刪除政策後最多 30 天內，查詢仍然可以從索引日誌事件中受益。
+ 如果您刪除日誌群組層級索引政策，且已有適用於該日誌群組的帳戶層級政策，則帳戶層級政策最終會套用至該日誌群組。