CloudWatch 解决方案:Amazon EC2 运行状况 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

CloudWatch 解决方案:Amazon EC2 运行状况

此解决方案可帮助您使用 CloudWatch 代理为在 EC2 实例上运行的工作负载配置开箱即用的指标收集。此外,它还可以帮助您设置预配置的 CloudWatch 控制面板。

要求

此解决方案适用于以下情况:

优势

该解决方案使用 CloudWatch 代理提供 EC2 服务器监测,在标准 EC2 命名空间指标之上为以下使用案例提供额外的系统级指标:

  • 检测 CPU 性能问题和资源限制。

  • 监测整个 EC2 实例中不同磁盘的磁盘利用率和存储容量。

  • 跟踪内存使用模式和潜在的内存泄漏。

  • 分析 I/O 操作及其对整体性能的影响。

  • 观察网络流量模式和潜在的异常情况。

以下是该解决方案的主要优点:

  • 自动收集 EC2 实例的指标,无需手动检测。

  • 为 EC2 实例指标提供预配置的整合 CloudWatch 控制面板。控制面板将自动处理使用该解决方案配置的新 EC2 实例的指标,即使这些指标在您首次创建控制面板时不存在。它还允许您观察通过自动扩缩组管理的 EC2 实例。

下图是此解决方案控制面板的示例。

EC2 运行状况控制面板示例

成本

此解决方案在您的账户中创建和使用资源。您需要为标准使用量付费,包括以下各项:

  • CloudWatch 代理收集的所有指标按自定义指标收费。此解决方案使用的指标数量取决于 EC2 主机的数量。

    CloudWatch 代理指标的总数取决于磁盘的配置。除了磁盘和 diskio 指标外,该解决方案还发布了六个指标。磁盘指标的数量(disk_used_percentdisk_inodes_free)取决于 device/fstype/path 维度的数量。diskio 指标(diskio_io_time)取决于 name 维度的数量。例如,根据 EC2 控制台体验,具有默认设置的单个 t2.micro 总共生成 22 个 CloudWatch 代理指标(4 个 CPU、12 个磁盘、4 个 diskio、1 个内存和 1 个交换)。如 AWS/EC2 之类公开发布的指标免费提供。

  • 一个自定义控制面板。

  • CloudWatch 代理请求用于发布指标的 API 操作。使用此解决方案的默认配置,CloudWatch 代理每分钟调用一次 PutMetricData。这意味着每台 EC2 主机将在 30 天(一个月)内调用 PutMetricData API 30*24*60=43,200 次。

有关 CloudWatch 定价的信息,请参阅 Amazon CloudWatch 定价

定价计算器可帮助您估算使用此解决方案的每月大致费用。

使用定价计算器估算每月解决方案成本
  1. 打开 Amazon CloudWatch 定价计算器

  2. 指标部分中,对于指标数量,输入 (6 + total count of disk and diskio metrics per EC2 host as described above) * number of EC2 instances configured for this solution

  3. API 部分中,对于 API 请求的数量,输入 43200 * number of EC2 instances configured for this solution

  4. 默认情况下,该解决方案每分钟为每台 EC2 主机执行一次 PutMetricData 操作。

  5. 控制面板和警报部分中,对控制面板数量输入 1

  6. 您可以在定价计算器底部查看每月估算成本。

此解决方案的 CloudWatch 代理配置

CloudWatch 代理是在您的服务器和容器化环境中持续自主运行的软件。它从您的基础设施和应用程序收集指标、日志和跟踪,并将其发送到 CloudWatch 和 X-Ray。

有关 CloudWatch 代理的更多信息,请参阅使用 CloudWatch 代理收集指标、日志和跟踪信息

此解决方案中的代理配置收集一组指标,以帮助您开始监测和观察 EC2 实例。可以将 CloudWatch 代理配置为收集比控制面板默认显示更多的 EC2 指标。有关 Amazon EC2 指标的列表,参阅 Linux 和 macOS 实例上的 CloudWatch 代理收集的指标。有关在 Windows 实例上收集的指标的信息,请参阅 Windows Server 实例上的 CloudWatch 代理收集的指标

EC2 运行状况解决方案的代理配置

代理收集的指标在代理配置中定义。该解决方案提供代理配置,以收集建议的指标,并为解决方案的控制面板提供合适的维度。

稍后将在为您的解决方案部署代理中介绍部署解决方案的步骤。以下信息旨在帮助您了解如何针对环境自定义代理配置。

