

# 从与 EventBridge 直接集成的 APM 摄取警报
<a name="idr-gs-ingest_alarms_from_apm_to_eventbridge"></a>

下面的主题显示了从与 Amazon EventBridge 直接集成的应用程序性能监控（APM）工具向 AWS 事件检测及响应服务发送警报的过程。有关与 Amazon EventBridge 直接集成的 APM 的完整列表，请参阅 [Amazon EventBridge integrations](https://aws.amazon.com/eventbridge/integrations)。

您可以部署所提供的 [CloudFormation 模板](https://dcl74d3hc5lj1.cloudfront.net/apms/ThirdPartyApmSaasEventBridgeIntegration.json)或手动设置此集成。在设置集成之前，请确认在您的账户中[创建了](https://docs.aws.amazon.com/IDR/latest/userguide/idr-gs-access-prov.html) AWS 服务相关角色（SLR）`AWSServiceRoleForHealth_EventProcessor`。

## 选项 1：使用 CloudFormation
<a name="idr-gs-apm-eb-cfn"></a>

可以使用 CloudFormation 模板来简化创建集成基础设施的过程，该基础设施是从与 Amazon EventBridge 集成的 APM 中将警报摄取到 AWS 事件检测及响应服务所必需的。

**注意**  
通过此 CloudFormation 模板部署的资源（例如 Lambda 和 EventBridge）会产生额外费用。有关这些服务的定价的更多信息，请参阅 [AWS 定价](https://aws.amazon.com/pricing/)。
在 AWS 事件检测及响应服务需要摄取警报的每个 AWS 账户和区域中部署此 CloudFormation 模板。事件和支持案例是在从中收到 APM 警报的 AWS 账户上开立的。
本文档以 New Relic 为例，但是 CloudFormation 模板可用于任何[将 SaaS 与 Amazon EventBridge 集成](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-saas.html)的 APM。
测试集成后，从 `TransformLambdaFunction` 中移除 logger.info() 语句，以防止有效载荷出现在 Amazon CloudWatch Logs 中。

**部署此 CloudFormation 模板的先决条件：**
+ 必须在 Amazon EventBridge 中设置合作伙伴事件源。有关将 APM 设置为事件源的说明，请参阅《Amazon EventBridge 用户指南》**中的[使用 Amazon EventBridge 从 SaaS 合作伙伴接收事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-saas.html)。
+ 必须根据 APM 有效载荷中警报名称的 JSON 路径来修改模板中的 `TransformLambdaFunction`（Lambda 函数），以便将 `["detail"]["incident-detection-response-identifier"]` 设置为所需的值。

**先决条件步骤：**

1. 打开 EventBridge 控制台。在**集成**菜单下，选择**合作伙伴事件源**。
   + 在 Amazon EventBridge 合作伙伴框中搜索您的 APM。
   + 选择**设置**，然后按照提供的说明进行操作。
     + **注意：**最后一步是在控制台中为合作伙伴事件源选择**与事件总线关联**。选择此选项会自动创建与合作伙伴事件源同名的合作伙伴事件总线（名称必须匹配）。
   + 复制合作伙伴事件总线或源的名称。部署 CloudFormation 模板时，事件总线或源用作名为 `PartnerEventBusNameParameter` 的参数。
     + New Relic 的**示例**：`aws.partner/newrelic.com/1234567/source_name`
   + 部署 CloudFormation 模板时，复制合作伙伴事件总线或源的第一部分以输入到 `PartnerEventBusPrefixParameter` 中。
     + New Relic 的示例为 `aws.partner/newrelic.com`

1. 下载并编辑 [CloudFormation 模板](https://dcl74d3hc5lj1.cloudfront.net/apms/ThirdPartyApmSaasEventBridgeIntegration.json)。
   + 在模板中找到 `TransformLambdaFunction`
   + 在 `def lambda_handler(event, context)` 下，将 `event["detail"]["incident-detection-response-identifier"]` 设置为 json 路径，在该路径中，警报名称出现在 APM 警报的 json 有效载荷中。每个 APM 都将有不同的路径。下面可以看到一些示例，但您的具体有效载荷可能会有所不同。
     + **New Relic 示例：**`event["detail"]["incident-detection-response-identifier"] = event["detail"]["workflowName"]`。
     + **Datadog 示例：**`event["detail"]["incident-detection-response-identifier"] = event["detail"]["meta"]["monitor"]["name"]`
     + **Splunk 示例：**`event["detail"]["incident-detection-response-identifier"] = event["detail"]["ruleName"]`
   + 保存 CloudFormation 模板。

**部署 CloudFormation 模板：**

1. 在您的目标账户和区域中打开 CloudFormation 控制台。

1. 依次选择“创建堆栈”、“使用新资源（标准）”
   + 选择**选择现有模板**、**上传模板文件**、**选择文件**，然后上传您本地保存的 CloudFormation 模板。

1. 指定堆栈详细信息：
   + 输入堆栈名称（*示例：*`NewRelicIntegrationForIDR`）。
   + 指定在**完成先决条件**期间获得的**参数值**。
     + APMNameParameter（*示例*：`NewRelic`）
     + PartnerEventBusNameParameter（*示例*：`aws.partner/newrelic.com/1234567/source_name`）
     + PartnerEventBusPrefixParameter（*示例*：`aws.partner/newrelic.com`）
   + 选择**下一步**。

1. 配置堆栈选项：
   + 滚动到页面底部，然后选中支持 CloudFormation 使用自定义名称创建 IAM 资源的框。

1. 审核和创建：
   + 验证参数值是否正确配置，然后选择**提交**。

1. CloudFormation 堆栈会部署必要的资源，来将您的 APM 事件集成到 AWS 事件检测及响应服务。等待堆栈状态显示 `CREATE_COMPLETE`。

1. 假设示例值已输入到 New Relic 的参数中并在 US-EAST-1 区域中运行，CloudFormation 堆栈会创建以下资源。
   + CustomEventBus：NewRelic-AWSIncidentDetectionResponse-EventBus
   + EventBridgeRule：aws.partner/newrelic.com/1234567/source\_name\|NewRelic-AWSIncidentDetectionResponse-EventBridgeRule
   + TransformLambdaExecutionRole：IDR-TransformLambdaExecutionRole-us-east-1
   + TransformLambdaFunction：NewRelic-AWSIncidentDetectionResponse-Lambda-Transform
   + TransformLambdaPermission：NewRelicIntegrationForIDR-TransformLambdaPermission-[random\_string]

**集成测试**

部署堆栈后，通过从 APM 发送测试有效载荷来测试集成：

1. 导航到 Lambda 控制台并选择 `APMNameParameter-AWSIncidentDetectionResponse-Lambda-Transform` 函数。选择**监控**选项卡。

1. 在指标图表中寻找成功的调用。

1. 选择**查看 Amazon CloudWatch Logs**，以检查日志流中是否有您的测试有效载荷或是否存在任何错误。

**与 AWS 事件检测及响应服务共享您的事件总线 ARN**

1. 打开 Amazon EventBridge 控制台。选择**事件总线**。

1. 复制作为 CloudFormation 堆栈一部分创建的**自定义事件总线**的 ARN（*示例：`arn:aws:events:us-east-1:123456789123:event-bus/NewRelic-AWSIncidentDetectionResponse-EventBus`*）。
   + 将此 ARN 添加到[工作负载详细信息 – 警报摄取问题](idr-gs-questionnaire.md#idr-gs-alarm-questionnaire)的“第三方 APM 警报”部分中的“EventBridge 事件总线 ARN”字段。

1. 在接入过程中，AWS 事件检测及响应服务会在此自定义事件总线上创建托管式 EventBridge 规则，以摄取您的 APM 警报。

## 选项 2：手动集成
<a name="idr-gs-apm-eb-manual"></a>

![该图显示了使用合作伙伴事件总线或其它 AWS 事件总线源进行集成的示例。](http://docs.aws.amazon.com/zh_cn/IDR/latest/userguide/images/example-int-partner-event-bus.png)


为 AWS 事件检测及响应服务需要从中摄取警报的每个 AWS 账户和 AWS 区域完成以下步骤。AWS 事件检测及响应服务建议在与您的应用程序资源相同的 AWS 账户和区域中设置警报，以便更快地识别和调查受影响的资源。事件和支持案例是在从中收到 APM 警报的 AWS 账户上开立的。

1. 通过将 APM 设置为 Amazon EventBridge 合作伙伴事件源，创建 EventBridge 合作伙伴事件总线（例如 `aws.partner/apm_name/integrationName`）。有关将 APM 设置为事件源的指南，请参阅[使用 Amazon EventBridge 接收来自 SaaS 合作伙伴的事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-saas.html)。

1. 执行下列操作之一：
   + （建议）创建名为 `$YourApmName-AWSIncidentDetectionResponse-EventBus` 的 EventBridge 自定义事件总线。
   + （替代）使用默认的 EventBridge 事件总线，而非自定义事件总线。

   AWS 事件检测及响应服务将通过 `AWSServiceRoleForHealth_EventProcessor` SLR，在自定义或默认事件总线上安装托管式规则 (`AWSHealthEventProcessorEventSource-DO-NOT-DELETE`)。规则源将是自定义或默认事件总线，规则目标将是 AWS 事件检测及响应服务，而规则将与用于摄取第三方 APM 事件的模式相匹配。

1. 创建名为 `$YourApmName-AWSIncidentDetectionResponse-LambdaFunction` 的 [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 函数来转换您的合作伙伴事件总线事件。转换后的事件将与托管式规则 `AWSHealthEventProcessorEventSource-DO-NOT-DELETE` 相匹配。
   + 转换后的事件包括唯一的 AWS 事件检测及响应服务标识符，并将事件的来源和详细信息类型设置为所需的值。这样，转换后的 JSON 有效载荷结构就会与托管式规则模式相匹配。
   + 将 Lambda 函数的目标设置为在步骤 2 中创建的自定义事件总线（建议）或设置为您的默认事件总线。

1. 创建 EventBridge 规则，并定义与您要推送到 AWS 事件检测及响应服务的事件列表相匹配的事件模式。规则的源是您在步骤 1 中创建的合作伙伴事件总线 (`aws.partner/apm_name/integrationName`)。规则的目标是您在步骤 3 中创建的 Lambda 函数 (`[apm_name]-AWSIncidentDetectionResponse-LambdaFunction`)。有关定义 EventBridge 规则的指南，请参阅 [Amazon EventBridge 规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)。

有关如何使用 AWS 事件检测及响应服务手动设置合作伙伴事件总线集成的分步示例，请参阅[集成来自 Datadog 和 Splunk 的通知](https://docs.aws.amazon.com/IDR/latest/userguide/example_integrating_notifications.html)。