利用 Amazon EBS 详细性能统计获取全新性能洞察

Olawale Olaleye
难度
200 - 中级
时间
20 分钟
前提条件

海外区域: 注册 / 登录 亚马逊云科技

上次更新时间
2024 年 12 月 9 日

在业务日益依赖延迟敏感型应用程序来处理关键工作负载的情况下,需要迅速解决各种可能会影响应用程序效率的性能瓶颈,因此你必须了解整个技术栈的性能。鉴于存储设备的性能和稳定性会直接影响应用程序的效率、可靠性、可扩展性以及用户体验,因此企业必须能够在存储层上收集和分析详细的遥测数据。存储层上的可观察性是对传统应用程序和操作系统监控的补充,可以帮助企业确保其整个基础设施具有强大的性能、稳定性,以及快速解决问题的能力。

用户可以将 Amazon Elastic Block Store (Amazon EBS) 这一易用型块存储服务用作高性能事务型工作负载(如数据库、企业应用程序和延迟敏感型操作)的主要存储设备类型。这些工作负载均需要持续可靠的存储性能,因此对 EBS 卷的监控和观察至关重要。借助实时监控功能,你能够全面了解关键性能指标(如延迟、吞吐量和 IOPS),从而主动检测和解决各种潜在瓶颈或问题。

在本文中,我们将讨论如何使用 Amazon EBS 的详细性能统计数据(一组亚分钟级粒度的新 EBS 卷监控指标)来帮助你实时了解 EBS 卷性能。你可以直接通过连接到 Amazon Elastic Compute Cloud (Amazon EC2) 实例的 Amazon EBS NVMe 设备访问这些统计数据,并将这些统计数据用于监控存储级别的 I/O 性能。我们还提供了一些示例,用于展示如何根据这些统计数据快速评估 EBS 卷的运行状况和识别性能瓶颈,从而采取相应的措施提高应用程序的可靠性和性能。

解决方案概述

我们提出一种解决方案,在实例级别上应用 Amazon EBS 详细性能统计能力。该方案可增强 EC2 Nitro 实例上运行的延迟敏感型应用程序的可观察性和故障排除能力。我们运行新设计的 ebsnvme 脚本来收集有关 I/O 操作数、延迟和队列长度等高频统计数据,从而主动发现和排除故障。

该解决方案示例中展示了一些如何使用这些细粒度指标的示例,演示如何验证 EBS 卷的响应速度,以便你能够快速发现任何 I/O 中断。此外,该解决方案还可帮助你识别存储性能瓶颈,可用于优化 EBS 卷和 EC2 实例配置,以满足你的工作负载需求。

前提条件

该解决方案中需要设置一个 EC2 Nitro 实例和挂载一个 EBS 卷,从而收集和访问该 EBS 卷的详细性能统计数据。如果你使用的是 Amazon EC2 实例,那么你可能已完成此设置。完成以下步骤,部署所需组件:

  1. 启动一个 EC2 Nitro 实例(或使用一个现有的 Nitro 实例),并连接到该实例。可以通过 SSH 连接到该实例。
  2. 找到与你要查询 Amazon EBS 统计数据对应的 EBS 卷关联的 NVMe 设备。例如,可以在 CLI 中运行 nvme-cli 命令来查询实例上的所有 NVMe 设备。
$ sudo nvme list

下图输出示例展示了执行 list 命令后,输出的实例上的 NVMe 设备信息及其对应的卷 ID。

在此演示中,示例应用程序使用的 EBS 卷的 ID 为 vol-02b51b6b2cb16aab1,与之关联的 NVMe 设备则为 /dev/nvme1n1。

 3. 将 ebsnvme 脚本复制到 EC2 实例上(必要时,可从此 GitHub 链接下载此脚本)。

 4. 使用正确的权限运行 ebsnvme 脚本,并将设备路径作为一个参数传递。返回的输出内容如下图所示(通过向脚本指定 -j 或 --json 参数,可以获得 JSON 输出)。

$ sudo ./ebsnvme stats /dev/nvme1n1 –json

或者,可以将 –interval 或 -i 参数与 ebsnvme 脚本结合使用,根据指定的时间间隔轮询统计数据。

$ sudo ./ebsnvme stats /dev/nvme1n1 --interval 15

以下是 NVMe 日志输出示例的一部分,其中显示的统计数据包括累计读/写操作数、字节数和用于处理读/写操作的时间(以微秒为单位),以及应用程序性能需求超过 Amazon EBS 或 Amazon EC2 预配的 IOPS 或吞吐量限制值的时间长度(微秒)。

