如何在 EC2 上配置 CloudWatch 代理监控内存和磁盘指标

文章导读
要在 EC2 上监控内存和磁盘使用率,必须安装并配置 CloudWatch Unified Agent,因为默认的 EC2 监控仅包含 hypervisor 层面的指标,无法获取操作系统内部数据。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 手动配置 JSON 示例
  5. E 怎么验证是否生效
  6. F 常见坑
  7. G 参考来源
A A

要在 EC2 上监控内存和磁盘使用率,必须安装并配置 CloudWatch Unified Agent,因为默认的 EC2 监控仅包含 hypervisor 层面的指标,无法获取操作系统内部数据。

先说结论:通过 IAM 授权后安装 CloudWatch 代理,并启用 metrics_collection 配置,即可在控制台查看内存和磁盘指标。

  • 适合:需要监控 EC2 内部内存使用率、磁盘剩余空间等操作系统级指标的场景
  • 先准备:确保 EC2 实例已绑定具备 CloudWatch 写入权限的 IAM Role
  • 验收:在 CloudWatch 控制台确认命名空间 CWAgent 下出现内存和磁盘相关指标

命令速用版

以下是 Linux 和 Windows 环境下安装和配置代理的核心命令。

Linux (Amazon Linux 2 示例)

# 安装代理
sudo yum install -y amazon-cloudwatch-agent

# 启动配置向导
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

# 启动服务
sudo systemctl start amazon-cloudwatch-agent
sudo systemctl enable amazon-cloudwatch-agent

Windows (PowerShell 示例)

# 安装 MSI 后运行配置向导
& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-config-wizard.exe"

# 启动服务
Start-Service AmazonCloudWatchAgent
Set-Service -Name AmazonCloudWatchAgent -StartupType Automatic

为什么会这样

默认情况下,EC2 提供的监控指标(如 CPU 利用率、网络流量)是由 hypervisor 从外部采集的。hypervisor 无法直接看到实例操作系统内部的内存分配情况或磁盘分区使用率。例如,操作系统内部可能缓存了大量文件,或者磁盘分区已满,这些状态对外部监控是透明的。CloudWatch Agent 运行在实例内部,有权读取操作系统状态,并将这些数据推送到 CloudWatch 服务。

分步处理

1. 配置 IAM 权限

实例必须拥有写入 CloudWatch 的权限。最简便的方式是绑定实例配置文件(Instance Profile)。

在 IAM 控制台创建或选择一个 Role,附加策略 CloudWatchAgentServerPolicy。如果需要记录日志,还需附加 AmazonSSMManagedInstanceCore 以便使用 Systems Manager 分发配置。

2. 安装代理

根据操作系统类型选择安装方式。Linux 可通过 yum 或 apt 安装,Windows 可通过 MSI 安装包。

如何在 EC2 上配置 CloudWatch 代理监控内存和磁盘指标

安装完成后,配置文件通常位于:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json(Linux)。

3. 生成配置文件

建议使用向导生成配置,避免手动编写 JSON 出错。运行配置向导命令后,按提示选择:

  • 操作系统:Linux 或 Windows
  • 监控目标:EC2
  • 是否监控主机指标:是(默认包含 CPU)
  • 是否监控内存指标:是(关键步骤)
  • 是否监控磁盘指标:是(选择需要监控的挂载点)

向导会自动生成配置文件并保存到默认路径。

4. 启动服务

使用系统服务命令启动代理。启动后,代理会读取配置文件并开始推送数据。

手动配置 JSON 示例

如果不使用向导,可手动编辑配置文件。以下是启用内存和磁盘监控的核心字段示例,请确保 JSON 格式正确:

如何在 EC2 上配置 CloudWatch 代理监控内存和磁盘指标
{
  "agent": {
    "metrics_collection_interval": 60
  },
  "metrics": {
    "metrics_collected": {
      "mem": {
        "measurement": ["mem_used_percent"]
      },
      "disk": {
        "measurement": ["disk_used_percent"],
        "resources": ["*"]
      }
    }
  }
}

怎么验证是否生效

1. 控制台检查

登录 CloudWatch 控制台,进入“指标(Metrics)”页面。在搜索框输入 CWAgent 或查找命名空间 CWAgent。展开后应能看到 mem_used_percent(内存使用率)和 disk_used_percent(磁盘使用率)等指标。

2. 日志检查

查看代理运行日志确认无报错。Linux 日志路径通常为:/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log。如果看到“Successfully loaded config”且无推送错误,说明工作正常。

3. 状态命令

运行以下命令检查服务状态:

# Linux
sudo systemctl status amazon-cloudwatch-agent

# Windows
Get-Service AmazonCloudWatchAgent

状态应为 active (running) 或 Running。

常见坑

1. IAM 权限不足

如何在 EC2 上配置 CloudWatch 代理监控内存和磁盘指标

如果实例没有绑定正确的 IAM Role,代理启动后会因鉴权失败无法推送数据。日志中会出现 AccessDenied 相关错误。

2. 配置文件路径错误

手动修改配置时,确保文件放在代理读取的正确路径。Linux 持久化配置通常在 /opt/aws/amazon-cloudwatch-agent/etc/ 目录,Windows 通常在 C:\Program Files\Amazon\AmazonCloudWatchAgent

3. 磁盘挂载点选择

配置磁盘监控时,需明确指定挂载点(如 //data)。如果配置了不存在的挂载点,代理可能无法采集该指标。

4. 时间同步问题

实例系统时间如果与标准时间偏差过大,可能导致数据被 CloudWatch 拒绝接收。确保实例开启了 NTP 时间同步。

参考来源

  • AWS 官方文档 - 为 CloudWatch 代理创建 IAM 角色:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html
  • AWS 官方文档 - 在 EC2 实例上安装 CloudWatch 代理:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance.html
  • AWS 官方文档 - CloudWatch 代理配置文件模板:https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-agent-configuration-file-template.html