文章详情

亚马逊云海外版 AWS CloudWatch 监控指南:EC2、RDS 与应用日志的可观测性配置实践

亚马逊aws2026-10-21 16:08:31Azure顶尖云

用户搜索“AWS CloudWatch 监控指南”时,通常不是想了解 CloudWatch 是什么,而是想解决几个具体问题:实例已经上线,但 CPU、内存、磁盘和日志分散在不同位置;告警经常误报,半夜收到通知却发现业务正常;EC2、RDS 和应用日志无法放到同一个排障链路里,导致定位慢。本文直接围绕这些操作问题展开,给出控制台配置、Agent 安装、告警参数设置和故障排查方法。

为什么很多团队部署了 CloudWatch,仍然看不清问题

在实际运维中,最常见的卡点不是“不会开监控”,而是“监控数据不完整”或“看到了数据却不知道怎么用”。例如:

  • EC2 默认只有 CPU、网络和磁盘基础指标,看不到内存使用率。
  • 系统日志在实例本地,没有集中到 CloudWatch Logs,告警触发后无法追踪异常时间点。
  • RDS 指标很多,但阈值设置过于激进,CPU 短时升高也会反复触发告警。
  • 不同 Region 的资源分散,Dashboard 没有统一视图。

如果你的目标是构建计算资源可观测性体系,至少要覆盖 4 类数据:主机指标、数据库指标、系统/应用日志、异常通知。缺一项,排障效率都会明显下降。

操作前准备:账号、权限、实例和前置条件

亚马逊云海外版 账号和权限要求

建议使用具备以下权限的 IAM 用户或角色,而不是直接用 root 账号操作:

权限类型用途
CloudWatchFullAccess 或精细化 CloudWatch 权限创建告警、Dashboard、查看指标
CloudWatchAgentServerPolicy允许 EC2 上的 Agent 写入指标和日志
AmazonSSMManagedInstanceCore可通过 SSM 管理实例和下发 Agent 配置
RDS 只读或监控相关权限查看数据库监控指标

所需资源

  • 至少 1 台 EC2 实例,建议 Amazon Linux 2、Amazon Linux 2023、Ubuntu 20.04+/22.04 或 Windows Server。
  • 如需数据库监控,准备 1 个 RDS MySQL/PostgreSQL 实例。
  • 已绑定 IAM Role 的 EC2 实例,避免手动保存 Access Key。
  • 用于接收通知的 SNS Topic,以及邮箱或企业 IM Webhook 中转。

前置检查

  • 实例能访问 CloudWatch、Logs、SSM 相关 AWS API。若在私网子网,需配置 NAT 或 VPC Endpoint。
  • 安全组和本机防火墙允许你的 SSH 或 RDP 管理连接。
  • 系统时间同步正常,日志时间戳错乱会影响排障。

步骤一:先把 EC2 基础监控和告警建起来

亚马逊云海外版 这一部分先解决“实例存活状态、CPU、网络异常没人知道”的问题。

1. 在控制台确认实例监控状态

进入 AWS 控制台后,打开 EC2 控制台,点击目标实例,查看“Monitoring”页签。这里默认能看到 CPUUtilization、NetworkIn、NetworkOut、StatusCheckFailed 等指标。

如果是生产实例,建议开启 Detailed Monitoring。操作路径为:

  • EC2 控制台
  • 亚马逊云海外版 选择实例
  • Actions
  • Monitor and troubleshoot
  • 亚马逊云海外版 Manage detailed monitoring

开启后指标粒度通常从 5 分钟缩短到 1 分钟,更适合快速定位突发抖动。

2. 创建 CPU 和状态检查告警

进入 CloudWatch 控制台,点击 Alarms,选择 Create alarm。

配置项建议填写
MetricEC2 > Per-Instance Metrics > CPUUtilization
StatisticAverage
Period5 minutes
Threshold typeStatic
条件示例连续 3 个周期 > 80%
通知方式发送到 SNS Topic

然后再单独创建一个 StatusCheckFailed 告警。这个指标对实例宿主机异常、系统故障更敏感,优先级通常高于 CPU 告警。

注意:不要一上来就把 CPU 阈值设为 60%。很多业务在发布、缓存预热、备份期间会短时升高,这种设置很容易制造无效告警。

3. 网络和磁盘基础指标怎么判断异常

