View a markdown version of this page

使用 Terraform 在 Amazon Managed Grafana 上自动摄取和可视化 Amazon MWAA 自定义指标 - AWS 规范指引

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

使用 Terraform 在 Amazon Managed Grafana 上自动摄取和可视化 Amazon MWAA 自定义指标

Faisal Abdullah 和 Satya Vajrapu,Amazon Web Services

Summary

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

先决条件和限制

先决条件

  • 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

  • 安装了 Git 并安装和配置了最新版本的 AWS Command Line Interface (AWS CLI) 的 shell 环境。有关更多信息,请参阅 AWS CLI 文档 AWS CLI中的安装或更新到最新版本的。

  • 安装了以下 Terraform 版本:required_version = ">= 1.6.1, < 2.0.0"您可以使用 tfswitch 在不同版本的 Terraform 之间切换。

  • 已在中 AWS IAM Identity Center 为您配置身份源 AWS 账户。有关更多信息,请参阅 IAM Identity Center 文档中的在 IAM Identity Center 中确认身份源。您可以从默认 IAM Identity Center 目录的 Active Directory 或外部身份提供者 (IdP) 中进行选择,例如 Okta。有关更多信息,请参阅相关资源

限制

产品版本

  • Terraform required_version = ">= 1.6.1, < 2.0.0"

  • Amazon Managed Grafana 9.4 或更高版本。此模式已在版本 9.4 上进行了测试。

架构

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

自动摄取 Amazon MWAA 自定义指标的工作流。

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

  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 存储桶,以便进一步处理和分析。

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

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

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

工具

AWS 服务

  • AWS IAM Identity Center帮助您集中管理对所有应用程序 AWS 账户 和云应用程序的单点登录 (SSO) 访问权限。

  • AWS Lambda 是一项计算服务,可帮助您运行代码,无需预调配或管理服务器。它只在需要时运行您的代码,并自动进行扩展,因此您只需为使用的计算时间付费。在这种模式下, AWS Lambda 运行 Python 代码以响应 Amazon S3 事件并自动管理计算资源。

  • Amazon Managed Grafana 是一种完全托管式数据可视化服务,您可以使用该服务查询、关联和可视化您的指标、日志和跟踪,并发出提醒。此模式使用 Amazon Managed Grafana 创建用于指标可视化和提醒的控制面板。

  • Amazon Managed Workflows for Apache Airflow(Amazon MWAA)是 Apache Airflow 的托管式编排服务,让您能够更轻松地在云中大规模设置和操作数据管道。Apache Airflow 是一种开源工具,用于以编程方式编写、调度和监视统称为工作流的各种流程和任务序列。在这种模式中,示例 DAGs 和指标提取器 DAG 部署在 Amazon MWAA 中。

  • Amazon Simple Storage Service(Amazon S3)是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。在这种模式中,Amazon S3 用于以 CSV 格式存储 DAGs、脚本和自定义指标。

  • Amazon Timestream for LiveAnalytics 是一个快速、可扩展、完全托管、专门构建的时间序列数据库,可轻松存储和分析每天数万亿个时间序列数据点。Timestream LiveAnalytics 还与用于数据收集、可视化和机器学习的常用服务集成。在此模式中,它用于摄取生成的 Amazon MWAA 自定义指标。

其他工具

  • HashiCorp Terraform 是一款基础设施即代码(IaC)工具,可帮助您使用代码来预调配和管理云基础设施和资源。此模式使用 Terraform 模块在 AWS中自动预调配基础设施。

代码存储库

此模式的代码可在 visualize-amazon-mwaa-custom-metrics- grafana 存储库 GitHub 中找到。stacks/Infra 文件夹包含以下内容:

  • 所有资源的 Terraform 配置文件 AWS

  • grafana 文件夹中的 Grafana 控制面板 .json 文件

  • 文件夹中的 Apache A DAGs irflow 的亚马逊托管工作流程 mwaa/dags

  • Lambda 代码,用于解析 .csv 文件并将指标存储在 Timestream 数据库的 src 文件夹中

  • templates 文件夹中的 IAM 策略 .json 文件