此外,还包括了读写 I/O 延迟数据统计直方图,其中每一行代表在一个特定时间段(以微秒为单位)内完成的 I/O 操作总数。

这些统计数据显示的是此次命令运行前累计的计数。可以根据业务需求,设置运行命令的时间间隔,例如每 15 秒运行一次。每次输出的内容都会反映各指标对应的最新累计数值。通过计算最后两次输出的统计数据之间的差异,可以了解该存储卷在给定 15 秒期间的性能概况。

从 Amazon EBS 详细性能统计数据中获取洞察

我们已经根据这些详细性能统计指标设置了监控,下面我们演示这些统计数据的不同使用方式。

如上一小节中所述,可以查看详细统计数据输出中的 I/O 延迟直方图,观察统计间隔期间的 I/O 延迟分布情况。此外,你还可以根据读/写操作和耗时统计数据来计算平均延迟值。通过详细统计数据,可以查看亚分钟级粒度的平均延迟。

以下是另外两种使用详细统计数据来揭示关键性能指标的方法。在场景 1 中,我们将监控 Amazon EBS 的 I/O 性能,从而观测 EBS 卷是否没有响应 I/O 操作。在场景 2 中,我们将跟踪性能统计数据,从而检测工作负载是否超过 EC2 实例或 EBS 卷的预配性能限制。超过性能限制时,可能会导致延迟增加。

场景 1:识别 EBS 卷的无响应状态

 在此场景中,我们将讨论如何根据 Amazon EBS 详细性能统计数据识别 EBS 卷在何时不响应 I/O 操作,以便你根据需要及时采取措施。如果观察到卷在多个时间段内无响应,你可以等待 AWS 解决该问题,也可以自行采取措施,如更换相关卷或者停止并重启卷所挂载到的实例。在大多数情况下,当卷无响应时,Amazon EBS 会在几分钟内自动诊断问题并恢复卷。

要确定卷是否无响应,可以执行以下步骤来确定卷 I/O 是否中断:

  1. 选择要进行故障排查的 EBS 卷对应的 NVMe 设备
  2. 按业务所需时间间隔收集设备上的统计数据
  3. 比较统计数据,检查 EBS 卷是否无响应

步骤 1:选择要进行故障排查的 EBS 卷对应的 NVMe 设备

  1. 使用 NVMe CLI 命令查询实例上的 EBS 卷关联的 NVMe 设备。

步骤 2:按业务所需时间间隔收集设备上的统计数据

  1. 使用 ebsnvme 命令直接从设备上收集 Amazon EBS 详细性能统计数据:
$ sudo ebsnvme stats /dev/nvme1n1

步骤 3:比较统计数据,检查 EBS 卷是否无响应

  1. 在此场景下,需要从输出中查看以下三个指标:Total Read Ops(总读操作数)、Total Write Ops(总写操作数)和 Queue Length(队列长度)。

 2. 在特定时间间隔(例如 15 秒)后执行相同的 ebsnvme 命令,然后比较 Amazon EBS 卷的总读/写 I/O 变化情况。

 3. 从约每隔 15 秒收集一次的详细性能统计数据中,我们得到以下重要观察结果:

  • Total Read Ops(总读操作数)从 340086743 增加到 340174856,表明在这 15 秒内完成了 88113 次读操作。
  • Total Write Ops(总写操作数)从 340051578 增加到 340139785,表明在这 15 秒内完成了 88207 次写操作。
  • Queue Length(队列长度)分别为 11 和 9 两个非零值,这个指标表示应用程序向 EBS 卷发出了 I/O 请求。如果队列长度逐渐增加,则表示排队的 I/O 请求数在增加。

然后,这个统计数据表示 EBS 卷仍在处理其接收的 I/O 请求,因此可知 EBS 卷不是造成所观察到的应用程序性能降级的原因。如果队列长度增加,并且在相应期间处理的读/写操作数为 0,则表明 EBS 卷无响应。

如果要验证识别 EBS 卷无响应的机制,请参阅使用 AWS Fault Injection Service 在 Amazon EBS 上进行混沌工程实验博文,其中介绍了如何设置 AWS Fault Injection Service 进行暂停 I/O 实验

场景 2:识别存储设备性能瓶颈

