AWS CloudWatch 监控 EC2 日志:Ubuntu 实例完整配置指南
概述
Amazon CloudWatch 是 AWS 核心的监控与可观测性服务,可集中收集、存储和分析 AWS 资源(如 EC2 实例)、应用程序及第三方服务的日志与指标。通过 CloudWatch 跟踪 EC2 日志,能实现以下核心价值:
- 实时故障排查:无需登录实例,直接在 CloudWatch 控制台查看应用日志、系统日志,快速定位问题;
- 日志集中管理:避免日志分散在多台 EC2 实例中,统一存储到 CloudWatch Logs,支持按时间检索、筛选;
- 告警联动:基于日志内容(如出现 "Error" 关键字)配置 CloudWatch 告警,及时触发通知(邮件、SNS 等)。
本文以 Ubuntu 系统 EC2 实例为例,从「CloudWatch Agent 安装」到「日志监控验证」,分步讲解完整配置流程,确保日志能稳定上报至 CloudWatch。
前置准备:EC2 实例 IAM 权限配置
CloudWatch Agent 需要通过 IAM 权限与 AWS 服务交互(如创建日志组、上传日志),优先推荐通过「EC2 实例角色」授予权限(无需手动管理 Access Key,更安全),而非使用本地 credentials 文件。
步骤 1:创建 IAM 策略(授予 CloudWatch 日志权限)
- 登录 AWS IAM 控制台,进入「策略」→「创建策略」;
- 选择「JSON」标签,粘贴以下策略(仅包含日志上报必需的最小权限,遵循「最小权限原则」):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup", // 允许创建 CloudWatch 日志组
"logs:CreateLogStream", // 允许创建日志流
"logs:PutLogEvents", // 允许上传日志事件
"logs:DescribeLogStreams" // 允许查询日志流信息
],
"Resource": "arn:aws:logs:*:*:*" // 限制日志操作范围(* 表示所有区域/账户,可按需缩小)
},
{
"Effect": "Allow",
"Action": "ec2:DescribeTags", // 可选:Agent 需获取 EC2 标签用于日志分组(推荐保留)
"Resource": "*"
}
]
}
- 点击「下一步」,输入策略名称(如 CloudWatchEC2LogAccess),完成创建。
步骤 2:为 EC2 实例附加 IAM 角色
- 进入 EC2 控制台,选中目标 Ubuntu 实例,点击「操作」→「安全」→「修改 IAM 角色」;
- 点击「选择 IAM 角色」,若已有合适角色,直接附加上述创建的 CloudWatchEC2LogAccess 策略;若无角色,点击「创建新 IAM 角色」:
- 信任实体类型选择「AWS 服务」→「EC2」,点击「下一步」;
- 搜索并选中 CloudWatchEC2LogAccess 策略,点击「下一步」;
- 输入角色名称(如 EC2CloudWatchLogRole),完成角色创建;
- 选择新创建的角色,点击「保存」,等待实例权限生效(通常几秒内完成)。
第一步:安装 CloudWatch Agent(Ubuntu 系统)
CloudWatch Agent 是 EC2 实例与 CloudWatch 通信的核心组件,负责收集日志、指标并上报。Ubuntu 系统通过 deb 包安装,步骤如下:
1. 下载 CloudWatch Agent 安装包
通过 AWS 官方 S3 地址下载对应系统架构的安装包(Ubuntu 通常为 amd64 架构):
# 下载最新版 CloudWatch Agent(Ubuntu amd64)
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
# 验证安装包完整性(可选,避免下载损坏)
ls -lh amazon-cloudwatch-agent.deb
# 正常输出示例:-rw-r--r-- 1 ubuntu ubuntu 200M Aug 12 10:00 amazon-cloudwatch-agent.deb
2. 安装 Agent 包
使用 dpkg 命令安装,若依赖缺失,通过 apt -f install 自动修复:
# 安装 Agent
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
# 若出现依赖错误(如提示 "unmet dependencies"),执行以下命令修复
sudo apt update && sudo apt -f install -y
第二步:安装 collectd(可选,用于系统指标收集)
collectd 是一款开源系统监控工具,CloudWatch Agent 可通过它收集更丰富的系统指标(如 CPU 使用率、内存占用、磁盘 I/O 等)。若仅需日志监控,可跳过此步骤;若需同时监控系统指标,必须安装:
# 更新 apt 源并安装 collectd
sudo apt update && sudo apt install -y collectd
第三步:配置 CloudWatch Agent(核心:指定监控日志)
通过 CloudWatch 提供的交互式配置向导生成配置文件,该文件会定义「要监控的日志路径」「日志上报到 CloudWatch 的目标日志组」等核心规则。
1. 启动配置向导
执行以下命令启动向导(路径固定为 /opt/aws/amazon-cloudwatch-agent/bin/):
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
2. 按向导提示逐步配置
向导会通过一系列问题生成配置,以下是关键步骤的选择建议(根据实际需求调整):
向导问题 | 推荐选择 | 说明 |
---|---|---|
1. Are you using EC2 or On-Premises hosts? | 1 (EC2) | 目标是 EC2 实例,选择 1 |
2. Which user are you planning to run the agent? | root | 用 root 权限确保能读取所有日志文件(如 /var/log/ 下的系统日志) |
3. Do you want to turn on StatsD daemon? | n | 仅日志监控无需开启 StatsD,若需指标聚合可选 y |
4. Do you want to monitor metrics from Collectd? | y/n | 若已安装 collectd 并需监控系统指标选 y,仅日志监控选 n |
5. Do you want to monitor any log files? | y | 核心:开启日志监控 |
6. Log file path | 例如 /var/log/syslog | 输入要监控的日志路径(Ubuntu 系统日志默认路径,可追加其他路径如 /var/log/nginx/access.log) |
7. Log group name | 例如 EC2-Ubuntu-Syslog | CloudWatch 中存储该日志的「日志组名称」(建议包含实例标识,如 EC2-i-123456-Syslog) |
8. Log stream name | 例如 | 用 EC2 实例 ID 作为日志流名称(便于区分多实例日志),直接输入 {instance_id} 即可自动填充 |
9. Do you want to specify another log file? | y/n | 若需监控多个日志(如应用日志 + 系统日志),选 y 继续添加;否则选 n |
10. Do you want to store the config in the SSM Parameter Store? | n | 简单场景无需存储到 SSM,直接生成本地配置文件 |
11. Do you want to generate a new config file? | y | 生成配置文件 |
Where do you want to save the config file? | 直接回车 | 默认保存到 /opt/aws/amazon-cloudwatch-agent/bin/config.json(推荐默认路径,后续启动命令无需修改) |
3. 验证配置文件(可选)
配置完成后,可查看生成的 config.json 确认日志配置是否正确:
# 查看配置文件内容(重点检查 "logs" 部分)
cat /opt/aws/amazon-cloudwatch-agent/bin/config.json
正常配置的 logs 部分示例(监控 /var/log/syslog):
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/syslog",
"log_group_name": "EC2-Ubuntu-Syslog",
"log_stream_name": "{instance_id}",
"retention_in_days": 30 // 日志保留天数(向导中会设置,默认 30 天)
}
]
}
}
}
第四步:启动 CloudWatch Agent 并加载配置
配置文件生成后,需执行命令加载配置并启动 Agent,确保日志开始上报。
1. 启动 Agent 并加载配置
执行以下命令(-c file:/... 指定配置文件路径,-s 表示启动 Agent):
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config \
-m ec2 \
-c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json \
-s
- -a fetch-config:加载指定的配置文件;
- -m ec2:指定运行环境为 EC2;
- -c file:...:配置文件的本地路径(与向导生成的路径一致);
- -s:启动 Agent。
2. 验证 Agent 运行状态
执行以下命令查看 Agent 是否正常运行:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
正常输出示例(包含 status: running):
{
"status": "running",
"starttime": "2024-09-04T10:00:00+00:00",
"configstatus": "configured",
"version": "1.247354.0"
}
若状态为 stopped,执行 sudo systemctl start amazon-cloudwatch-agent 手动启动,并通过 sudo journalctl -u amazon-cloudwatch-agent 查看启动日志排查错误。
第五步:验证日志是否上报到 CloudWatch
配置完成后,等待 1-2 分钟(日志上报有延迟),通过 CloudWatch 控制台验证日志是否正常接收。
1. 进入 CloudWatch 日志控制台
- 登录 AWS CloudWatch 控制台;
- 在左侧导航栏选择「日志」→「日志组」,搜索第三步配置的「日志组名称」(如 EC2-Ubuntu-Syslog);
- 点击日志组,进入后可看到以「EC2 实例 ID」命名的日志流(如 i-0a1b2c3d4e5f6g7h8);
- 点击日志流,即可查看从 EC2 实例上报的日志(如 /var/log/syslog 的系统日志),支持按时间范围筛选、关键字搜索。
2. 手动触发日志上报(验证)
若未立即看到日志,可手动生成一条日志并等待上报:
# 向监控的日志文件写入一条测试日志(以 /var/log/syslog 为例)
sudo echo "CloudWatch Agent 日志测试: $(date)" >> /var/log/syslog
1-2 分钟后,在 CloudWatch 日志流中搜索「CloudWatch Agent 日志测试」,若能找到则说明配置成功。
常见问题与解决方案
问题 1:Agent 启动成功,但 CloudWatch 无日志
可能原因:
- 实例角色权限不足:Agent 无权限创建日志组 / 上传日志;
- 日志文件路径错误:配置的日志路径不存在或 Agent 无读取权限;
- 配置文件未加载:启动命令指定的配置文件路径错误。
解决方案:
- 检查 IAM 角色:确认 EC2 实例角色已附加 CloudWatchEC2LogAccess 策略,执行 aws logs describe-log-groups 测试权限(需安装 AWS CLI:sudo apt install awscli);
- 验证日志路径:执行 ls -lh /var/log/syslog 确认路径存在,sudo cat /var/log/syslog 确认 root 可读取;
- 查看 Agent 日志:Agent 自身日志路径为 /var/log/amazon/cloudwatch-agent/amazon-cloudwatch-agent.log,搜索 error 关键字定位问题:
grep "error" /var/log/amazon/cloudwatch-agent/amazon-cloudwatch-agent.log
问题 2:Agent 启动失败,提示「permission denied」
原因:Agent 无权限访问配置文件或日志文件。
解决方案:
- 确保配置文件权限正确:sudo chmod 644 /opt/aws/amazon-cloudwatch-agent/bin/config.json;
- 以 root 身份重新启动 Agent(启动命令前加 sudo)。
问题 3:日志上报延迟超过 5 分钟
原因:CloudWatch Agent 默认日志刷新间隔为 5 秒,但网络延迟或 CloudWatch 服务负载可能导致延迟。
解决方案:
- 检查 EC2 实例网络:确保实例能访问 CloudWatch 服务( outbound 流量允许访问 logs.{region}.amazonaws.com,默认 VPC 通常无需额外配置);
- 查看 Agent 日志确认是否有「retry」关键字:若频繁重试,可能是权限或网络问题。
总结
通过以上步骤,可完成 Ubuntu EC2 实例到 CloudWatch 的日志监控配置,核心流程可概括为:
- 权限先行:通过 IAM 实例角色授予 Agent 最小日志权限;
- 安装组件:CloudWatch Agent(必装)+ collectd(可选,指标监控);
- 配置日志:用交互式向导指定监控日志路径和 CloudWatch 目标;
- 启动验证:启动 Agent 并在 CloudWatch 控制台确认日志上报。
后续可基于 CloudWatch 日志组配置「日志保留策略」(避免存储成本过高)、「日志告警」(如检测到 ERROR 关键字触发邮件通知),进一步提升日志监控的实用性。