注意

如果 EC2 实例不属于自动扩缩组,CloudWatch 代理会完全删除 AutoScalingGroupName 维度。此行为有助于防止维度名称为空值。解决方案控制面板中包含的每个指标小部件都会搜索包含和排除 AutoScalingGroup 维度的指标。这有助于确保应用该解决方案的所有 EC2 实例都由相同的控制面板提供支持。

如果您想对代理配置进行任何修改,则必须对解决方案随附的控制面板应用相同的更改。例如,如果您决定省略 ImageId 维度,则必须从控制面板小部件使用的指标搜索表达式中删除相同的维度。

EC2 实例的代理配置

在部署工作负载的 Amazon EC2 实例上使用以下 CloudWatch 代理配置。

{ "agent": { "metrics_collection_interval": 60, "run_as_user": "cwagent" }, "metrics": { "append_dimensions": { "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}", "ImageId": "${aws:ImageId}", "AutoScalingGroupName": "${aws:AutoScalingGroupName}" }, "metrics_collected": { "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "totalcpu": true }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "resources": [ "*" ], "dimensions": [ ["device", "fstype", "path"] ] }, "diskio": { "measurement": [ "io_time" ], "resources": [ "*" ] }, "mem": { "measurement": [ "used_percent" ] }, "swap": { "measurement": [ "used_percent" ] } } } }

为您的解决方案部署代理

安装 CloudWatch 代理有几种方法,具体视用例而定。对于此解决方案,我们建议使用 Systems Manager。它提供了控制台体验,使在单个 Amazon 账户中管理一组托管服务器变得更加简单。本节中的说明使用 Systems Manager,适用于没有使用现有配置运行 CloudWatch 代理的情况。您可以按照验证 CloudWatch 代理是否正在运行中的步骤检查 CloudWatch 代理是否正在运行。

如果您已经在 EC2 主机上运行 CloudWatch 代理并管理代理配置,则可以跳过本节中的说明并按照现有部署机制更新配置。请务必将 EC2 运行状况代理配置与现有的代理配置合并,然后部署合并的配置。如果您使用 Systems Manager 存储和管理 CloudWatch 代理的配置,则可以将配置合并到现有参数值。有关更多信息,请参阅 Managing CloudWatch agent configuration files

注意

使用 Systems Manager 部署以下 CloudWatch 代理配置,将替换或覆盖 EC2 实例上任何现有的 CloudWatch 代理配置。您可以修改此配置以适应您独有的环境或用例。配置中定义的指标是提供解决方案的控制面板所需的最低要求。

部署过程包括以下步骤:

  • 步骤 1:确保目标 EC2 实例具有所需的 IAM 权限。

  • 步骤 2:在 Systems Manager Parameter Store 中存储建议的代理配置文件。

  • 步骤 3:使用 Amazon CloudFormation 堆栈在一个或多个 EC2 实例上安装 CloudWatch 代理。

  • 步骤 4:验证代理设置是否正确配置。

步骤 1:确保目标 EC2 实例具有所需的 IAM 权限

您必须授予 Systems Manager 安装和配置 CloudWatch 代理的权限。您还必须授予 CloudWatch 代理将遥测数据从 EC2 实例发布到 CloudWatch 的权限。确保附加到实例的 IAM 角色已附加 CloudWatchAgentServerPolicyAmazonSSMManagedInstanceCore IAM 策略。

步骤 2:在 Systems Manager Parameter Store 中存储建议的 CloudWatch 代理配置文件

Parameter Store 通过安全地存储和管理配置参数,简化了 CloudWatch 代理在 EC2 实例上的安装,而无需硬编码值。这可确保更加安全灵活的部署过程,从而实现集中管理,并且可以更轻松地跨多个实例更新配置。

使用以下步骤将建议的 CloudWatch 代理配置文件作为参数存储在 Parameter Store 中。

创建 CloudWatch 代理配置文件作为参数
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 Amazon Systems Manager 控制台。

  2. 确认控制台上的所选区域是运行 EC2 实例的区域。

  3. 从导航窗格中,依次选择应用程序管理Parameter Store

  4. 按照以下步骤为配置创建新参数。

    1. 选择创建参数

    2. 名称框中,输入您将在后续步骤中用来引用 CloudWatch 代理配置文件的名称。例如 AmazonCloudWatch-EC2Health-Configuration

    3. (可选)在描述框中,键入参数的描述。

    4. 对于参数层,选择标准

    5. 对于类型,选择字符串

    6. 对于数据类型,选择文本

    7. 框中,粘贴本文档前面提供的代理配置 JSON。

    8. 选择创建参数

步骤 3:安装 CloudWatch 代理并使用 Amazon CloudFormation 模板应用配置

您可以使用 Amazon CloudFormation 安装代理,并将其配置为使用您在前面步骤中创建的 CloudWatch 代理配置。

为此解决方案安装和配置 CloudWatch 代理
  1. 使用以下链接打开 Amazon CloudFormation 快速创建堆栈向导:https://console.aws.amazon.com/cloudformation/home?#/stacks/quickcreate?templateURL=https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/CloudWatchAgent/CFN/v1.0.0/cw-agent-installation-template-1.0.0.json

  2. 确认控制台上的所选区域是运行 EC2 实例的区域。

  3. 对于堆栈名称,输入用于识别此堆栈的名称,如 CWAgentInstallationStack

  4. 参数部分中,指定以下各项:

    1. 对于 CloudWatchAgentConfigSSM,请输入您之前创建的代理配置的 Systems Manager 参数名称,例如 AmazonCloudWatch-EC2Health-Configuration

    2. 要选择目标实例,您有两种选择。

      1. 对于 InstanceIds,请指定一个以逗号分隔的实例 ID 列表,其中包含希望使用此配置安装 CloudWatch 代理的实例 ID。您可以列出一个或多个实例。

      2. 如果要大规模部署,则可以指定 TagKey 和相应的 TagValue,以将具有此标签和值的所有 EC2 实例作为目标。如果指定 TagKey,则必须指定相应的 TagValue。(对于自动扩缩组,为 TagKey 指定 aws:autoscaling:groupName 并为 TagValue 指定自动扩缩组名称,以部署到自动扩缩组内的所有实例。)

      如果同时指定了 InstanceIdsTagKeys 参数,将优先采用 InstanceIds,而标签将被忽略。

  5. 检查设置,然后选择创建堆栈

如果要先编辑模板文件进行自定义,请选择创建堆栈向导下的上传模板文件选项,上传编辑后的模板。有关更多信息,请参阅在 Amazon CloudFormation 控制台上创建堆栈。您可以使用以下链接下载模板:https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/CloudWatchAgent/CFN/v1.0.0/cw-agent-installation-template-1.0.0.json

注意

完成此步骤后,此 Systems Manager 参数将与目标实例中运行的 CloudWatch 代理相关联。这意味着:

  1. 如果删除 Systems Manager 参数,代理将停止。

  2. 如果编辑了 Systems Manager 参数,则配置更改将按计划频率(默认为 30 天)自动应用到代理。

  3. 如果要立即应用对此 Systems Manager 参数的更改,则必须再次运行此步骤。有关关联的更多信息,请参阅在 Amazon Systems Manager 中使用关联

步骤 4:验证代理设置是否正确配置

您可以按照验证 CloudWatch 代理是否正在运行中的步骤验证 CloudWatch 代理是否已安装。如果 CloudWatch 代理尚未安装和运行,请确保已正确设置所有内容。

验证 EC2 运行状况指标是否已发布到 CloudWatch
  1. 通过 https://console.aws.amazon.com/cloudwatch/ 打开 CloudWatch 控制台。

  2. 选择指标所有指标

  3. 确保您已选择部署解决方案的区域,然后选择自定义命名空间CWAgent

  4. 搜索本文档代理配置部分中提及的指标,例如 mem_used_percent。如果您看到这些指标的结果,则表明这些指标已发布到 CloudWatch。

创建 EC2 运行状况解决方案控制面板

此控制面板显示新发出的指标,显示了 EC2 运行状况指标。此控制面板提供单个区域 EC2 实例运行状况排名靠前的贡献者视图。排名靠前的贡献者视图显示每个指标的前 10 名小部件。这样就能一眼识别出异常值。

要创建控制面板的操作,可以使用以下选项:

  • 使用 CloudWatch 控制台创建控制面板。

  • 使用 Amazon CloudFormation 控制台部署控制面板。

  • 以 Amazon CloudFormation 基础设施即代码,并将其作为持续集成(CI)自动化的一部分进行集成。

通过使用 CloudWatch 控制台创建控制面板,您可以在实际创建和收费之前预览控制面板。

注意

此解决方案中使用 Amazon CloudFormation 创建的控制面板显示解决方案部署区域的指标。请务必在发布 EC2 指标的区域创建 Amazon CloudFormation 堆栈。

如果您在 CloudWatch 代理配置中指定了 CWAgent 以外的自定义命名空间,则必须更改控制面板的 Amazon CloudFormation 模板,将 CWAgent 替换为您使用的自定义命名空间。

使用 CloudWatch 控制台创建控制面板
  1. 使用以下链接打开 CloudWatch 控制台创建控制面板https://console.aws.amazon.com/cloudwatch/home?#dashboards?dashboardTemplate=Ec2LinuxMacOsHealth&referrer=os-catalog

  2. 确认控制台上的所选区域是运行 EC2 实例的区域。

  3. 输入控制面板的名称,然后选择创建控制面板

    为了便于将此控制面板与其他区域的类似控制面板区分开来,我们建议在控制面板名称中包含区域名称,例如 EC2HealthDashboard-us-east-1

  4. 预览控制面板并选择保存以创建控制面板。

通过 Amazon CloudFormation 创建控制面板
  1. 使用以下链接打开 Amazon CloudFormation 快速创建堆栈向导:https://console.aws.amazon.com/cloudformation/home?#/stacks/quickcreate?templateURL=https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/EC2_Health/CloudWatch/CFN/v1.0.0/dashboard-template-linux-macos-1.0.0.json

  2. 确认控制台上的所选区域是运行 EC2 实例的区域。

  3. 对于堆栈名称,输入用于识别此堆栈的名称,如 EC2HealthDashboardStack

  4. 参数部分,在 DashboardName 参数下指定控制面板的名称。

    为了便于将此控制面板与其他区域的类似控制面板区分开来,我们建议在控制面板名称中包含区域名称,例如 EC2HealthDashboard-us-east-1

  5. 功能和转换下确认转换的访问功能。请注意,Amazon CloudFormation 不会添加任何 IAM 资源。

  6. 检查设置,然后选择创建堆栈

  7. 堆栈状态为 CREATE_COM PLETE 后,选择创建的堆栈下的资源选项卡,然后选择物理 ID 下的链接转至控制面板。您也可以通过在控制台左侧导航窗格中选择控制面板,然后在自定义控制面板下找到控制面板名称,在 CloudWatch 控制台中访问控制面板。

如果要编辑模板文件以出于任何目的对其进行自定义,则可以使用创建堆栈向导下的上传模板文件选项来上传编辑后的模板。有关更多信息,请参阅在 Amazon CloudFormation 控制台上创建堆栈。您可以使用以下链接下载模板:https://aws-observability-solutions-prod-us-east-1.s3.us-east-1.amazonaws.com/EC2_Health/CloudWatch/CFN/v1.0.0/dashboard-template-linux-macos-1.0.0.json

开始使用 EC2 运行状况解决方案控制面板

您可以使用新的 EC2 监测控制面板尝试以下几项任务。这些任务允许您验证控制面板是否正常运行,并为您提供使用它来监测 EC2 实例的一些实践经验。在尝试这些任务的过程中,您将熟悉如何浏览控制面板和解读可视化指标。

监测各种 CPU 利用率指标

CPU 部分中,检查 CPU 利用率指标阵列。这些指标可以深入了解 CPU 资源在用户进程、系统任务和 I/O 操作等不同活动中的使用情况。查找利用率一直很高或模式异常的实例,这可能表明需要扩展或优化。

分析不同设备的磁盘利用率

导航到磁盘部分以查找存储使用量和 inode 可用性指标。这些指标可以帮助您确定存储空间或文件系统资源不足的实例。请注意任何接近高磁盘利用率水平的实例,因为这可能会导致性能问题或服务中断。

调查内存利用率模式

内存部分中,观察绘制内存利用率随时间变化的图表。这显示每个实例使用了多少可用内存。查找可能与特定时间或事件相关的内存使用量模式或峰值。内存利用率较高可能表明需要调整实例大小或优化应用程序。

跨核心利用率指标的关联模式

比较并观察相关的利用率模式。例如,运行日志轮换过程的工作负载可能会导致 CPU内存利用率定期增加,然后磁盘利用率便会降低。

检查网络活动

网络部分,检查入站和出站网络流量指标,包括数据量和数据包数量。这些指标使您可以深入了解 EC2 实例的网络活动。注意网络流量的正常或异常峰值,或者入站和出站数据之间的不平衡。