

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

# 将 CloudWatch 指标与 Amazon Managed Service for Prometheus 集成
<a name="integrating-cw-firehose"></a>

将所有指标集中在一个地方会有所帮助。Amazon Managed Service for Prometheus 不会自动摄取 Amazon CloudWatch 指标。不过，您可以使用 Amazon Data Firehose 和 AWS Lambda 将 CloudWatch 指标推送到 Amazon Managed Service for Prometheus。

本节介绍如何检测 [Amazon CloudWatch 指标流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Metric-Streams.html)以及使用 [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) 和 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 将指标摄取到 Amazon Managed Service for Prometheus。

您将使用 [AWS 云开发工具包（CDK）](https://aws.amazon.com/cdk/)设置堆栈，以创建 Firehose 传输流、Lambda 和 Amazon S3 存储桶来演示完整的场景。

## 基础设施
<a name="integ-cw-fh-infrastructure"></a>

首先，您必须为该配方设置基础设施。

通过 CloudWatch 指标流可以将流式指标数据转发到 HTTP 终端节点或 [Amazon S3 桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)。

设置基础设施涵盖 4 个步骤：
+ 配置先决条件
+ 创建 Amazon Managed Service for Prometheus 工作区。
+ 安装依赖项
+ 部署堆栈

**先决条件**
+ 已在您的环境中[安装](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)和[配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) AWS CLI。
+ 已在您的环境中安装 [AWS CDK Typescript](https://docs.aws.amazon.com/cdk/latest/guide/work-with-cdk-typescript.html)。
+ 已在您的环境中安装 Node.js 和 Go。
+ [AWS 可观察性 CloudWatch 指标导出器 github 存储库](https://github.com/aws-observability/observability-best-practices/tree/main/sandbox/CWMetricStreamExporter)（`CWMetricsStreamExporter`）已克隆到您的本地计算机。

**创建 Amazon Managed Service for Prometheus 工作区**

1. 此配方中的演示应用程序将基于 Amazon Managed Service for Prometheus 运行。通过以下命令创建 Amazon Managed Service for Prometheus 工作区：

   ```
   aws amp create-workspace --alias prometheus-demo-recipe
   ```

1. 使用以下命令确保您的工作区已创建：

   ```
   aws amp list-workspaces
   ```

   有关 Amazon Managed Service for Prometheus 的更多信息，请参阅 [Amazon Managed Service for Prometheus](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-getting-started.html) 用户指南。

**安装依赖项**

1. **安装依赖项**

   在 `aws-o11y-recipes` 存储库的根目录中，使用以下命令将您的目录更改为 `CWMetricStreamExporter`：

   ```
   cd sandbox/CWMetricStreamExporter
   ```

   今后，这将被视为存储库的根目录。

1. 通过以下命令将目录更改为 `/cdk`：

   ```
   cd cdk
   ```

1. 通过以下命令安装 CDK 依赖项。

   ```
   npm install
   ```

1. 将目录更改回存储库的根目录，然后使用以下命令将目录更改为 `/lambda`：

   ```
   cd lambda
   ```

1. 进入 `/lambda` 文件夹后，使用以下命令安装 Go 依赖项：

   ```
   go get
   ```

   所有依赖项现已安装完毕。

**部署堆栈**

1. 在存储库的根目录中，打开 `config.yaml`，将 `{workspace}` 替换为新创建的工作区 ID，将区域替换为您的 Amazon Managed Service for Prometheus 工作区所在的区域，从而修改 Amazon Managed Service for Prometheus 工作区 URL。

   例如，修改以下内容：

   ```
   AMP: 
       remote_write_url: "https://aps-workspaces.us-east-2.amazonaws.com/workspaces/{workspaceId}/api/v1/remote_write" 
       region: us-east-2
   ```

   根据自己的喜好更改 Firehose 传输流和 Amazon S3 存储桶的名称。

1. 要构建 AWS CDK 和 Lambda 代码，请在存储库的根目录中运行以下命令：

   ```
   npm run build
   ```

   此构建步骤可确保构建 Go Lambda 二进制文件，并将 CDK 部署到 CloudFormation。

1. 要完成部署，请查看并接受堆栈所需的 IAM 更改。

1. （可选）可以运行以下命令确认堆栈是否已创建。

   ```
   aws cloudformation list-stacks
   ```

   名为 `CDK Stack` 的堆栈将出现在列表中。

## 创建 Amazon CloudWatch 流
<a name="integ-cw-fh-stream"></a>

现在，您已经有一个用来处理这些指标的 lambda 函数，您可以从 Amazon CloudWatch 创建指标流。

**创建 CloudWatch 指标流**

1. 导航到 CloudWatch 控制台，网址为 [https://console.aws.amazon.com/cloudwatch/home\#metric-streams:streamsList](https://console.aws.amazon.com/cloudwatch/home#metric-streams:streamsList)，然后选择**创建指标流**。

1. 选择所需的指标，可以是所有指标，也可以仅仅是选定命名空间中的指标。

1. 在 `Configuration` 下，选择**选择您的账户拥有的现有 Firehose**。

1. 您将使用之前通过 CDK 创建的 Firehose。在**选择您的 Kinesis Data Firehose 流**下拉列表中，选择之前创建的流。其名字将为 `CdkStack-KinesisFirehoseStream123456AB-sample1234`。

1. 将输出格式设置为 **JSON**。

1. 为指标流创建一个对您有意义的名称。

1. 选择 **Create metric filter（创建指标流）**。

1. （可选）要验证 Lambda 函数的调用，请导航到 [Lambda 控制台](https://console.aws.amazon.com/lambda/home)并选择函数 `KinesisMessageHandler`。选择**监控**选项卡和 **Logs** 子选项卡，在**最近调用**下应该有所触发的 Lambda 函数的条目。
**注意**  
最长可能需要 5 分钟，调用才会开始显示在**监控**选项卡中。

现在，您的指标应该在从 Amazon CloudWatch 传输到 Amazon Managed Service for Prometheus。

## 清理
<a name="integ-cw-fh-cleanup"></a>

您可能需要清除您在本示例中使用的资源。以下步骤将说明如何操作。这将停止您创建的指标流。

**清理资源**

1. 首先使用以下命令删除 CloudFormation 堆栈：

   ```
   cd cdk
   cdk destroy
   ```

1. 删除 Amazon Managed Service for Prometheus 工作区：

   ```
   aws amp delete-workspace --workspace-id \
       `aws amp list-workspaces --alias prometheus-sample-app --query 'workspaces[0].workspaceId' --output text`
   ```

1. 最后，使用 [Amazon CloudWatch 控制台](https://console.aws.amazon.com/cloudwatch/home#metric-streams:streamsList)删除 Amazon CloudWatch 指标流。