

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

# 支持的日志和发现的字段
<a name="CWL_AnalyzeLogData-discoverable-fields"></a>

CloudWatch Logs Insights 支持不同的日志类型。对于发送到 Amazon 日志中标准类日志组的每份 CloudWatch 日 CloudWatch 志，Logs Insights 都会自动生成五个系统字段：
+ `@message` 包含原始未解析的日志事件。这等同于中的`message`字段[InputLogevent](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_InputLogEvent.html)。
+ `@timestamp` 包含日志事件的 `timestamp` 字段中事件时间戳。这等同于中的`timestamp`字段[InputLogevent](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_InputLogEvent.html)。
+ `@ingestionTime`包含 L CloudWatch ogs 收到日志事件的时间。
+ `@logStream` 包含已将日志事件添加到的日志流的名称。日志流使用与生成日志的相同进程对日志进行分组。
+ `@log` 是 `account-id:log-group-name` 形式的日志组标识符。在查询多个日志组时，这可能对于确定特定事件属于哪个日志组非常有用。
+ `@entity` 包含[探索相关遥测](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ExploreRelated.html)功能的与实体相关的扁平化 JSON。

  例如，此 JSON 可以代表一个实体。

  ```
  {
    "Entity": {
      "KeyAttributes": {
        "Type": "Service",
        "Name": "PetClinic"
      },
      "Attributes": {
        "PlatformType": "AWS::EC2",
        "EC2.InstanceId": "i-1234567890123"
      }
    }
  }
  ```

  对于此实体，提取的系统字段如下所示：

  ```
  @entity.KeyAttributes.Type = Service
  @entity.KeyAttributes.Name = PetClinic
  @entity.Attributes.PlatformType = AWS::EC2
  @entity.Attributes.EC2.InstanceId = i-1234567890123
  ```

**注意**  
仅标准日志类中的日志组支持字段发现。有关日志类的更多信息，请参阅 [日志类](CloudWatch_Logs_Log_Classes.md)。

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

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

对于带有 Logs Insights 无法自动发现的字段的其他类型的 CloudWatch 日志，您可以使用`parse`命令提取并创建提取的字段以用于该查询。有关更多信息，请参阅 [CloudWatch 日志见解语言查询语法](CWL_QuerySyntax.md)。

如果发现的日志字段的名称以`@`字符开头， CloudWatch 则 Logs Insights 会显示该字段，并在开头`@`附加一个额外的字段。例如，如果日志字段名称为 `@example.com`，则此字段名称显示为 `@@example.com`。

**注意**  
除了 `@message`、`@timestamp` 或 `@log` 之外，您还可以为已发现的字段创建字段索引。有关字段索引的更多信息，请参阅 [创建字段索引以提高查询性能并减少扫描量](CloudWatchLogs-Field-Indexing.md)。


| 日志类型 | 发现的日志字段 | 
| --- | --- | 
|  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`, `ednsClientSubnet`, `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 日志中的字段](#CWL_AnalyzeLogData-discoverable-JSON-logs)。  | 
|  CloudTrail 日志 JSON 格式的日志  |  有关更多信息，请参阅 [JSON 日志中的字段](#CWL_AnalyzeLogData-discoverable-JSON-logs)。  | 
|  其他日志类型  |  `@timestamp`, `@ingestionTime`, `@logStream`, `@message`, `@log`.  | 

## JSON 日志中的字段
<a name="CWL_AnalyzeLogData-discoverable-JSON-logs"></a>

借助 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": "192.0.2.255",
    "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 日志中提取 200 个日志事件字段。对于未提取的额外字段，您可以使用 `parse` 命令从消息字段中的原始未解析录入事件中提取这些字段。有关该`parse`命令的更多信息，请参阅 Amazon CloudWatch 用户指南中的[查询语法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html)。