本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
字段索引语法和配额
您可以通过创建字段索引策略来创建字段索引。您可以创建适用于整个账户的账户级索引策略,也可以创建仅适用于单个日志组的策略。对于账户范围内的索引策略,您可以设置一个适用于账户中所有日志组的索引策略。您还可以创建适用于账户中日志组子集的账户级索引策略,这些策略由日志组名称的前缀选择。如果您在同一个账户中有多个账户级别的策略,则这些策略的日志组名称前缀不能重叠。
日志组级别的字段索引策略优先于账户级别的字段索引策略:如果您创建日志组级别的索引策略,则该日志组将仅使用该策略,而忽略账户级别的策略。
日志事件与字段索引名称的匹配区分大小写。例如,字段索引为将与包含的日志事件RequestId
不匹配requestId
。
您可以拥有多达 20 个账户级别的索引策略。如果您有多个账户级索引策略筛选为日志组名称前缀,则其中任何两个策略都不能使用相同或重叠的日志组名称前缀。例如,如果您将一个策略筛选为以开头的日志组my-log
,则不能将另一个字段索引策略筛选为my-logpprod
或my-logging
。
如果您的账户级索引策略没有名称前缀且适用于所有日志组,则无法创建其他账户级索引策略。
每个索引策略都有以下配额和限制:
策略中最多可以包含 20 个字段。
每个字段名称最多可以包含 100 个字符。
要在日志组中创建以开头的自定义字段的索引
@
,必须在该字段名称的开@
头加一个额外的字段。例如,如果您的日志事件包含名为的字段@userId
,则必须指定@@userId
为该字段创建索引。
生成的字段和保留字段
CloudWatch Logs Insights 会在每个日志事件中自动生成系统字段。这些生成的字段以前缀@
为前缀。有关生成字段的更多信息,请参阅支持的日志和发现的字段。
在这些生成的字段中,支持将以下字段用作字段索引:
@logStream
@ingestionTime
@requestId
@type
@initDuration
@duration
@billedDuration
@memorySize
@maxMemoryUsed
@xrayTraceId
@xraySetmentId
要为这些生成的字段编制索引,您无需在指定它们@
时添加额外的字段,就像对以开头的自定义字段所做的那样@
。例如,要为其创建字段索引@logStream
,只需指定@logStream
为字段索引即可。
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"