🔍搜索⌘K

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 日志权限)

  1. 登录 AWS IAM 控制台,进入「策略」→「创建策略」;
  2. 选择「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": "*"
    }
  ]
}
  1. 点击「下一步」,输入策略名称(如 CloudWatchEC2LogAccess),完成创建。

步骤 2:为 EC2 实例附加 IAM 角色

  1. 进入 EC2 控制台,选中目标 Ubuntu 实例,点击「操作」→「安全」→「修改 IAM 角色」;
  2. 点击「选择 IAM 角色」,若已有合适角色,直接附加上述创建的 CloudWatchEC2LogAccess 策略;若无角色,点击「创建新 IAM 角色」:
  • 信任实体类型选择「AWS 服务」→「EC2」,点击「下一步」;
  • 搜索并选中 CloudWatchEC2LogAccess 策略,点击「下一步」;
  • 输入角色名称(如 EC2CloudWatchLogRole),完成角色创建;
  1. 选择新创建的角色,点击「保存」,等待实例权限生效(通常几秒内完成)。

第一步:安装 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-SyslogCloudWatch 中存储该日志的「日志组名称」(建议包含实例标识,如 EC2-i-123456-Syslog)
8. Log stream name例如 {instance_id}用 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 日志控制台

  1. 登录 AWS CloudWatch 控制台;
  2. 在左侧导航栏选择「日志」→「日志组」,搜索第三步配置的「日志组名称」(如 EC2-Ubuntu-Syslog);
  3. 点击日志组,进入后可看到以「EC2 实例 ID」命名的日志流(如 i-0a1b2c3d4e5f6g7h8);
  4. 点击日志流,即可查看从 EC2 实例上报的日志(如 /var/log/syslog 的系统日志),支持按时间范围筛选、关键字搜索。

2. 手动触发日志上报(验证)

若未立即看到日志,可手动生成一条日志并等待上报:

# 向监控的日志文件写入一条测试日志(以 /var/log/syslog 为例)
sudo echo "CloudWatch Agent 日志测试: $(date)" >> /var/log/syslog

1-2 分钟后,在 CloudWatch 日志流中搜索「CloudWatch Agent 日志测试」,若能找到则说明配置成功。

常见问题与解决方案

问题 1:Agent 启动成功,但 CloudWatch 无日志

可能原因:

  1. 实例角色权限不足:Agent 无权限创建日志组 / 上传日志;
  2. 日志文件路径错误:配置的日志路径不存在或 Agent 无读取权限;
  3. 配置文件未加载:启动命令指定的配置文件路径错误。

解决方案:

  1. 检查 IAM 角色:确认 EC2 实例角色已附加 CloudWatchEC2LogAccess 策略,执行 aws logs describe-log-groups 测试权限(需安装 AWS CLI:sudo apt install awscli);
  2. 验证日志路径:执行 ls -lh /var/log/syslog 确认路径存在,sudo cat /var/log/syslog 确认 root 可读取;
  3. 查看 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 无权限访问配置文件或日志文件。

解决方案:

  1. 确保配置文件权限正确:sudo chmod 644 /opt/aws/amazon-cloudwatch-agent/bin/config.json;
  2. 以 root 身份重新启动 Agent(启动命令前加 sudo)。

问题 3:日志上报延迟超过 5 分钟

原因:CloudWatch Agent 默认日志刷新间隔为 5 秒,但网络延迟或 CloudWatch 服务负载可能导致延迟。

解决方案:

  1. 检查 EC2 实例网络:确保实例能访问 CloudWatch 服务( outbound 流量允许访问 logs.{region}.amazonaws.com,默认 VPC 通常无需额外配置);
  2. 查看 Agent 日志确认是否有「retry」关键字:若频繁重试,可能是权限或网络问题。

总结

通过以上步骤,可完成 Ubuntu EC2 实例到 CloudWatch 的日志监控配置,核心流程可概括为:

  1. 权限先行:通过 IAM 实例角色授予 Agent 最小日志权限;
  2. 安装组件:CloudWatch Agent(必装)+ collectd(可选,指标监控);
  3. 配置日志:用交互式向导指定监控日志路径和 CloudWatch 目标;
  4. 启动验证:启动 Agent 并在 CloudWatch 控制台确认日志上报。

后续可基于 CloudWatch 日志组配置「日志保留策略」(避免存储成本过高)、「日志告警」(如检测到 ERROR 关键字触发邮件通知),进一步提升日志监控的实用性。