EC2 默认能看到网络吞吐,但是否异常要结合实例类型和业务特征判断。通用经验如下:

  • NetworkIn/Out 突增但 CPU 不高,优先检查爬虫、下载流量或异常请求。
  • CPU 不高但页面变慢,往往不是算力问题,而是磁盘 IO、数据库等待或外部接口阻塞。
  • 如果实例使用 EBS,还要关注 VolumeReadOps、VolumeWriteOps、VolumeQueueLength。

基础监控阶段先把实例健康、CPU 和网络趋势看住,下一步再补足内存、磁盘和日志缺口。

步骤二:安装 CloudWatch Agent,补齐内存、磁盘和日志

这是很多用户真正卡住的地方。CloudWatch 默认不直接提供 EC2 的内存使用率和磁盘使用率,需要安装 CloudWatch Agent。

1. Linux 安装 CloudWatch Agent

以 Amazon Linux / CentOS / RHEL 为例:

<code>sudo yum install amazon-cloudwatch-agent -y</code>

Ubuntu / Debian:

<code>sudo apt-get update && sudo apt-get install amazon-cloudwatch-agent -y</code>

安装后执行向导:

<code>sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard</code>

向导里建议采集以下内容:

采集项建议
mem_used_percent必须开启,判断实例是否需要扩容
disk_used_percent至少监控 / 和数据盘挂载点
swap_used_percent有 swap 的实例建议开启
procstat监控 nginx、java、docker 等关键进程存活
日志文件/var/log/messages、/var/log/secure、应用日志目录

配置完成后启动 Agent:

<code>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</code>

2. Windows 安装与日志采集

Windows 场景下,常见需求是采集内存、逻辑磁盘使用率和 IIS/应用日志。操作方式:

  • 登录 Windows Server
  • 安装 AmazonCloudWatchAgent.msi
  • 使用 CloudWatch Agent Configuration Wizard 生成配置
  • 采集 Performance Counter 和 Windows Event Log

建议重点采集:

  • Memory % Committed Bytes In Use
  • LogicalDisk % Free Space
  • System/Application 安全事件日志
  • IIS 日志目录

3. 常见失败点

问题原因解决办法
Agent 启动失败配置 JSON 语法错误先用向导生成,再手工微调
指标不上报实例未绑定 IAM Role挂载含 CloudWatchAgentServerPolicy 的角色
日志组未创建权限不足或 Region 写错检查 logs:CreateLogGroup、logs:PutLogEvents
私网实例无法发送数据无公网或无 Endpoint补 NAT 或创建 CloudWatch/Logs VPC Endpoint

步骤三:把 RDS、日志与 Dashboard 串起来,形成排障链路

仅靠主机指标很难解释“为什么服务变慢”。接下来要把数据库和日志接入统一视图。

亚马逊云海外版 1. 创建 RDS 关键告警

进入 RDS 控制台,选择实例,在 Monitoring 页签确认指标。建议优先建立以下告警:

指标建议阈值适用场景
CPUUtilization连续 15 分钟 > 75%计算型数据库
FreeStorageSpace低于 15%-20%避免自动扩容前写入失败
DatabaseConnections接近实例上限的 70%-80%连接池泄漏排查
FreeableMemory持续走低查询缓存、排序、并发压力过大
ReadLatency/WriteLatency高于业务基线SQL 慢查询和 IO 压力分析

如果你的业务是 MySQL,建议把 CloudWatch 告警与慢查询日志结合。仅看到 CPU 高,不代表一定要升级实例,很多时候是某条 SQL 缺索引。

2. 采集应用日志并建立 Metric Filter

进入 CloudWatch Logs,找到你的日志组。如果应用日志已通过 Agent 上报,可以直接创建 Metric Filter,把错误关键词转成指标。

亚马逊云海外版 示例:统计 Nginx 5xx 或 Java 应用中的 ERROR。

  • 打开日志组
  • 选择 Create metric filter
  • 输入过滤模式,例如 ERROR 或 5xx
  • 指定命名空间,如 App/Errors
  • 设置 Metric Name,如 ErrorCount

这样你就可以基于日志错误数创建告警,而不是等用户反馈后才知道应用异常。

3. 建立 Dashboard,避免排障时来回切页面

一个实用的 Dashboard 至少要包含:

  • EC2:CPU、内存、磁盘使用率、网络吞吐
  • RDS:CPU、连接数、可用内存、延迟
  • 日志指标:5xx、ERROR、登录失败次数
  • 告警状态:当前 ALARM 资源列表

创建路径:

  • CloudWatch 控制台
  • Dashboards
  • Create dashboard

