EC2 监控和可观测性
介绍
持续监控和可观测性提高了敏捷性,改善了客户体验并降低了云环境的风险。根据维基百科,可观测性 是衡量系统内部状态能从其外部输出中推断出来的程度的指标。可观测性这个术语本身源于控制理论领域,基本上意味着您可以通过了解系统产生的外部信号/输出来推断系统中各组件的内部状态。
监控和可观测性之间的区别在于,监控告诉您系统是否正常工作,而可观测性告诉您系统为什么不正常工作。监控通常是一种被动措施,而可观测性的目标是能够以主动方式改善您的关键绩效指标。一个系统如果没有被观察就无法被控制或优化。通过收集 metrics、日志或 traces 来插桩工作负载,并使用正确的监控和可观测性工具获得有意义的洞察和详细上下文,帮助客户控制和优化环境。

AWS 帮助客户从监控转变为可观测性,使他们能够拥有完整的端到端服务可见性。在本文中,我们重点关注 Amazon Elastic Compute Cloud (Amazon EC2) 以及通过 AWS 原生和开源工具在 AWS 云环境中改善服务监控和可观测性的最佳实践。
Amazon EC2
Amazon Elastic Compute Cloud (Amazon EC2) 是 Amazon Web Services (AWS) 云中高度可扩展的计算平台。Amazon EC2 消除了前期硬件投资的需要,因此客户可以更快地开发和部署应用程序,同时只需为使用的部分付费。EC2 提供的一些关键功能包括称为实例的虚拟计算环境、称为 Amazon Machine Images 的预配置实例模板、以及作为实例类型提供的各种 CPU、内存、存储和网络容量配置。
使用 AWS 原生工具进行监控和可观测性
Amazon CloudWatch
Amazon CloudWatch 是一项监控和管理服务,为 AWS、混合和本地应用程序及基础设施资源提供数据和可操作洞察。CloudWatch 以日志、metrics 和事件的形式收集监控和运营数据。它还提供了在 AWS 和本地服务器上运行的 AWS 资源、应用程序和服务的统一视图。CloudWatch 帮 助您获得系统范围的资源利用率、应用程序性能和运营健康状况的可见性。

统一 CloudWatch Agent
统一 CloudWatch Agent 是 MIT 许可证下的开源软件,支持使用 x86-64 和 ARM64 架构的大多数操作系统。CloudWatch Agent 帮助从 Amazon EC2 实例和混合环境中的本地服务器收集系统级 metrics,从应用程序或服务检索自定义 metrics,以及从 Amazon EC2 实例和本地服务器收集日志。

在 Amazon EC2 实例上安装 CloudWatch Agent
命令行安装
CloudWatch Agent 可以通过命令行安装。各种架构和各种操作系统所需的软件包可供下载。创建必要的 IAM 角色,为 CloudWatch Agent 提供从 Amazon EC2 实例读取信息并将其写入 CloudWatch 的权限。创建所需的 IAM 角色后,您可以在所需的 Amazon EC2 实例上安装并运行 CloudWatch Agent。
AWS 可观测性 Workshop:设置和安装 CloudWatch Agent
通过 AWS Systems Manager 安装
CloudWatch Agent 也可以通过 AWS Systems Manager 安装。创建必要的 IAM 角色,为 CloudWatch Agent 提供从 Amazon EC2 实例读取信息并将其写入 CloudWatch 以及与 AWS Systems Manager 通信的权限。在 EC2 实例上安装 CloudWatch Agent 之前,需要在所需的 EC2 实例上安装或更新 SSM Agent。CloudWatch Agent 可以通过 AWS Systems Manager 下载。可以创建 JSON 配置文件来指定要收集的 metrics(包括自定义 metrics)和日志。创建所需的 IAM 角色和配置文件后,您可以在所需的 Amazon EC2 实例上安装并运行 CloudWatch Agent。
在混合环境中的本地服务器上安装 CloudWatch Agent
在混合客户环境中,服务器既在本地又在云中。可以采用类似的方法在 Amazon CloudWatch 中实现统一的可观测性。CloudWatch Agent 可以直接从 Amazon S3 下载或通过 AWS Systems Manager 下载。为本地服务器创建 IAM 用户以将数据发送到 Amazon CloudWatch。在本地服务器上安装并启动 Agent。
使用 Amazon CloudWatch 监控 Amazon EC2 实例
维护 Amazon EC2 实例和应用程序的可靠性、可用性和性能的一个关键方面是通过持续监控。在所需的 Amazon EC2 实例上安装了 CloudWatch Agent 后,监控实例的健康状况和性能对于维护稳定的环境是必要的。作为基线,建议监控 EC2 实例的 CPU 利用率、网络利用率、磁盘性能、磁盘读写、内存利用率、磁盘交换利用率、磁盘空间利用率、页面文件利用率和日志收集等项目。
基本和详细监控
Amazon CloudWatch 从 Amazon EC2 收集和处理原始数据为可读的近实时 metrics。默认情况下,Amazon EC2 以 5 分钟间隔将 metric 数据发送到 CloudWatch,作为实例的基本监控。要以 1 分钟间隔将实例的 metric 数据发送到 CloudWatch,可以在实例上启用详细监控。
自动化和手动监控工具
AWS 提供两种类型的工具——自动化和手动——帮助客户监控其 Amazon EC2 并在出现问题时报告。其中一些工具需要少量配置,另一些则需要手动干预。 自动化监控工具包括 AWS 系统状态检查、实例状态检查、Amazon CloudWatch 告警、Amazon EventBridge、Amazon CloudWatch Logs、CloudWatch Agent、AWS Management Pack for Microsoft System Center Operations Manager。手动监控工具包括 Dashboard,我们将在本文下面的单独部分中详细介绍。
文档:自动化和手动监控
使用 CloudWatch Agent 从 Amazon EC2 实例获取 Metrics
Metrics 是 CloudWatch 中的基本概念。metric 表示发布到 CloudWatch 的按时间排序的数据点集合。将 metric 视为要监控的变量,数据点表示该变量随时间变化的值。例如,特定 EC2 实例的 CPU 使用率是 Amazon EC2 提供的一个 metric。

