使用 亚马逊云科技 Systems Manager 和 Ansible 自动创建亚马逊 CloudWatch 警报和控制面板

监控 Amazon EC2 实例对于主动识别任何潜在问题或对实例的性能进行故障排除至关重要。 Amazon CloudWatch 提供可靠、可扩展和灵活的监控解决方案。在自我管理环境中运行 EC2 实例的客户通常使用 Amazon CloudWatch 指标来监控其实例的性能,并为关键性能指标设置警报,根据他们定义的阈值提醒他们出现任何问题。在某些情况下,为了监控自定义指标,会使用 亚马逊 CloudWatch 代理

Amazon CloudWatch 控制面板 在 CloudWatch 控制台中 提供可自定义的主页,您可以使用这些主页在单一视图中监控您的资源,甚至包括那些分布在不同区域的资源。您可以使用 CloudWatch 控制面板为您的 亚马逊云科技 资源创建 指标 警报 的自定义视图。您可以向控制面板添加警报,这样您就可以在多个区域监控和接收有关您的 亚马逊云科技 资源和应用程序的提醒。

在这篇文章中,我们描述了如何使用 亚马逊云科技 Systems Manager 创建状态管理器关联,当使用您选择的标签创建 EC2 实例时,这些关联可以触发 Ansible 手册自动创建 CloudWatch 控制面板和警报。创建的控制面板不仅显示 CloudWatch 提供的开箱即用的指标,还显示 CloudWatch 代理收集的指标。

先决条件

在本演练中,必须满足以下先决条件:

  • 一个 亚马逊云科技 账户
  • 目标实例应设置为托管实例。请点击 此链接 进行设置。
  • 必须在实例上安装大于 2.9 的 Ansible 版本。请参阅 此链接 中的 “在目标实例上安装 Ansible” 部分。
  • 应创建并订阅亚马逊 SNS 主题。请点击 此链接 进行设置。
  • 使用 此链接 创建 Amazon S3 存储桶 ,以存储本文后面部分中提供的 Ansible 代码。
  • 应使用 此链接 向创建的托管实例授予在实例配置文件中的访问权限 。

解决方案概述

为了通过提供一个简单而安全的平台来维护一组实例的状态和远程执行命令来自动执行管理任务,我们将使用 状态管理 器和 运行命令 ,它们是 亚马逊云科技 Systems Manager 的一部分 。在这篇文章中,我们将向您展示如何使用Ansible自动化来利用状态管理器和运行命令以及 “亚马逊云科技-ApplyansiblePlayBooks” 文档来安装 CloudWatch 代理并创建 CloudWatch 仪表板和警报。

当您创建状态经理关联时,它将执行 Ansible 手册,该手册将根据分配给 EC2 实例的标签创建 CloudWatch 控制面板和警报,其中包含目标选择。因此,在创建带有选定标签的 EC2 实例时,会自动安装和创建 CloudWatch 代理、仪表板和警报,提供主动监控。

Image 1: Architecture of AWS services used in this blog.

图 1:本博客中使用的 亚马逊云科技 服务架构。

下面列出了一些定期监控以解决实例问题的关键性能指标:

  • CPU 利用率
  • 内存利用率
  • 交换利用率
  • 磁盘利用率
  • 平均负载
  • 实例状态
  • 网络状态

这篇文章重点介绍自动为上述指标设置 CloudWatch 控制面板和警报,这些指标涉及将 EC2 实例创建为已定义目标标签的托管实例。此源代码中提供的代码仅适用于 Linux 实例,不支持 Windows 操作系统。

草率排练

在本节中,我们将介绍使用状态管理器设置自动化的过程,状态管理器将执行安装 CloudWatch 代理并创建 CloudWatch 控制面板和警报的 Ansible Playbook。假设您有一组托管实例,想要在这些实例中设置主动监控和警报,并且已经为其分配了相应的 IAM 角色。

第 1 步:下载源代码

自动化用于创建仪表板和警报的源代码存储在 GITHUB 存储库中。可 在此链接 中下载。

步骤 2:编辑 CloudWatch 指标警报的阈值

这篇文章将介绍为仪表板上显示的以下关键性能指标定义的警报。

  • CPU 利用率
  • 内存利用率
  • 交换利用率
  • 磁盘利用率
  • 实例状态

下载的源代码由一个变量文件组成,该文件定义了创建警报时发出的警报的阈值。它们是在文件 /角色/ amazon-cloudwatch-dashboard-alarms-with-ssm-ansible-role/vars 中定义的。您可以在 ansible 字典变量中编辑此文件中定义的阈值变量,以便根据需要定义阈值。

在现有代码中,针对不同指标发出警报的阈值定义如下:

  • CPU 使用率
    • 警告阈值:80%
    • 临界阈
    值:90%
  • 内存使用率
    • 警告阈值:90%
    • 临界阈
    值:100%
  • 交换使用率
    • 警告阈值:30%
    • 临界阈
    值:50%
  • 磁盘利用率
    • 警告阈值:90%
    • 临界阈
    值:95%
  • 实例状态
    • 临界阈值:100

这意味着,每当实例不可用时,都会触发警报。

以下代码段显示了 CPU 利用率和交换利用率及其警告阈值的指标示例。

Image 2: Thresholds for cloudwatch metrics

图 2:云监视指标的阈值

步骤 3:将源代码上传到亚马逊 S3 存储桶

此源代码需要上传到作为先决条件的一部分而创建的 Amazon S3 存储桶。上传的代码片段如下所示。

