

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

# 使用 Terraform 在 Amazon Managed Grafana 上自动摄取和可视化 Amazon MWAA 自定义指标
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics"></a>

*Faisal Abdullah 和 Satya Vajrapu，Amazon Web Services*

## Summary
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-summary"></a>

此模式讨论如何使用 Amazon Managed Grafana 创建和监控 Amazon Managed Workflows for Apache Airflow（Amazon MWAA）摄取的自定义指标。Amazon MWAA 充当工作流程的协调器，它使用用 Python 编写脚本的有向无环图 (DAGs)。这种模式以监控自定义指标为中心，包括过去一小时内 DAGs 运行的总数、 DAGs 每小时通过和失败的计数以及这些进程的平均持续时间。此分析显示了 Amazon Managed Grafana 如何与 Amazon MWAA 集成，从而能够全面监控和洞察该环境中的工作流编排。

## 先决条件和限制
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-prereqs"></a>

**先决条件**
+  AWS 账户 具有创建和管理以下内容所需的用户权限的活跃用户 AWS 服务：
  + AWS Identity and Access Management (IAM) 角色和策略
  + AWS Lambda
  + Amazon Managed Grafana
  + Amazon Managed Workflows for Apache Airflow (Amazon MWAA)
  + Amazon Simple Storage Service（Amazon S3）
  + Amazon Timestream
