支持的日志和发现的字段 - Amazon CloudWatch Logs
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

支持的日志和发现的字段

CloudWatch Logs Insights 支持不同的日志类型。对于发送到 Amazon CloudWatch Logs 的每个日志,CloudWatch Logs Insights 会自动生成五个系统字段:

  • @message 包含原始未解析的日志事件。这等同于 InputLogevent 中的 message 字段。

  • @timestamp 包含日志事件的 timestamp 字段中事件时间戳。这等同于 InputLogevent 中的 timestamp 字段。

  • @ingestionTime 包含 CloudWatch Logs 接收日志事件的时间。

  • @logStream 包含已将日志事件添加到的日志流的名称。日志流使用与生成日志的相同进程对日志进行分组。

  • @logaccount-id:log-group-name 形式的日志组标识符。在查询多个日志组时,这可能对于确定特定事件属于哪个日志组非常有用。

CloudWatch Logs Insights 在其生成的字段的开头插入 @ 符号。

对于许多日志类型,CloudWatch Logs 还会自动发现日志中包含的日志字段。这些自动发现字段如下表所示。

对于具有 CloudWatch Logs Insights 不会自动发现的字段的其他类型日志,您可以使用 parse 命令来提取并创建临时字段以用于该查询中。有关更多信息,请参阅 CloudWatch Logs Insights 查询语法

如果发现的日志字段的名称以 @ 字符开头,则 CloudWatch Logs Insights 显示它时会在开头另外加上一个 @。例如,如果日志字段名称为 @example.com,则此字段名称显示为 @@example.com

日志类型 发现的日志字段

Amazon VPC 流日志

@timestamp, @logStream, @message, accountId, endTime, interfaceId, logStatus, startTime, version, action, bytes, dstAddr, dstPort, packets, protocol, srcAddr, srcPort

Route 53 日志

@timestamp, @logStream, @message, edgeLocation, hostZoneId, protocol, queryName, queryTimestamp, queryType, resolverIp, responseCode, version

Lambda 日志

@timestamp, @logStream, @message, @requestId, @duration, @billedDuration, @type, @maxMemoryUsed, @memorySize

如果 Lambda 日志行包含 X-Ray 跟踪 ID,则表明它还包括以下字段:@xrayTraceId@xraySegmentId

CloudWatch Logs Insights 自动发现 Lambda 日志中的日志字段,但仅适用于每个日志事件中的第一个嵌入式 JSON 片段。如果 Lambda 日志事件包含多个 JSON 片段,您可以使用 parse 命令解析并提取日志字段。有关更多信息,请参阅 JSON 日志中的字段

CloudTrail 日志

JSON 格式的日志

有关更多信息,请参阅 JSON 日志中的字段

其他日志类型

@timestamp, @ingestionTime, @logStream, @message, @log.

JSON 日志中的字段

借助 CloudWatch Logs Insights,您可以使用点表示法表示 JSON 字段。本节包含一个示例 JSON 事件和代码片段,向您展示如何使用点表示法访问 JSON 字段。

示例:JSON 事件

{ "eventVersion": "1.0", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn: aws: iam: : 123456789012: user/Alice", "accessKeyId": "EXAMPLE_KEY_ID", "accountId": "123456789012", "userName": "Alice" }, "eventTime": "2014-03-06T21: 22: 54Z", "eventSource": "ec2.amazonaws.com", "eventName": "StartInstances", "awsRegion": "us-east-2", "sourceIPAddress": "205.251.233.176", "userAgent": "ec2-api-tools1.6.12.2", "requestParameters": { "instancesSet": { "items": [ { "instanceId": "i-abcde123" } ] } }, "responseElements": { "instancesSet": { "items": [ { "instanceId": "i-abcde123", "currentState": { "code": 0, "name": "pending" }, "previousState": { "code": 80, "name": "stopped" } } ] } } }

该示例 JSON 事件包含一个名为 userIdentity 的对象。userIdentity 包含一个名为 type 的字段。要使用点表示法表示 type 的值,请使用 userIdentity.type

该示例 JSON 事件包含多个数组,它们展平到嵌套字段名称和值的列表。要表示 requestParameters.instancesSet 中第一个项目的 instanceId 值,请使用 requestParameters.instancesSet.items.0.instanceId。放置在字段 instanceID 之前的数字 0 是指字段 items 的值的位置。下面的示例包含一个代码片段,向您展示如何访问 JSON 日志事件中的嵌套 JSON 字段。

示例:查询

fields @timestamp, @message | filter requestParameters.instancesSet.items.0.instanceId="i-abcde123" | sort @timestamp desc

此代码片段显示的查询将点表示法与 filter 命令结合使用,以访问嵌套 JSON 字段 instanceId 的值。该查询将筛选 instanceId 的值等于 "i-abcde123" 的消息,并返回包含指定值的所有录入事件。

注意

CloudWatch Logs Insights 最多可以从 JSON 日志中提取 1000 个录入事件字段。对于未提取的额外字段,您可以使用 parse 命令从消息字段中的原始未解析录入事件中提取这些字段。有关 parse 命令的更多信息,请参阅《Amazon CloudWatch 用户指南》中的查询语法