

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

# 为 Amazon EventBridge 事件总线配置日志
<a name="eb-event-bus-logs"></a>

您可以配置 EventBridge 为发送详细说明事件总线如何处理事件的日志，以帮助进行故障排除和调试。

您可以选择以下 AWS 服务作为*日志目的地*，将指定事件总线的日志 EventBridge 传送到这些目的地：
+ Amazon CloudWatch 日志

  EventBridge 将日志传送到指定的 CloudWatch 日志日志组。

  使用 CloudWatch 日志将您使用的所有系统、应用程序和 AWS 服务的日志集中到一个高度可扩展的服务中。有关更多信息，请参阅 *Amazon 日志用户指南中的使用日志组和 CloudWatch 日志*[流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。
+ Amazon Data Firehose 

  EventBridge 将日志传送到 Firehose 传输流。

  Amazon Data Firehose 是一项完全托管的服务，用于将实时流数据传送到目的地，例如某些 AWS 服务以及受支持的第三方服务提供商拥有的任何自定义 HTTP 终端节点或 HTTP 终端节点。有关更多信息，请参阅《Amazon Data Firehose User Guide》**中的 [Creating an Amazon Data Firehose delivery stream](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)。
+ Amazon S3 

  EventBridge 将日志作为 Amazon S3 对象传输到指定的存储桶。

  Amazon S3 是一项对象存储服务，提供行业领先的可扩展性、数据可用性、安全性和性能。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[在 Amazon S3 中上传、下载和使用对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/uploading-downloading-objects.html)。

## 事件总线如何进行日志记录
<a name="eb-event-logs-overview"></a>

EventBridge 生成以下内容的日志：
+ 任何与事件总线上的规则相匹配的 AWS 服务事件
+ 通过以下方法传送的任何事件（无论事件是否成功摄取或与任何规则相匹配）：
  + 来自[合作伙伴事件源](eb-saas.md)的事件
  + [从归档中重播](eb-archive.md)的事件
  + 通过 [`PutEvents`](eb-putevents.md) 发送到总线的事件

EventBridge 不记录仅匹配[托管规则](eb-rules.md#eb-rules-managed)的事件。

发送到每个选定日志目标的日志数据是相同的。

您可以通过以下方式自定义 EventBridge 发送到所选目的地的日志：
+ 您可以指定*日志级别，该级别*决定了向所选目标 EventBridge发送日志的步骤。有关更多信息，请参阅 [指定事件总线日志级别](#eb-event-bus-logs-level)。
+ 您可以指定在相关时是否 EventBridge 包含更精细的信息，包括：
  + 事件详细信息
  + 目标输入信息
  + 目标请求信息

  有关更多信息，请参阅 [在事件总线日志中包含详细数据](#eb-event-logs-data)。

### 日志传送注意事项
<a name="eb-event-logs-delivery"></a>

配置事件总线的日志记录时，请记住以下注意事项：
+ 事件总线日志记录会以最大努力进行传送。针对已正确配置了日志记录的事件总线的大多数请求会导致传送一条日志记录。因此不能保证事件总线日志记录的完整性和即时性。
+ 在某些情况下，传送事件总线日志记录本身会生成事件，然后将其发送到 EventBridge，这可能会导致日志记录传输中断。因此， EventBridge 不记录以下事件：
  + AWS KMS `[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)`以及使用客户托管密钥加密的日志记录传送到日志目标时生成`[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)`的事件。
  + 事件总线日志传送过程中，Firehose 中生成的 `[PutRecordBatch](https://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecordBatch.html)` 事件。
+ 对于 S3 日志目标，不建议指定 EventBridge启用[事件通知的](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-event-notifications-eventbridge.html)目标存储桶，因为这可能会导致日志传输中断。

### 日志加密
<a name="eb-event-logs-encryption"></a>

发送日志时， EventBridge 使用为事件总线指定的 KMS 密钥对每条日志记录的`detail`和`error`部分进行加密。记录一经传送，就会被解密，然后使用为日志目标指定的 KMS 密钥重新加密。

有关更多信息，请参阅 [对事件总线日志进行加密](encryption-bus-logs.md)。

### 指定事件总线日志记录权限
<a name="eb-event-logs-permission"></a>

要启用来自事件总线的日志记录，必须授予从该总线发送日志的权限。 EventBridge 添加向事件总线授**AllowVendedLogDeliveryForResource**予权限的策略。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ServiceLevelAccessForLogDelivery",
            "Effect": "Allow",
            "Action": [
                "events:AllowVendedLogDeliveryForResource"
            ],
            "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/my-event-bus*"
        }
    ]
}
```

------

有关更多信息，请参阅《*CloudWatch 日志用户指南》*中的[服务特定权限](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions)。

## 指定事件总线日志级别
<a name="eb-event-bus-logs-level"></a>

您可以指定 EventBridge 记录到所选日志目标的事件处理步骤的类型。

从以下详细级别中选择要包含在日志中的内容。日志级别适用于为事件总线指定的所有日志目标。每个日志级别都包含之前日志级别的步骤。
+ **OFF** — EventBridge 不发送任何日志。这是默认值。
+ **ERROR**- EventBridge 发送与事件处理和目标交付期间生成的错误相关的所有日志。
+ **信息**- EventBridge 发送与错误相关的所有日志，以及事件处理期间执行的主要步骤。
+ **TRACE** — EventBridge 发送在事件处理的所有步骤中生成的所有日志。

下表列出了每个日志级别包含的事件处理步骤。


| 步骤 | 跟踪 | 信息 | 错误 | 关闭 | 
| --- | --- | --- | --- | --- | 
|  事件摄取  | x | x |  |  | 
|  事件摄取失败  | x | x | x |  | 
|  事件已接收  | x |  |  |  | 
|  调用尝试开始  | x |  |  |  | 
|  调用尝试永久性失败  | x | x | x |  | 
|  调用尝试可重试失败  | x | x | x |  | 
|  调用尝试成功  | x |  |  |  | 
|  调用尝试受限  | x | x | x |  | 
|  调用死信队列  | x | x | x |  | 
|  调用失败  | x | x | x |  | 
|  调用开始  | x | x |  |  | 
|  调用成功  | x | x |  |  | 
|  调用限流开始  | x | x | x |  | 
|  无规则匹配  | x | x |  |  | 
|  规则已匹配   | x | x |  |  | 
|  规则匹配开始   | x |  |  |  | 

## 在事件总线日志中包含详细数据
<a name="eb-event-logs-data"></a>

您可以为指定 EventBridge ，以便在其生成的日志中包含更精细的信息。这些数据对于故障排除和调试很有用。如果选择此选项，则会将此数据 EventBridge 包含在所有指定日志目标的相关记录中。

详细信息包含以下字段：
+ `event_detail`：事件本身的详细信息。
+ `target_input`：请求 EventBridge 发送到目标。
+ `target_properties`: 

## 截断事件总线日志中的数据
<a name="eb-event-logs-data-truncation"></a>

由于日志目标限制，日志记录 EventBridge 限制在 1 MB 以内。如果日志记录超过此限制，则按以下顺序删除以下字段来 EventBridge 截断该记录：
+ `target_input`
+ `target_properties`
+ `target_response_body`

EventBridge 如有必要，将该`event_detail`字段从以下日志记录类型中删除：
+ `EVENT_RECEIVED`
+ `EVENT_INGESTED`
+ `EVENT_INGESTED_FAILED`
+ `RULE_MATCH_STARTED`

如果需要截断，则 EventBridge 删除整个字段。

 EventBridge 如果在事件中截断字段，则该`dropped_fields`字段将包含已删除的数据字段的列表。

## 事件总线日志中报告的错误
<a name="eb-event-logs-errors"></a>

EventBridge 在表示故障状态的步骤中还包括错误数据（如果有）。这些步骤包括：
+ `EVENT_INGEST_FAILURE`
+ `INVOCATION_THROTTLE_START`
+ `INVOCATION_ATTEMPT_THROTTLE`
+ `INVOCATION_ATTEMPT_RETRYABLE_FAILURE`
+ `INVOCATION_ATTEMPT_PERMANENT_FAILURE`
+ `INVOCATION_FAILURE`
+ `INVOCATION_DLQ`

# Amazon 为事件总线 EventBridge 记录了什么
<a name="eb-event-logs-execution-steps"></a>

了解 EventBridge 进程事件如何帮助您使用日志对事件总线问题进行故障排除或调试。

如果启用了日志记录，则会在处理事件时 EventBridge 生成多条日志记录。

以下是处理事件时 EventBridge 执行的主要步骤：
+ 事件被发送到事件总线

  EventBridge 生成从合作伙伴来源发送的事件、从档案中重播的事件或使用发送的事件的日志`PutEvents`，无论它们是否符合任何规则。
+ EventBridge 确定事件是否符合总线上的任何规则。

  如果事件符合一条或多条规则 EventBridge ，则继续下一步。

  如果 AWS 事件与任何规则都不匹配，则 EventBridge 丢弃该事件并且不生成任何日志。
+ EventBridge 调用目标。

  EventBridge 必要时重试调用目标，直到：
  + 事件成功送达。
  + 事件送达失败（例如重试策略过期或发生永久性故障）。

    如果传送失败，则将事件 EventBridge 发送到死信队列 (DLQ)（如果已指定 DLQ），如果未指定 DLQ，则将其丢弃。

下图展示了事件处理流程的详细视图，包含所有可能的步骤以及每个步骤的日志级别。

有关步骤的完整列表，请参阅[指定日志级别](eb-event-bus-logs.md#eb-event-bus-logs-level)。

![\[EventBridge 继续执行处理发送到总线的每个事件的步骤。\]](http://docs.aws.amazon.com/zh_cn/eventbridge/latest/userguide/images/bus_logging_eventbridge_conceptual.svg)


# Amazon EventBridge 事件总线日志架构
<a name="eb-event-logs-schema"></a>

以下参考详细介绍了 EventBridge 事件总线日志记录的架构。每条记录代表 EventBridge 处理特定事件的步骤。

有关更多信息，请参阅 [记录事件总线 ](eb-event-bus-logs.md)。

```
{    
    "resource\$1arn": "arn:aws:events:region:account:event-bus/bus-name",
    "request\$1id": "guid", 
    "event\$1id": "guid", 
    "invocation\$1id": "guid",
    "message\$1timestamp\$1ms": "date_time",    
    "message\$1type": "step",  
    "log\$1level": "TRACE | INFO | ERROR",
    "details": {
      },
    "error": {  
        "http\$1status\$1code": code,  
        "error\$1message": "error_message",  
        "aws\$1service": "service_name",  
        "request\$1id": "service_request_id"  
    }  
}
```

**resource\$1arn**  <a name="event-log-schema-resource-arn"></a>
事件总线对应的 Amazon 资源名称（ARN）。

**request\$1id**  <a name="event-log-schema-request-id"></a>
请求的 ID。

**event\$1id**  <a name="event-log-schema-event-id"></a>
正在处理的事件的 ID。

**invocation\$1id**  <a name="event-log-schema-invocation-id"></a>
事件调用的 ID。

**message\$1timestamp\$1ms**  <a name="event-log-schema-timestamp"></a>
发出日志事件的日期和时间。  
单位：毫秒

**message\$1type**  <a name="event-log-schema-message-type"></a>
生成日志记录的事件处理步骤。  
有关处理事件时 EventBridge 执行的步骤的更多信息，请参阅[Amazon 为事件总线 EventBridge 记录了什么](eb-event-logs-execution-steps.md)。  
*有效值：*  
+ `EVENT_INGEST_FAILURE`
+ `EVENT_INGEST_SUCCESS`
+ `EVENT_RECEIPT`
+ `INVOCATION_ATTEMPT_PERMANENT_FAILURE`
+ `INVOCATION_ATTEMPT_RETRYABLE_FAILURE`
+ `INVOCATION_ATTEMPT_START`
+ `INVOCATION_ATTEMPT_SUCCESS`
+ `INVOCATION_ATTEMPT_THROTTLE`
+ `INVOCATION_DLQ`
+ `INVOCATION_FAILURE`
+ `INVOCATION_START`
+ `INVOCATION_SUCCESS`
+ `INVOCATION_THROTTLE_START`
+ `NO_STANDARD_RULES_MATCHED`
+ `RULE_MATCH`
+ `RULE_MATCH_START`

**log\$1level**  <a name="event-log-schema-loglevel"></a>
为事件总线日志指定的详细级别。  
*有效值*：`ERROR` \$1 `INFO` \$1 `TRACE`  
有关更多信息，请参阅 [指定事件总线日志级别](eb-event-bus-logs.md#eb-event-bus-logs-level)。

**details**  <a name="event-log-schema-details"></a>
包含基于步骤详细信息类型的步骤详细信息。  
以下消息类型会返回下面列出的字段：  
+ `EVENT_INGEST_SUCCESS`
+ `EVENT_INGEST_FAILURE`
+ `EVENT_RECEIPT`
+ `RULE_MATCH_START`

```
{
  "caller_account_id": "account_id",
  "source_time_ms": date_time,
  "source": "source",
  "detail_type": " type",
  "resources": [],
  "event_detail": "{}"
}
```
以下消息类型会返回下面列出的字段：  
+ `RULE_MATCH`

```
{
  "rule_arn": "ARN",
  "target_arns": [
    "ARN"
  ],
  "invocation_ids": [
    "guid"
  ]
}
```
以下消息类型会返回下面列出的字段：  
+ `INVOCATION_ATTEMPT_START`
+ `INVOCATION_START`
+ `INVOCATION_THROTTLE_START`

```
{
  "rule_arn": "ARN",
  "role_arn": "ARN",
  "target_arn": "ARN",
  "attempt_count": Integer,
  "target_input": "string",
  "target_properties": "string"
}
```
以下消息类型会返回下面列出的字段：  
+ `INVOCATION_DLQ`
+ `INVOCATION_FAILURE`
+ `INVOCATION_SUCCESS`

```
{
  "rule_arn": "ARN",
  "role_arn": "ARN",
  "target_arn": "ARN",
  "target_input": "string",
  "target_properties": "string",
  "total_attempts": Integer,
  "final_invocation_status": "status",
  "ingestion_to_start_latency_ms": Integer,
  "ingestion_to_complete_latency_ms": Integer,
  "ingestion_to_success_latency_ms": Integer,
  "target_duration_ms": Integer,
  "target_response_body": "string"
}
```
`ingestion_to_start_latency_ms` 和 `ingestion_to_complete_latency_ms` 仅包含在首次调用尝试中。仅在成功调用时包含 `ingestion_to_success_latency_ms` 字段。  
以下消息类型会返回下面列出的字段：  
+ `INVOCATION_ATTEMPT_PERMANENT_FAILURE`
+ `INVOCATION_ATTEMPT_RETRYABLE_FAILURE`
+ `INVOCATION_ATTEMPT_SUCCESS`
+ `INVOCATION_ATTEMPT_THROTTLE`

```
{
  "rule_arn": "ARN",
  "role_arn": "ARN",
  "target_arn": "ARN",
  "attempt_type": "FIRST | THROTTLE | RETRY",
  "attempt_count": Integer,
  "invocation_status": "status",
  "target_duration_ms": Integer,
  "target_response_body": "string"
}
```

**dropped\$1fields**  <a name="event-log-schema-dropped_fields"></a>
为了使记录保持在 1 MB 大小限制以下，所有数据字段的列表都 EventBridge 已被截断。  
EventBridge 如果此字段已截断任何详细信息字段，则不包括该字段。  
有关更多信息，请参阅 [截断事件总线日志中的数据](eb-event-bus-logs.md#eb-event-logs-data-truncation)。

**错误**  <a name="event-log-schema-error"></a>
包含在此步骤中生成的任何错误的相关信息。对于错误，EV 始终包含以下字段：  
+ `error_message`
+ `aws_service`
以及以下字段（如果有）：  
+ `request_id`
+ `http_status_code`
如果在此步骤中未生成错误， EventBridge 则不要在日志记录中包含此字段。    
**http\$1status\$1code**  <a name="event-log-schema-http-status-code"></a>
调用的服务返回的 HTTP 状态代码。  
**error\$1message**  <a name="event-log-schema-message"></a>
调用的服务返回的错误消息。  
**aws\$1service**  <a name="event-log-schema-aws-service"></a>
被调用服务的名称。  
**请求\$1id**  <a name="event-log-schema-error-request-id"></a>
来自被调用服务的此请求的 ID。