+ 访问 Shell 环境，它可以是本地计算机上的终端，也可以是 [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)。
+ 安装了 Git 并安装和配置了最新版本的 AWS Command Line Interface (AWS CLI) 的 shell 环境。有关更多信息，请参阅 AWS CLI 文档 AWS CLI中的[安装或更新到最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)的。
+ 安装了以下 Terraform 版本：`required_version = ">= 1.6.1, < 2.0.0"`您可以使用 [tfswitch](https://tfswitch.warrensbox.com/) 在不同版本的 Terraform 之间切换。
+ 已在中 AWS IAM Identity Center 为您配置身份源 AWS 账户。有关更多信息，请参阅 IAM Identity Center 文档中的[在 IAM Identity Center 中确认身份源](https://docs.aws.amazon.com/singlesignon/latest/userguide/prereq-identity-sources.html)。您可以从默认 IAM Identity Center 目录的 Active Directory 或外部身份提供者 (IdP) 中进行选择，例如 Okta。有关更多信息，请参阅[相关资源](#automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources)。

**限制**
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

**产品版本**
+ Terraform `required_version = ">= 1.6.1, < 2.0.0"`
+ Amazon Managed Grafana 9.4 或更高版本。此模式已在版本 9.4 上进行了测试。

## 架构
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-architecture"></a>

以下架构图重点介绍了解决方案中 AWS 服务 使用的架构。

![\[自动摄取 Amazon MWAA 自定义指标的工作流。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/3458d0a9-aee1-428a-bf2f-c357bb531c64/images/b43ed8d2-94ac-4438-913b-81c7eba8f3e0.png)


上图中分步介绍了以下工作流：

1. Amazon MWAA 中的自定义指标源 DAGs 于在环境中执行的指标。指标以 CSV 文件格式上传到 Amazon S3 存储桶。以下内容 DAGs 使用 Amazon MWAA 的数据库查询功能：
   + `run-example-dag` – 此 DAG 包含定义一个或多个任务的示例 Python 代码。它每 7 分钟运行一次，并打印日期。打印日期后，DAG 会包含一项使执行的任务睡眠或暂停特定持续时间的任务。
   + `other-sample-dag` – 此 DAG 每 10 分钟运行一次，并打印日期。打印日期后，DAG 会包含一项使执行的任务睡眠或暂停特定持续时间的任务。
   + `data-extract` – 此 DAG 每小时运行一次，查询 Amazon MWAA 数据库并收集指标。收集完指标后，此 DAG 会将其写入到 Amazon S3 存储桶，以便进一步处理和分析。

1. 为了简化数据处理，Lambda 函数在被 Amazon S3 事件触发时运行，这样便于将指标加载到 Timestream 中。

1. Timestream 作为数据来源集成到 Amazon Managed Grafana 中，来自 Amazon MWAA 的所有自定义指标都存储在那里。

1. 用户可以查询数据并构造自定义控制面板，以可视化关键绩效指标，深入了解 Amazon MWAA 中的工作流编排。

## 工具
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-tools"></a>

**AWS 服务**
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)帮助您集中管理对所有应用程序 AWS 账户 和云应用程序的单点登录 (SSO) 访问权限。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。它只在需要时运行您的代码，并自动进行扩展，因此您只需为使用的计算时间付费。在这种模式下， AWS Lambda 运行 Python 代码以响应 Amazon S3 事件并自动管理计算资源。
+ [Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html) 是一种完全托管式数据可视化服务，您可以使用该服务查询、关联和可视化您的指标、日志和跟踪，并发出提醒。此模式使用 Amazon Managed Grafana 创建用于指标可视化和提醒的控制面板。
+ [Amazon Managed Workflows for Apache Airflow（Amazon MWAA）](https://docs.aws.amazon.com/mwaa/latest/userguide/what-is-mwaa.html)是 Apache Airflow 的托管式编排服务，让您能够更轻松地在云中大规模设置和操作数据管道。[Apache Airflow](https://airflow.apache.org/) 是一种开源工具，用于以编程方式编写、调度和监视统称为工作流的各种流程和任务序列。在这种模式中，示例 DAGs 和指标提取器 DAG 部署在 Amazon MWAA 中。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。在这种模式中，Amazon S3 用于以 CSV 格式存储 DAGs、脚本和自定义指标。
+ [Amazon Timestream](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) for LiveAnalytics 是一个快速、可扩展、完全托管、专门构建的时间序列数据库，可轻松存储和分析每天数万亿个时间序列数据点。Timestream LiveAnalytics 还与用于数据收集、可视化和机器学习的常用服务集成。在此模式中，它用于摄取生成的 Amazon MWAA 自定义指标。

**其他工具**
+ [HashiCorp Terraform](https://www.terraform.io/docs) 是一款基础设施即代码（IaC）工具，可帮助您使用代码来预调配和管理云基础设施和资源。此模式使用 Terraform 模块在 AWS中自动预调配基础设施。

**代码存储库**

此模式的代码可在 [visualize-amazon-mwaa-custom-metrics-](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana) grafana 存储库 GitHub 中找到。`stacks/Infra` 文件夹包含以下内容：
+ 所有资源的 Terraform 配置文件 AWS 
+ `grafana` 文件夹中的 Grafana 控制面板 .json 文件
+ 文件夹中的 Apache A DAGs irflow 的亚马逊托管工作流程 `mwaa/dags`
+ Lambda 代码，用于解析 .csv 文件并将指标存储在 Timestream 数据库的 `src` 文件夹中
+ `templates` 文件夹中的 IAM 策略 .json 文件

## 最佳实践
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-best-practices"></a>

Terraform 必须存储有关您的托管基础设施和配置的状态，这样它才能将现实世界的资源映射到您的配置。默认情况下，Terraform 将状态存储在本地名为 `terraform.tfstate` 的文件中。确保 Terraform 状态文件的安全性和完整性至关重要，因为它可以保持基础设施的当前状态。有关更多信息，请参阅 Terraform 文档中的[远程状态](https://developer.hashicorp.com/terraform/language/state/remote)。

## 操作说明
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-epics"></a>

### 使用 Terraform 部署基础设施
<a name="deploy-the-infrastructure-using-terraform"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 部署基础设施。 | 要部署该解决方案基础设施，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

### 验证已部署的基础设施资源
<a name="validate-the-deployed-infrastructure-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证 Amazon MWAA 环境。 | 要验证 Amazon MWAA 环境，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps，数据工程师 | 
| 验证 DAG 计划。 | 要查看每个 DAG 时间表，请转到 **Airflow UI** 中的**时间表**选项卡。以下 DAGs 每项都有预先配置的计划，该计划在 Amazon MWAA 环境中运行并生成自定义指标：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)您还可以在**运行**列下查看每个 DAG 是否成功运行。 | AWS 数据工程师 DevOps | 

### 配置 Amazon Managed Grafana 环境
<a name="configure-the-gra-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置对 Amazon Managed Grafana 工作区的访问权限。 | Terraform 脚本创建了所需的 Amazon Managed Grafana 工作区、控制面板和指标页面。要配置访问权限以便于您查看它们，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| 安装 Amazon Timestream 插件。 | Amazon MWAA 自定义指标已加载到 Timestream 数据库中。您可以使用 Timestream 插件通过 Amazon Managed Grafana 控制面板对指标进行可视化。要安装 Timestream 插件，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)有关更多信息，请参阅 Amazon Managed Grafana 文档中的[使用插件扩展您的工作区](https://docs.aws.amazon.com/grafana/latest/userguide/grafana-plugins.html#manage-plugins)。 | AWS DevOps， DevOps 工程师 | 

### 在 Amazon Managed Grafana 控制面板中可视化自定义指标
<a name="visualize-the-custom-metrics-in-the-gra-dashboard"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 查看 Amazon Managed Grafana 控制面板。 | 要查看摄取到 Amazon Managed Grafana 工作区的指标，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)该控制面板指标页面显示以下信息：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| 自定义 Amazon Managed Grafana 控制面板。 | 要自定义控制面板以便将来进一步增强，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)或者，此仪表板的源代码可在[GitHub 存储库`stacks/infra/grafana`](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana/blob/main/stacks/infra/grafana/dashboard.json)文件夹中的`dashboard.json`文件中找到。 | AWS DevOps | 

### 清理 AWS 资源
<a name="clean-up-aws-resources"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 暂停 Amazon MWAA DAG 运行。 | 要暂停 DAG 运行，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps，数据工程师 | 
| 从 Amazon S3 存储桶中删除对象。 | 要删除 Amazon S3 存储桶 **mwaa-events-bucket-\$1 和 **mwaa-metrics-bucket-\$1****，请按照 Amazon S3 文档中[删除存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)中有关使用 Amazon S3 控制台的说明进行操作。 | AWS DevOps | 
| 销毁由 Terraform 创建的资源。 | 要销毁由 Terraform 创建的资源以及关联的本地 Terraform 状态文件，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

## 问题排查
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| `null_resource.plugin_mgmt (local-exec): aws: error: argument operation: Invalid choice, valid choices are:` |  AWS CLI 将您的版本升级到[最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。 | 
| 加载数据来源错误 - `Fetch error: 404 Not Found Instantiating…` | 这是间歇性错误。等待几分钟，然后刷新您的数据来源以查看列出的 Timestream 数据来源。 | 

## 相关资源
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources"></a>

**AWS 文档**
+ [用于生成控制面板和可视化的 Amazon Managed Grafana](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/amg-dashboarding-visualization.html)
+ [将亚马逊托管 Grafana 配置为使用 Okta](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-SAML-providers-okta.html)
+ [AWS IAM Identity Center 与您的亚马逊托管 Grafana 工作区配合使用](https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG-SSO.html)
+ [ DAGs 在 Amazon 上使用 MWAA](https://docs.aws.amazon.com/mwaa/latest/userguide/working-dags.html)

**AWS 视频**
+ 使用 Amazon Managed Grafana 配置 IAM Identity Center 进行身份验证，如下面的[视频](https://www.youtube.com/watch?v=XX2Xcz-Ps9U)所示。




[https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U？ 控件=0](https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U?controls=0)
+ 如果 IAM Identity Center 不可用，您还可以使用 Okta 之类的外部身份提供者（IdP）来集成 Amazon Managed Grafana 身份验证，如下面的[视频](https://www.youtube.com/watch?v=Z4JHxl2xpOg)所示。




[https://www.youtube-nocookie.com/embed/Z4 JHxl2xp Og？ 控件=0](https://www.youtube-nocookie.com/embed/Z4JHxl2xpOg?controls=0)

## 附加信息
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-additional"></a>

您可以为您的 Amazon MWAA 环境创建全面的监控和提醒解决方案，从而实现主动管理并对潜在问题或异常情况做出快速响应。Amazon Managed Grafana 包括以下功能：

**提醒** – 您可以根据预定义的阈值或条件在 Amazon Managed Grafana 中配置提醒。设置电子邮件通知，以便在某些指标超过或低于指定阈值时提醒相关的利益相关者。有关更多信息，请参阅 Amazon Managed Grafana 文档中的 [Grafana 提醒](https://docs.aws.amazon.com/grafana/latest/userguide/alerts-overview.html)。

**集成** — 您可以将 Amazon Managed Grafana 与各种第三方工具（ OpsGenie例如 PagerDuty、或 Slack）集成，以增强通知功能。例如，您可以设置 webhook 或与集成， APIs 以便根据在 Amazon Managed Grafana 中生成的警报在这些平台上触发事件和通知。此外，此模式还提供了用于创建 AWS 资源的[GitHub 存储库](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana)。您可以进一步将此代码与您的基础设施部署工作流集成。