最佳实践

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

操作说明

Task说明所需技能

部署基础设施。

要部署该解决方案基础设施,请执行以下操作:

  1. 在本地计算机上或使用打开终端或命令提示符 AWS CloudShell。

  2. 导航到要克隆存储库的目录。

  3. 要克隆存储库,请运行以下命令:

    git clone https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana
  4. 克隆过程完成后,运行以下命令以导航到克隆的存储库目录:

    cd visualize-amazon-mwaa-custom-metrics-grafana/stacks/infra
  5. 要下载并初始化所需的提供程序,请运行以下命令:

    terraform init
  6. 要获取 Terraform 将要创建的所有资源的全面视图,请运行以下命令:

    terraform plan

    Terraform 预调配以下资源:

    • Amazon Virtual Private Cloud(Amazon VPC)和相关的联网组件

    • Amazon S3 资源

    • AWS Lambda 函数

    • Amazon Managed Grafana 资源(工作区、控制面板、数据来源)

    • 支持 IAM 资源(角色和策略)

  7. 要根据计划输出创建 AWS 资源,请运行以下命令:

    terraform apply -auto-approve

    基础设施预调配应在大约 20 分钟内完成。

  8. 要根据 Terraform 文件中定义的配置创建指定的 AWS 资源,请运行以下命令:

    terraform apply
AWS DevOps
Task说明所需技能

验证 Amazon MWAA 环境。

要验证 Amazon MWAA 环境,请执行以下操作:

  1. 登录 AWS 管理控制台,导航至 Amazon MWAA 控制面板控制台,然后选择打开 Air flow 用户界面。

  2. 您应该看到以下三个处 DAGs 于 “活动” 状态

    • data-extract

    • run-example-dag

    • other-sample-dag

  3. 如果 DAG 未处于活动状态,则可以通过启用 DAG 名称旁边的切换开关将其激活。

AWS DevOps,数据工程师

验证 DAG 计划。

要查看每个 DAG 时间表,请转到 Airflow UI 中的时间表选项卡。

以下 DAGs 每项都有预先配置的计划,该计划在 Amazon MWAA 环境中运行并生成自定义指标:

  • run-example-dag-每 7 分钟运行一次

  • other-sample-dag-每 10 分钟运行一次

  • data-extract - 每小时运行一次

您还可以在运行列下查看每个 DAG 是否成功运行。

AWS 数据工程师 DevOps
Task说明所需技能

配置对 Amazon Managed Grafana 工作区的访问权限。

Terraform 脚本创建了所需的 Amazon Managed Grafana 工作区、控制面板和指标页面。要配置访问权限以便于您查看它们,请执行以下操作:

  1. 打开 Amazon Managed Grafana 控制台

  2. 工作区中,选择工作区 grafana-ws-dev,然后导航到下部窗格中的身份验证选项卡。

  3. 选择分配新用户或组按钮。

  4. 选项卡中添加您的组或在用户选项卡中添加用户,然后选择分配用户和组按钮。

  5. 添加用户(或组)后,将该用户(或组)设为管理员。在分配的用户组选项卡的分配的用户或组中选择用户,然后从下拉菜单中选择设为管理员。有关更多信息,请参阅亚马逊托管 Grafana 文档中的在亚马逊托管 Grafana 工作空间中使用 AWS IAM Identity Center

  6. 导航到工作区,然后选择 Grafana 工作区 URL。要以管理员身份登录亚马逊托管 Grafana,请选择登录方式。 AWS IAM Identity Center

AWS DevOps

安装 Amazon Timestream 插件。

Amazon MWAA 自定义指标已加载到 Timestream 数据库中。您可以使用 Timestream 插件通过 Amazon Managed Grafana 控制面板对指标进行可视化。

要安装 Timestream 插件,请执行以下操作:

  1. 在 Amazon Managed Grafana 控制台中,展开左侧导航窗格中的菜单,然后转到管理、插件

  2. 搜索并安装最新版本的 Amazon Timestream 插件。

  3. 安装插件后,转到管理数据来源以查看 Timestream 数据来源。如果数据来源未列出,请刷新页面。

