要在 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-agentWindows (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 安装包。
安装完成后,配置文件通常位于:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json(Linux)。
3. 生成配置文件
建议使用向导生成配置,避免手动编写 JSON 出错。运行配置向导命令后,按提示选择:
- 操作系统:Linux 或 Windows
- 监控目标:EC2
- 是否监控主机指标:是(默认包含 CPU)
- 是否监控内存指标:是(关键步骤)
- 是否监控磁盘指标:是(选择需要监控的挂载点)
向导会自动生成配置文件并保存到默认路径。
4. 启动服务
使用系统服务命令启动代理。启动后,代理会读取配置文件并开始推送数据。
手动配置 JSON 示例
如果不使用向导,可手动编辑配置文件。以下是启用内存和磁盘监控的核心字段示例,请确保 JSON 格式正确:
{
"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 权限不足
如果实例没有绑定正确的 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