

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

# 欄位索引語法和配額
<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"
```