Image 3: Snapshot of code uploaded to s3 bucket

图 3:上传到 s3 存储桶的代码的快照

步骤 4:创建州经理协会

登录 亚马逊云科技 控制台并在搜索框中搜索 “系统管理器” 服务。在系统管理器控制台上,单击左侧面板上的 “状态管理器”,然后单击 “创建关联”。

(可选)提供关联名称,然后选择 “aws-ApplyansiblePlayBooks” 文档。在 “参数” 部分中,选择 “源类型” 作为 S3,选择 “源信息” 作为 {“路径”:” https://s3.amazonaws.com/ ”}。在下面的示例片段中,“源信息” 设置为 {“路径”:” https://s3.amazonaws.com/ansible-cloudwatch-blog”}

Image 4: Paramters for source information

图 4:源信息的参数

将 “安装依赖关系” 选为 True,这将安装 Python 和其他必需的软件。

对于 “剧本文件”,指定文件的名称。在这种情况下,是 “amazon-cloudwatch-dashboard-alarms-with-ssm-ansible-role-main/playbook.yml”。注意:文件的名称基于其与 S3 存储桶的相对位置。在下面的示例片段中,playbook.yml 文件位于 s3 存储桶 cloudwatch-blog-ansible 中的 amazon-cloudwatch-dashboard-alarms-with-ssm-ansible-role-main 目录中。

Image 5: Playbook details to execute

图 5:要执行的剧本细节

对于 “额外变量”,指定用空格分隔的键/值对。强制变量如下所示。

  1. warn_sns_topic_name=
  2. critical_sns_topic_name=
  3. ansible_python_interpreter='/usr/bin/env python3′

根据阈值进行区分的警告和严重警报都需要 SNS 主题名称。注意:请勿更改变量的密钥名称,因为这取决于源代码。

额外变量的示例如下面的片段所示:

Image 6: Extra Variables to pass for the automation

图 6:自动化需要传递的额外变量

对于 “目标选择”,您可以选择指定实例标签、资源组、所有实例或手动选择实例。有关更多详细信息,请参阅 此链接

在此示例中,我们之所以选择将实例标签指定为我们的 “目标选择”,是因为我们希望监控和警报在创建带有特定标签的 EC2 实例时由触发机制创建。例如:标签 = cloudwatchansible: True,如下面的片段所示。

Image 7: Target selection for ansible automation execution

图 7:ansible 自动化执行的目标选择

您可以选择在特定的时间表中运行状态管理器关联,这样,每当使用所需标签创建新的 EC2 实例时,状态管理器都会触发自动化,按计划频率执行 Ansible playbook。在这篇文章中,我们将选择 “无时间表”,因为我们已经有了带有所需标签的实例。

或者,您可以选择将执行的输出保存到 S3 存储桶中。在这种情况下,选择 “启用向 S3 写入输出”。

您可以参考 此链接 ,了解 有关以 S3 作为源创建状态管理器关联的更多详细信息。

第 5 步:验证 Ansible 剧本的执行情况

创建状态经理协会后,它将执行 Ansible 手册来安装和配置 CloudWatch 代理,并创建 CloudWatch 控制面板和警报。可以通过单击创建的关联并查看执行历史记录来验证执行状态,如下面的代码段所示。

Image 8: Verify execution of playbook

图 8:验证剧本的执行情况

您可以根据每个执行 ID 和实例 ID 进一步检查输出,如以下代码段所示。

Image 9: Verify output of execution

图 9:验证执行输出

步骤 6:查看 CloudWatch 控制面板和警报

要查看在 亚马逊云科技 控制台中创建的 CloudWatch 控制面板,请搜索 “CloudWatch” 服务,然后在左侧面板上选择 “控制面板”。您将找到以 “ -Monitoring” 为名称创建的仪表板。下图显示了本文中使用的自动化创建的仪表板。

Image 10: Example of cloudwatch dashboard

图 10:cloudwatch 仪表板示例

要查看在 CloudWatch 服务控制台中创建的警报,请在左侧面板上选择 “所有警报”。您将找到在实例上创建的警报,如下图所示。

Image 11: Example of Cloudwatch alarms

图 11:Cloudwatch 警报示例

摘要

监控实例问题并获得通知对客户至关重要。使用 CloudWatch 仪表板和警报的主动监控和警报机制是实现这一目标的简单方法。您可以使用这个 亚马逊云科技 Systems Manager 解决方案来创建状态管理器关联,当使用您选择的标签创建 EC2 实例时,这些关联可以触发 Ansible 行动手册自动创建 CloudWatch 控制面板和警报。

作者简介

saumya_bio_screenshot

Saumya Mula

Saumya Mula 是亚马逊网络服务专业服务团队的高级数据库顾问。她为亚马逊客户提供有关数据库从本地迁移到 亚马逊云科技 以及关键生产系统的自动化、成本管理和性能调整的总体指导。

saumya_bio_screenshot

Prashanth Ramaswamy Prashanth Ram

aswamy 是亚马逊网络服务专业服务团队的高级数据库顾问。Prashanth 专注于领导向 亚马逊云科技 的数据库迁移工作,并为亚马逊客户提供包括成本优化、监控和现代化专业知识在内的技术指导。

saumya_bio_screenshot

Jeemy Patel

Jeemy Patel 是亚马逊网络服务专业服务团队的数据库顾问。Jeemy 帮助客户迁移到 亚马逊云科技、优化性能,并为亚马逊客户提供有关各种灾难恢复解决方案的技术指导。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。