字段索引语法和配额 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

字段索引语法和配额

您可以通过创建字段索引策略来创建字段索引。您可以创建适用于整个账户的账户级索引策略,也可以创建仅适用于单个日志组的策略。对于账户范围内的索引策略,您可以设置适用于账户中的所有日志组的索引策略。您还可以创建适用于账户中的部分日志组的账户级索引策略(按日志组名称的前缀选择)。如果在同一个账户中有多个账户级策略,则这些策略的日志组名称前缀不能重叠。同样,您可以创建适用于特定数据源名称和类型组合的账户级索引策略。每个数据源名称和类型组合只能创建一个账户策略。

日志组级别的字段索引策略优先于账户级字段索引策略:这些策略适用于整个日志组(例如,没有选择标准或基于日志组名称前缀的选择标准的账户级策略)。除了与整个日志组匹配的策略外,还将应用在日志事件级别匹配的账户级策略(例如,针对给定的数据源名称和类型组合)。如果您创建日志组级别的索引策略,则该日志组不使用与日志组级别匹配的账户级策略。

日志事件与字段索引名称的匹配区分大小写。例如,字段索引 RequestId 将无法匹配包含 requestId 的日志事件。

您最多可以有 40 个账户级别的索引策略,其中 20 个可以使用日志组名称前缀选择标准,20 个可以使用基于数据源的选择标准。如果您有多个账户级索引策略,并且它们按日志组名称前缀进行筛选,则其中任何两个策略都不能使用相同或重叠的日志组名称前缀。例如,如果您有一个策略筛选出以 my-log 开头的日志组,则不能再有一个字段索引策略筛选出以 my-logpprodmy-logging 开头的日志组。同样,如果您有多个账户级索引策略筛选为数据源名称和类型组合,则其中任何两个策略都不能使用相同的数据源名称和类型。例如,如果您将一个策略筛选为数据源名称amazon_vpc和数据源类型,flow则无法使用此组合创建另一个策略。

如果您的账户级索引策略没有名称前缀且适用于所有日志组,则无法创建其他带有日志组名称前缀筛选器的账户级索引策略;您可以创建使用数据源名称和类型筛选器的账户级索引策略。

每个索引策略都有以下配额和限制:

  • 策略中最多可以包含 20 个字段。

  • 每个字段名称最多可以包含 100 个字符。

  • 要在日志组中创建以 @ 开头的自定义字段的索引,必须在字段名称的开头额外添加一个 @ 来指定该字段。例如,如果您的日志事件包含名为 @userId 的字段,则必须指定 @@userId 才能为此字段创建索引。

对于具有基于数据源名称和类型的选择标准的账户级索引策略,还有一个额外的限制:所有字段都必须是原始数据类型,只有结构支持嵌套基元。

生成的字段和保留字段

CloudWatch Logs Insights 会在每个日志事件中自动生成系统字段。这些生成的字段以 @ 为前缀。有关生成的字段的更多信息,请参阅支持的日志和发现的字段

在这些生成的字段中,以下字段支持用作字段索引:

  • @logStream

  • @ingestionTime

  • @requestId

  • @type

  • @initDuration

  • @duration

  • @billedDuration

  • @memorySize

  • @maxMemoryUsed

  • @xrayTraceId

  • @xraySegmentId

要为这些生成的字段编制索引,指定它们时无需像对以 @ 开头的自定义字段那样添加额外的 @。例如,要为 @logStream 创建字段索引,只需将 @logStream 指定为字段索引即可。

CloudWatch 日志为标准日志类中的所有日志组提供默认字段索引。默认字段索引可自动用于以下字段:

  • @logStream

  • @aws.region

  • @aws.account

  • @source.log

  • @data_source_name

  • @data_source_type

  • @data_format

  • traceId

  • severityText

  • attributes.session.id

CloudWatch 日志还为某些数据源名称和类型组合提供默认字段索引。默认字段索引自动适用于以下数据源名称和类型组合:

数据源名称和类型 默认字段索引

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

默认字段索引是对您在策略中定义的任何自定义字段索引的补充。默认字段索引不计入字段索引配额。

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"