可以根据应用程序性能需求,依据 Amazon EBS 详细性能统计数据为 EBS 卷和 EC2 实例配置合适的性能。EBS Volume Performance Exceeded(EBS 卷性能超标)和 EC2 Instance EBS Performance Exceeded(EC2 实例 EBS 性能超标)统计数据表示在对应的时间段内,工作负载所需 IOPS 或吞吐量持续高于卷或实例预配性能容量的时间长度。如果工作负载需求超过了卷或实例的预配性能,可能会导致工作负载延迟增加。对于此场景,应考虑使用与场景 1 中相同的检测方式。

完成以下步骤,检查是否预配了合适 EBS 卷性能:

  1. 选择要检查的 EBS 卷对应的 NVMe 设备
  2. 按业务所需时间间隔收集设备上的统计数据
  3. 比较统计数据,检查工作负载处理需求是否超出了 EBS 卷的预配性能

步骤 1:选择要检查的 EBS 卷对应的 NVMe 设备

  1. 此步骤与之前在场景 1 中的步骤 1 相同。

步骤 2:按业务所需时间间隔收集设备上的统计数据

  1. 与在场景 1 中的步骤 2 相似,比较两个时间点之间的详细性能统计数据。
  2. 观察 EBS NVMe 设备的 EBS Volume Performance Exceeded(EBS 卷性能超标)和 Instance EBS Performance Exceeded(EC2 实例 EBS 性能超标)统计数据。使用“-interval”选项,可每隔 <interval_seconds> 指定秒数解析一次输出,并输出该时间间隔内的统计数据之间的差异:
$ ebsnvme stats /dev/nvme1n1 --interval 15

步骤 3:比较统计数据,检查工作负载处理需求是否超出了 EBS 卷的预配性能

  1. 在以下示例输出内容截图中,可以看到,EBS Volume Performance Exceeded(EBS 卷性能超标)的统计数据增加了 5349286 微秒。这表明,在 EBS 卷 vol-02b51b6b2cb16aab1 上运行的工作负载尝试处理的 IOPS 超过了底层 EBS 卷的预配值,这可能会影响卷的 I/O 延迟。建议你提高卷性能容量,确保有足够的预配性能来满足应用程序的需求。

 2. 在 EC2 实例上运行另一个不同的工作负载。从以下示例输出中可以看到工作负载所需性能超过了卷所挂载的 EC2 实例的预配 IOPS 性能。在这种情况下,升级到更大的实例规格可以提高应用程序性能。

 3. 可以使用 Oracle 合成负载生成器 Silly Little Oracle Benchmark (SLOB) 模拟 Oracle 数据库上的工作负载,并监控 Amazon EBS 统计数据,确定可能发生性能瓶颈的卷或实例。

要避免应用程序出现性能瓶颈,必须正确配置实例和卷。有关不同 EBS 卷类型的更多信息,请参阅 EBS 卷类型文档;要了解如何选择最适合你的应用程序的最佳 EC2 实例和 EBS 卷组合,请参阅 Amazon EBS 优化文档。这些统计的最细粒度可为 1 秒,使你能够进行有效地实时监测,并根据需要修改卷,优化卷配置。

清理资源

如果你为此次实验创建了 EC2 实例和 EBS 卷,请务必在实验完成后及时终止并删除相应实例和卷,以避免产生后续费用。

总结

在本文中,我们提出了一种解决方案,用于获取实例级别的 Amazon EBS 卷的细粒度性能统计数据。Amazon EBS 详细性能统计让你能以亚分钟级粒度实时查看底层 EBS 卷的性能,从而快速找出导致 EBS 卷上运行的应用程序中断的原因。此外,你还可以根据这些统计数据,识别由于工作负载处理需求超过 Amazon EC2 或 EBS 卷的预配 IOPS 或吞吐量限值而导致的应用程序性能瓶颈。除了可以提供 1 分钟级粒度的卷性能洞察的 Amazon CloudWatch 指标外,你还可以使用其他工具有效识别和解决 Amazon EBS 卷存储问题。

更多教程

快速搭建容量高达 35GB 的免费个人网盘

本教程将介绍如何搭建一个没有使用限制的免费私人网盘。

构建企业专属智能客服机器人

本文将演示如何结合多种服务,打造企业专属的智能客服。

使用生成式 AI 构建多语言问答知识库

使用多种服务,构建可汇总搜索结果的多语言知识库。

查看全部教程 >>

免费套餐

AWS 海外区域

拓展海外业务或个人体验
免费使用 100 余种云产品或服务, 长达 12 个月

AWS 中国区域

发展中国业务
免费使用 40 余种核心云服务产品,长达 12 个月