有关更多信息,请参阅 Amazon Managed Grafana 文档中的使用插件扩展您的工作区

AWS DevOps, DevOps 工程师
Task说明所需技能

查看 Amazon Managed Grafana 控制面板。

要查看摄取到 Amazon Managed Grafana 工作区的指标,请执行以下操作:

  1. 在 Amazon Managed Grafana 控制台的左侧导航窗格中,选择控制面板

  2. 要查看指标,请选择 MWAA 事件控制面板,然后选择 mwaa_metrics

该控制面板指标页面显示以下信息:

  • 过去一小时内的 DAG 运行总数

  • 在过去一小时内成功运行、失败和正在运行的 DAG 总数

  • 全部、成功和失败的 DAG 运行的平均持续时间

AWS DevOps

自定义 Amazon Managed Grafana 控制面板。

要自定义控制面板以便将来进一步增强,请执行以下操作:

  1. 在 Amazon Managed Grafana 控制面板 mwaa_metrics 页面上,选择控制面板设置图标。

  2. 要查看定义该控制面板的数据结构,请选择 JSON 模型。您可以通过直接在控制台中编辑此 JSON 模型来自定义控制面板。

或者,此仪表板的源代码可在GitHub 存储库stacks/infra/grafana文件夹中的dashboard.json文件中找到。

AWS DevOps
Task说明所需技能

暂停 Amazon MWAA DAG 运行。

要暂停 DAG 运行,请执行以下操作:

  1. 在 Amazon MWAA 控制台中,导航到 Airflow 环境并选择打开 Airflow UI

  2. 要暂停 DAG,请使用每个 DAG 旁边的切换开关。

  3. 刷新 Airflow 用户界面页面,该页面应 DAGs 在 “已暂停” 部分列出三个。

AWS DevOps,数据工程师

从 Amazon S3 存储桶中删除对象。

要删除 Amazon S3 存储桶 mwaa-events-bucket-* 和 mwaa-metrics-bucket-*,请按照 Amazon S3 文档中删除存储桶中有关使用 Amazon S3 控制台的说明进行操作。

AWS DevOps

销毁由 Terraform 创建的资源。

要销毁由 Terraform 创建的资源以及关联的本地 Terraform 状态文件,请执行以下操作:

  1. (可选)在删除资源之前,您可以预览 Terraform 将要进行的更改。要生成报告,请运行以下命令:

    terraform plan -destroy

    命令输出显示该destroy命令将删除之前创建的所有 AWS 资源。

  2. terraform destroy -auto-approve

    此命令大约需要 20 分钟才能销毁基础设施。

    注意

    要销毁由 Terraform 管理的所有资源,请运行以下命令。:-auto-approve 标签不会等到用户确认后才开始销毁资源。

  3. 要删除本地 Terraform 状态文件,请运行以下命令:

    rm .terraform.lock.hcl rm -rf .terraform rm terraform.tfstate*
AWS DevOps

问题排查

问题解决方案

null_resource.plugin_mgmt (local-exec): aws: error: argument operation: Invalid choice, valid choices are:

AWS CLI 将您的版本升级到最新版本

加载数据来源错误 -

Fetch error: 404 Not Found Instantiating…

这是间歇性错误。等待几分钟,然后刷新您的数据来源以查看列出的 Timestream 数据来源。

相关资源

AWS 文档

AWS 视频

  • 使用 Amazon Managed Grafana 配置 IAM Identity Center 进行身份验证,如下面的视频所示。

https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U? 控件=0

  • 如果 IAM Identity Center 不可用,您还可以使用 Okta 之类的外部身份提供者(IdP)来集成 Amazon Managed Grafana 身份验证,如下面的视频所示。

https://www.youtube-nocookie.com/embed/Z4 JHxl2xp Og? 控件=0

附加信息

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

提醒 – 您可以根据预定义的阈值或条件在 Amazon Managed Grafana 中配置提醒。设置电子邮件通知,以便在某些指标超过或低于指定阈值时提醒相关的利益相关者。有关更多信息,请参阅 Amazon Managed Grafana 文档中的 Grafana 提醒

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