欄位索引語法和配額 - Amazon CloudWatch Logs

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

欄位索引語法和配額

您可以透過建立欄位索引政策來建立欄位索引。您可以建立套用至整個帳戶的帳戶層級索引政策,也可以建立僅適用於單一日誌群組的政策。對於整個帳戶的索引政策,您可以有一個適用於帳戶中所有日誌群組的索引政策。您也可以建立套用到帳戶中日誌群組子集的帳戶層級索引政策,由其日誌群組名稱的字首選取。如果您在同一個帳戶中有多個帳戶層級政策,則這些政策的日誌群組名稱字首無法重疊。

日誌群組層級欄位索引政策會覆寫帳戶層級欄位索引政策:如果您建立日誌群組層級索引政策,該日誌群組只會使用該政策,並忽略帳戶層級政策。

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

您最多可以有 20 個帳戶層級索引政策。如果您有多個帳戶層級索引政策篩選為日誌群組名稱字首,則其中沒有任何兩個可以使用相同或重疊的日誌群組名稱字首。例如,如果您有一個政策篩選為以 開頭的日誌群組my-log,則無法將另一個欄位索引政策篩選為 my-logpprodmy-logging

如果您的帳戶層級索引政策沒有名稱字首且適用於所有日誌群組,則無法建立其他帳戶層級索引政策。

每個索引政策都有下列配額和限制:

  • 政策最多可包含 20 個欄位。

  • 每個欄位名稱最多可包含 100 個字元。

  • 若要在以 開頭的日誌群組中建立自訂欄位的索引@,您必須在欄位名稱的@開頭指定具有額外 的欄位。例如,如果您的日誌事件包含名為 的欄位@userId,您必須指定 @@userId 為此欄位建立索引。

產生的欄位和預留欄位

CloudWatch Logs Insights 會在每個日誌事件中自動產生系統欄位。這些產生的欄位字首為 @,如需所產生欄位的詳細資訊,請參閱 支援的日誌和探索的欄位

在這些產生的欄位中,支援使用下列項目做為欄位索引:

  • @logStream

  • @ingestionTime

  • @requestId

  • @type

  • @initDuration

  • @duration

  • @billedDuration

  • @memorySize

  • @maxMemoryUsed

  • @xrayTraceId

  • @xraySetmentId

若要為這些產生的欄位編製索引,您不需要在指定@時新增額外的 ,因為您必須對開頭為 的自訂欄位執行此操作@。例如,若要建立 的欄位索引@logStream,只要指定 @logStream做為欄位索引即可。

JSON 日誌中的子欄位和陣列欄位

您可以在 JSON 日誌中為巢狀子欄位或陣列欄位的欄位編製索引。

例如,您可以在此日誌的 欄位內建立accessKeyIduserIdentity欄位的索引:

{ "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"