建议按“业务系统”而不是按“资源类型”组织图表。比如“订单系统生产环境”一个 Dashboard,里面同时放 Web、API、RDS 和日志错误。这样在故障发生时,不需要在 EC2、RDS、Logs 之间来回切换。

怎么选配置和阈值:不同场景的监控建议

个人开发者

优先监控实例健康、CPU、内存、磁盘和 SSH 登录失败日志。告警数量控制在 5 个以内,避免信息过载。单机站点建议增加磁盘剩余空间告警,防止日志打满。

企业用户

亚马逊云海外版 建议按环境拆分:生产、预发布、测试使用不同 SNS Topic。生产环境告警要接入值班通知,测试环境只发邮箱。对核心实例开启 1 分钟监控,对普通批处理节点保留标准监控以控制成本。

跨境业务

重点关注 Region 选择和网络延迟。CloudWatch 本身不解决网络路径问题,但可以把不同 Region 的 ELB、EC2 和 Route 53 健康检查结果汇总。若用户在海外访问慢,需同时观察源站 CPU、带宽、CDN 回源错误和 SSL 证书过期情况。

网站应用

至少覆盖 Nginx 5xx、PHP-FPM/Java 进程存活、磁盘空间和 RDS 连接数。对 HTTPS 站点,还应加入证书有效期巡检,避免误判为服务器故障。

数据库业务

如果是连接型高并发业务,不要只盯 CPU。更有价值的顺序通常是:连接数、慢查询、读写延迟、可用内存、磁盘空间。Redis 场景则应重点监控内存使用率、连接数、网络流量和淘汰数。

常见故障排查:哪些地方最容易踩坑

告警创建了,但没有收到通知

先检查 SNS Topic 是否已确认订阅邮箱;再看告警状态是否真的进入 ALARM;最后确认是否配置了错误的 Region。CloudWatch 告警和 SNS Topic 不在同一区域时,用户经常误以为通知失效。

CPU 正常,但业务明显卡顿

优先检查内存、磁盘队列、数据库延迟和应用日志。很多 Java、Node.js、Python 服务卡顿不是 CPU 打满,而是线程池阻塞、连接池耗尽或外部 API 超时。

CloudWatch 里没有内存数据

不是服务异常,而是实例未安装 CloudWatch Agent,或者 Agent 仅采集了日志未采集 metrics。检查配置文件中的 metrics_collected 段。

日志上报延迟很大

通常与实例网络、日志文件轮转策略或 Agent 缓冲设置有关。如果日志量很大,建议拆分日志组,避免单个日志流过热;同时检查应用是否频繁 rename 日志文件导致采集断点异常。

RDS 告警频繁误报

多数是阈值设置脱离业务基线。例如每天 10:00 有固定报表任务,CPU 短时升高是正常现象。解决方式不是关闭告警,而是改为“连续 3-5 个周期触发”,或者按业务时间段设不同响应策略。

进一步优化:安全、性能、成本和稳定性怎么平衡

安全优化

  • EC2 使用 IAM Role,不在实例内保存 Access Key。
  • 亚马逊云海外版 日志中避免直接上报明文密码、Token 和身份证号等敏感字段。
  • 开启登录失败、sudo、RDP 安全事件采集,便于审计。

性能优化

  • 监控项不要无节制增加,优先保留能指导决策的指标。
  • 核心进程使用 procstat,比单纯看 CPU 更容易发现服务假死。
  • 给 Dashboard 加上业务基线时间段,便于比对发布前后差异。

成本优化

  • 不是所有实例都需要 1 分钟详细监控,开发测试环境可以保留标准粒度。
  • 日志保留期不要无限制,常见做法是 7 天、30 天、90 天分层。
  • 高频且价值低的告警要合并,否则通知噪声会拖垮值班效率。

稳定性优化

  • 对关键服务同时配置“资源类告警”和“日志类告警”,减少漏报。
  • 将 CloudWatch 与 Auto Scaling 联动时,阈值要保守,避免反复扩缩容。
  • 每次发布后回看 Dashboard 30 分钟,确认错误日志、延迟和资源指标没有异常抬升。

如果你是第一次搭建 AWS CloudWatch 监控,推荐的落地顺序是:先做 EC2 基础告警,再装 Agent 补齐内存和磁盘,随后接入 RDS 与应用日志,最后通过 Dashboard 和 SNS 通知形成完整闭环。这样最容易在真实故障中发挥作用,而不是只停留在“图表很多,但没人用”的状态。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系