使用 CloudWatch Agent 的默认 Metrics
Amazon CloudWatch 从 Amazon EC2 实例收集 metrics,可通过 AWS Management Console、AWS CLI 或 API 查看。可用 metrics 是通过基本监控的 5 分钟间隔或详细监控的 1 分钟间隔(如已开启)覆盖的数据点。

使用 CloudWatch Agent 的自定义 Metrics
客户还可以使用 API 或 CLI 通过标准 1 分钟粒度分辨率或低至 1 秒间隔的高分辨率粒度将自己的自定义 metrics 发布到 CloudWatch。统一 CloudWatch Agent 支持通过 StatsD 和 collectd 检索自定义 metrics。
使用 CloudWatch Agent 配合 StatsD 协议可以从应用程序或服务检索自定义 metrics。StatsD 是一个流行的开源解决方案,可以从各种应用程序收集 metrics。StatsD 特别适用于插桩您自己的 metrics,同时支持基于 Linux 和 Windows 的服务器。
使用 CloudWatch Agent 配合 collectd 协议也可以从应用程序或服务检索自定义 metrics,这是一个仅在 Linux 服务器上支持的流行开源解决方案,具有可以为各种应用程序收集系统统计信息的插件。通过将 CloudWatch Agent 已经可以收集的系统 metrics 与 collectd 的额外 metrics 相结合,您可以更好地监控、分析和排除系统和应用程序故障。
使用 CloudWatch Agent 的其他自定义 Metrics
CloudWatch Agent 支持从 EC2 实例收集自定义 metrics。一些流行的示例:
- 使用 Elastic Network Adapter (ENA) 的 Linux EC2 实例的网络性能 metrics。
- Linux 服务器的 Nvidia GPU metrics。
- 使用 procstat 插件从 Linux 和 Windows 服务器上的单个进程获取进程 metrics。
使用 CloudWatch Agent 从 Amazon EC2 实例获取日志
Amazon CloudWatch Logs 帮助客户使用现有的系统、应用程序和自定义日志文件近实时地监控和排除系统和应用程序故障。要从 Amazon EC2 实例和本地服务器收集日志到 CloudWatch,需要安装统一 CloudWatch Agent。建议使用最新的统一 CloudWatch Agent,因为它可以同时收集日志和高级 metrics。它还支持多种操作系统。如果实例使用实例元数据服务版本 2 (IMDSv2),则需要统一 Agent。

统一 CloudWatch Agent 收集的日志在 Amazon CloudWatch Logs 中处理和存储。可以从 Windows 或 Linux 服务器以及 Amazon EC2 和本地服务器收集日志。CloudWatch Agent 配置向导可用于设置定义 CloudWatch Agent 配置的 JSON 文件。

AWS 可观测性 Workshop:Logs
Amazon EC2 实例事件
事件表示 AWS 环境中的变化。AWS 资源和应用程序在其状态发生变化时可以生成事件。CloudWatch Events 提供描述 AWS 资源和应用程序变化的系统事件的近实时流。例如,当 EC2 实例的状态从 pending 变为 running 时,Amazon EC2 会生成一个事件。客户还可以生成自定义应用程序级别的事件并将其发布到 CloudWatch Events。
客户可以通过查看状态检查和计划事件来监控 Amazon EC2 实例的状态。状态检查提供 Amazon EC2 执行的自动化检查的结果。这些自动化检查检测是否存在影响实例的特定问题。状态检查信息与 Amazon CloudWatch 提供的数据一起,为每个实例提供详细的运营可见性。