AWS 计算服务监控与可观测性完全指南:从 CloudWatch 到 X-Ray 的全链路追踪(2026最新版)

📅 · 海外云服务器自建服务教程 - ChengziCloud

一句话结论

Meta Description: 全面掌握AWS计算服务监控体系:CloudWatch日志与指标、CloudTrail审计、X-Ray分布式追踪、ECS/EKS容器可观测性、Lambda冷启动监控与Auto Scaling弹性洞察。

本文要点
  • 前言
  • CloudWatch:AWS 可观测性的中枢神经
  • X-Ray:分布式追踪与微服务调用链可视化
  • CloudTrail:API 活动审计与安全溯源
  • 各计算服务的专项监控
  • EventBridge:事件驱动的自动化响应
  • 可观测性成本管理

Meta Description: 全面掌握AWS计算服务监控体系:CloudWatch日志与指标、CloudTrail审计、X-Ray分布式追踪、ECS/EKS容器可观测性、Lambda冷启动监控与Auto Scaling弹性洞察。

关键词:AWS CloudWatch、CloudTrail审计、X-Ray分布式追踪、ECS监控、Lambda可观测性、Auto Scaling指标、Lightsail监控、Prometheus+Grafana

前言

部署到 AWS 只是第一步——真正考验运维能力的,是当你的 EC2 实例在凌晨 3 点 CPU 飙升时能否第一时间感知,当 Lambda 冷启动拖慢用户体验时能否定位瓶颈,当 ECS 容器异常重启时能否追溯根因。可观测性是现代云运维的生命线,AWS 提供了一套完整但分散的工具链:CloudWatch(日志 + 指标 + 告警)、CloudTrail(API 审计)、X-Ray(分布式追踪),以及容器场景下的 Container Insights 和 Prometheus 集成。

本文将逐一拆解 EC2、Lambda、ECS/EKS、Auto Scaling 和 Lightsail 五大计算服务的监控方案,从基础指标采集到全链路追踪,帮你构建一套覆盖"指标 - 日志 - 追踪 - 告警"四维一体的可观测性体系。

计算服务核心监控工具关键指标追踪粒度
EC2CloudWatch Agent + 详细监控CPU/内存/磁盘/网络实例级 + OS 进程级
LambdaCloudWatch 内置 + X-Ray调用次数/持续时间/冷启动/错误率请求级 + 下游服务追踪
ECS/EKSContainer Insights + PrometheusCPU/内存/任务数/部署状态容器级 + Pod 级 + 服务网格
Auto ScalingCloudWatch 告警 + 生命周期钩子实例数/扩容触发/冷却时间组级别 + 活动历史
LightSailLightSail 控制台 + CloudWatchCPU/网络流量/状态检查实例级(基础)

一、CloudWatch:AWS 可观测性的中枢神经

Amazon CloudWatch 是整个 AWS 监控体系的中心。它不仅仅是一个指标数据库,更是一个集指标采集、日志聚合、告警触发、仪表板可视化于一体的统一平台。

1.1 指标(Metrics):默认 vs 详细 vs 自定义

AWS 每个计算服务都会自动向 CloudWatch 推送基础指标:


# 查看 EC2 实例的默认监控指标(5分钟粒度)
aws cloudwatch list-metrics --namespace AWS/EC2 --dimensions Name=InstanceId,Value=i-1234567890abcdef

# 开启 EC2 详细监控(1分钟粒度,额外收费)
aws ec2 monitor-instances --instance-ids i-1234567890abcdef0
监控粒度默认监控详细监控
指标上报间隔5 分钟1 分钟
费用免费$3.50/实例/月
适用场景日常监控生产环境、Auto Scaling 精准触发
指标数量7 项基础指标同左,但精度提升 5 倍
数据保留15天(1分钟)/ 63天(5分钟)同左

自定义指标是发挥 CloudWatch 全部威力的关键——你可以把应用层指标(QPS、P99 延迟、队列深度)推送到 CloudWatch,与其他 AWS 指标统一查询和告警:


import boto3
import time

cloudwatch = boto3.client('cloudwatch')

# 推送自定义指标:API 响应时间
cloudwatch.put_metric_data(
    Namespace='MyApplication',
    MetricData=[{
        'MetricName': 'ApiLatency',
        'Value': 287.5,  # 毫秒
        'Unit': 'Milliseconds',
        'Dimensions': [{'Name': 'Endpoint', 'Value': '/api/orders'}],
        'Timestamp': time.time()
    }]
)

1.2 日志(Logs):统一日志流

CloudWatch Logs 是 Lambda 和 ECS 的默认日志输出目标,EC2 也可以通过 CloudWatch Agent 推送系统日志和应用日志:


# 安装 CloudWatch Agent(Amazon Linux 2023 / Ubuntu 22.04)
sudo yum install -y amazon-cloudwatch-agent   # Amazon Linux
sudo snap install amazon-cloudwatch-agent     # Ubuntu

# 启动 Agent 并推送系统和应用日志
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
    -a start -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json

日志洞察(Logs Insights) 是最容易被低估的功能——它允许你用类 SQL 语法在 TB 级别的日志中做秒级查询:


# Logs Insights 查询示例:找出过去1小时所有包含 ERROR 的日志
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 50

1.3 告警(Alarms):从被动响应到主动感知

告警是将监控数据转化为行动的关键环节。一个设计良好的告警策略要求做到"不遗漏、不误报、可行动":


# 创建 EC2 CPU 告警(复合条件:3个连续周期内CPU > 80%)
aws cloudwatch put-metric-alarm \
    --alarm-name "EC2-HighCPU" \
    --alarm-description "CPU使用率超过80%" \
    --metric-name CPUUtilization \
    --namespace AWS/EC2 \
    --statistic Average \
    --period 300 \
    --evaluation-periods 3 \
    --threshold 80 \
    --comparison-operator GreaterThanThreshold \
    --dimensions Name=InstanceId,Value=i-1234567890abcdef \
    --alarm-actions arn:aws:sns:us-east-1:123456789012:ops-notify

复合告警可以组合多个指标,大幅减少噪点。例如:只有当"CPU > 90% 且 5xx 错误率 > 5%"时才触发告警,避免单一指标的误报。

1.4 仪表板(Dashboards):一眼看透系统健康度


# 创建自定义仪表板(CloudFormation / AWS CLI)
aws cloudwatch put-dashboard \
    --dashboard-name "Production-Compute" \
    --dashboard-body '{
        "widgets": [
            {
                "type": "metric",
                "x": 0, "y": 0, "width": 12, "height": 6,
                "properties": {
                    "metrics": [
                        ["AWS/EC2", "CPUUtilization", {"stat": "Average"}],
                        ["AWS/Lambda", "Duration", {"stat": "p99"}]
                    ],
                    "period": 300,
                    "stat": "Average",
                    "region": "us-east-1",
                    "title": "计算服务概览"
                }
            }
        ]
    }'

二、X-Ray:分布式追踪与微服务调用链可视化

当请求跨越 Lambda → API Gateway → ECS → RDS → S3 时,单个服务的日志片段无法还原完整的调用路径。AWS X-Ray 通过注入 Trace ID 在所有服务间传递,绘制出端到端的服务地图和调用瀑布图。

2.1 X-Ray 的核心概念

概念说明
Segment单个服务的一次工作单元(如 Lambda 一次调用)
SubsegmentSegment 内部的子操作(如 Lambda 内部调用 DynamoDB)
Trace端到端的完整调用链,由多个 Segment 组成
Service Map自动生成的服务拓扑图,显示节点间的延迟和错误率
Annotations用户自定义的键值对,用于过滤和分组(建议用于业务维度)
Metadata非索引的调试数据(如请求参数),不参与搜索

2.2 Lambda 中的 X-Ray 集成(开箱即用)

Lambda 是 X-Ray 集成最简单的服务——控制台勾选"启用活动追踪"即可:


# Lambda 函数中手动添加子分段和注释
import json
import boto3
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all

# 自动修补 boto3、requests 等常见库
patch_all()

def lambda_handler(event, context):
    # 添加自定义注释(可搜索)
    xray_recorder.put_annotation('customer_tier', event.get('tier', 'standard'))
    
    # 自定义子分段:数据库操作
    with xray_recorder.in_subsegment('fetch-user-profile') as subseg:
        subseg.put_metadata('user_id', event['user_id'])
        dynamodb = boto3.resource('dynamodb')
        table = dynamodb.Table('users')
        result = table.get_item(Key={'id': event['user_id']})
    
    return {'statusCode': 200, 'body': json.dumps({'user': result.get('Item')})}

2.3 ECS/EKS 中的 X-Ray 集成

容器环境需要运行 X-Ray Daemon 作为 Sidecar:


# ECS Task Definition — X-Ray Daemon 作为 Sidecar 容器
{
  "family": "my-app-with-xray",
  "containerDefinitions": [
    {
      "name": "xray-daemon",
      "image": "amazon/aws-xray-daemon:latest",
      "portMappings": [{"containerPort": 2000, "protocol": "udp"}],
      "cpu": 32,
      "memory": 256
    },
    {
      "name": "my-app",
      "image": "my-app:latest",
      "links": ["xray-daemon"],
      "environment": [
        {"name": "AWS_XRAY_DAEMON_ADDRESS", "value": "xray-daemon:2000"}
      ]
    }
  ]
}

EKS Pod 中使用 X-Ray 注入 Sidecar,通过 Kubernetes Mutating Webhook 自动注入。

2.4 X-Ray 采样策略

生产环境中不建议 100% 采样——高流量下会显著增加成本和延迟:


{
  "version": 2,
  "rules": [
    {
      "description": "全部追踪健康检查",
      "host": "*health*", "http_method": "GET",
      "url_path": "*health*", "fixed_target": 0, "rate": 0
    },
    {
      "description": "高优先级请求 50% 采样",
      "http_method": "POST", "url_path": "/api/orders/*",
      "fixed_target": 10, "rate": 0.5
    },
    {
      "description": "默认 5% 采样 + 每秒前 1 个",
      "fixed_target": 1, "rate": 0.05
    }
  ],
  "default": {"fixed_target": 1, "rate": 0.05}
}

三、CloudTrail:API 活动审计与安全溯源

AWS CloudTrail 记录账户中每一次 API 调用——无论来自控制台、CLI、SDK 还是 CloudFormation。它在安全事件调查和合规审计中不可或缺。

3.1 创建追溯 + 管理事件 Trail


# 创建多区域 Trail,投递到 S3 + CloudWatch Logs
aws cloudtrail create-trail \
    --name ManagementAndDataTrail \
    --s3-bucket-name my-cloudtrail-logs \
    --is-multi-region-trail \
    --enable-log-file-validation \
    --cloud-watch-logs-log-group-arn arn:aws:logs:us-east-1:123456789012:log-group:CloudTrail:* \
    --cloud-watch-logs-role-arn arn:aws:iam::123456789012:role/CloudTrail-CW-Role

aws cloudtrail start-logging --name ManagementAndDataTrail

3.2 关键审计场景

场景CloudTrail 查询要点关联服务
EC2 实例被意外终止eventName = "TerminateInstances"CloudTrail + SNS 告警
安全组规则被修改eventName = "AuthorizeSecurityGroupIngress"CloudTrail + Config Rules
IAM 权限提权eventName = "AttachRolePolicy" 且 policyArn 含 AdministratorAccessCloudTrail + EventBridge 实时触发
Lambda 函数代码被更新eventName = "UpdateFunctionCode"CloudTrail + CodePipeline 审计
Auto Scaling 组被删除eventName = "DeleteAutoScalingGroup"CloudTrail + SNS 紧急告警

四、各计算服务的专项监控

4.1 EC2:从 OS 层到应用层的纵深监控

单纯依赖 CloudWatch 默认指标(CPU/网络/磁盘)会遗漏关键问题——内存耗尽、磁盘 inode 满、进程僵死。安装 CloudWatch Agent 是生产环境的必选项:


# CloudWatch Agent 配置示例:采集 mem_used_percent + disk_used_percent
cat > /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json << 'EOF'
{
  "metrics": {
    "metrics_collected": {
      "mem": {"measurement": ["mem_used_percent"]},
      "disk": {"measurement": ["disk_used_percent"], "resources": ["/"]},
      "netstat": {"measurement": ["tcp_established", "tcp_time_wait"]},
      "procstat": [
        {"pattern": "nginx", "measurement": ["pid_count", "cpu_usage"]}
      ]
    },
    "append_dimensions": {"InstanceId": "${aws:InstanceId}"}
  }
}
EOF

EC2 状态检查分为两类,必须同时关注:

检查类型含义故障示例恢复方式
系统状态检查(System)AWS 基础设施本身物理主机故障、网络中断停止→启动(迁移物理机)
实例状态检查(Instance)你的 OS/配置内核崩溃、内存耗尽、错误的网络配置重启实例或修复配置

4.2 Lambda:冷启动、错误追踪与成本洞察

Lambda 的可观测性核心在于回答三个问题:函数运行是否正常?为什么请求变慢了?成本都花在哪里?


# 查询 Lambda 错误日志(Logs Insights)
fields @timestamp, @message, @logStream
| filter @message like /ERROR|Exception|Task timed out/
| stats count() by bin(5m)

Lambda 关键监控面板应包含以下指标:

指标告警阈值建议说明
Errors> 0(任何错误都应告警)调用失败次数
Throttles> 0并发超限被限流
Duration (P99)> 超时设置 × 80%预警接近超时上限
IteratorAge> 60 秒(流处理)Kinesis/DynamoDB Streams 积压
ConcurrentExecutions> 预留并发 × 90%接近并发上限

冷启动监控是 Lambda 性能优化的核心——使用 CloudWatch Lambda Insights 可以获取 initDuration 指标,精确量化冷启动开销:


# Logs Insights 分析冷启动
filter @type = "REPORT"
| parse @message /Init Duration: (?<init_duration>[\d.]+) ms/
| stats avg(init_duration) as avg_cold, max(init_duration) as max_cold, count(*) as cold_starts

4.3 ECS/EKS:容器级别的全栈可观测性

容器环境的监控复杂性远高于虚拟机——你需要同时关注集群健康、容器资源、服务发现、部署状态四个维度。

Container Insights 提供开箱即用的 ECS/EKS 容器监控,无需额外安装 Agent(EKS 通过 CloudWatch Observability Add-on 一键启用):


# 为 ECS 集群启用 Container Insights
aws ecs update-cluster-settings \
    --cluster my-cluster \
    --settings name=containerInsights,value=enabled

对于重度 Kubernetes 用户,Prometheus + Grafana 是事实标准:

工具定位AWS 集成方式
CloudWatch Container Insights开箱即用的容器监控原生集成,无需额外安装
Amazon Managed Prometheus (AMP)托管 Prometheus 兼容服务与 EKS 深度集成,支持自动发现
Amazon Managed Grafana (AMG)托管 Grafana 仪表板内置 AWS 数据源,SSO 集成
ADOT CollectorAWS 版 OpenTelemetry统一指标 + 追踪采集管道

# EKS — 使用 ADOT Collector 将指标推送到 AMP
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
  name: adot-collector
spec:
  mode: deployment
  config: |
    receivers:
      prometheus:
        config:
          scrape_configs:
            - job_name: 'kubernetes-pods'
              kubernetes_sd_configs:
                - role: pod
    exporters:
      prometheusremotewrite:
        endpoint: "https://aps-workspaces.us-east-1.amazonaws.com/workspaces/ws-xxx/api/v1/remote_write"
    service:
      pipelines:
        metrics:
          receivers: [prometheus]
          exporters: [prometheusremotewrite]

4.4 Auto Scaling:弹性行为的可观测性

Auto Scaling 的监控不只看"是否扩容了",更要关注扩容是否及时、缩容是否安全、是否有抖动:


# 查询 Auto Scaling 活动历史
aws autoscaling describe-scaling-activities --auto-scaling-group-name my-asg

# 创建扩缩容事件告警
aws cloudwatch put-metric-alarm \
    --alarm-name "ASG-ScaleOut-Frequency" \
    --metric-name GroupTotalInstances \
    --namespace AWS/AutoScaling \
    --statistic Maximum \
    --period 300 \
    --evaluation-periods 2 \
    --threshold 10 \
    --comparison-operator GreaterThanThreshold

Auto Scaling 常见反模式(可通过监控发现):

  1. 颤振(Flipping):实例数在短时间内反复增删——扩容阈值和缩容阈值过于接近
  2. 扩容滞后:流量洪峰到达后 5-10 分钟才完成扩容——指标粒度过粗(默认 5 分钟)
  3. 冷却时间冲突:默认 300 秒冷却导致第二次扩容被抑制——使用动态冷却或步进扩缩
  4. 不健康实例未替换:健康检查配置不正确,挂掉的实例留在组内

4.5 Lightsail:轻量场景的简化监控

Lightsail 提供简化版监控(CPU/网络流量/状态检查),不支持 CloudWatch 自定义指标和详细监控。如果需要更细粒度的可观测性,建议:


# Lightsail 实例内部署轻量监控:Netdata
curl -s https://get.netdata.cloud/kickstart.sh > /tmp/netdata-kickstart.sh
sh /tmp/netdata-kickstart.sh --non-interactive --claim-token YOUR_TOKEN --claim-url https://app.netdata.cloud
# Netdata 提供 2000+ 指标,Web UI 在 http://<instance-ip>:19999

五、EventBridge:事件驱动的自动化响应

如果告警只是通知你"出问题了",那EventBridge 可以让系统自动修复。它将 CloudWatch 告警、CloudTrail API 调用、AWS Health 事件等转化为可编程的触发器:


# EventBridge 规则:EC2 CPU > 90% → Lambda 自动重启应用服务
{
  "source": ["aws.cloudwatch"],
  "detail-type": ["CloudWatch Alarm State Change"],
  "detail": {
    "state": {"value": ["ALARM"]},
    "previousState": {"value": ["OK", "INSUFFICIENT_DATA"]},
    "configuration": {
      "metrics": [{
        "metricStat": {
          "metric": {"name": ["CPUUtilization"], "namespace": ["AWS/EC2"]}
        }
      }]
    }
  }
}

EventBridge 自动化响应矩阵:

事件源触发条件自动操作实现方式
CloudWatch 告警EC2 CPU > 90%Lambda 重启应用 + 发送 Slack 通知EventBridge → Lambda
CloudTrail安全组开放 0.0.0.0/0Lambda 自动回滚安全组规则EventBridge → Lambda
AWS Health计划中的 EC2 维护提前启动替换实例EventBridge → Step Functions
ECS Task State Change任务反复重启 (>3次)回滚到上一个任务定义EventBridge → Lambda
Lambda 错误率错误率 > 5% 持续 5 分钟回滚到上一个版本EventBridge → CodeDeploy Rollback

六、可观测性成本管理

可观测性本身也是成本中心。以下是一个中型生产环境(20 个 EC2 + 10 个 Lambda + 2 个 ECS 集群 + 5 个 ASG)的月度成本估算:

项目用量估计月费用(美元)优化建议
CloudWatch 自定义指标200 个指标~$60合并低价值指标,使用 Embedded Metric Format
CloudWatch Logs(摄取)500 GB/月~$250设置日志保留期(7-30天),压缩日志
CloudWatch 详细监控20 个 EC2~$70仅对生产实例启用,开发环境用默认监控
X-Ray 追踪1000 万次追踪/月~$50合理配置采样率(非生产环境 5%)
CloudTrail(管理事件)默认免费$0管理事件免费,数据事件按量收费
Container Insights2 个 ECS 集群~$40按观测容器数量计费
合计估算—~$470/月—

成本优化三步走:

  1. 日志保留期策略:开发环境 7 天,生产环境 30 天,审计日志 90 天 → S3 归档
  2. 指标聚合:使用 CloudWatch Embedded Metric Format 以日志形式发送指标(无需额外指标费用)
  3. 采样降本:非生产环境 X-Ray 采样率降至 1%-5%,生产环境 10%-50%

七、常见问题 FAQ

Q:CloudWatch Agent 和 SSM Agent 有什么区别? A:SSM Agent 用于远程管理和自动化运维(Run Command / Session Manager),CloudWatch Agent 专门用于采集 OS 级指标和日志。两者互补,可以共存。生产环境建议同时安装。

Q:Lambda 冷启动监控需要额外配置吗? A:基础冷启动数据(initDuration)在每个 Lambda 的 REPORT 日志中自动包含。如需更详细的冷启动分析(按运行时/内存配置分组),需要启用 Lambda Insights。

Q:ECS Service 的部署失败如何快速定位? A:查看 ECS 控制台的"Deployments"和"Events"标签页,重点关注:镜像拉取失败、健康检查未通过、资源不足(CPU/Memory)、ELB 目标组注册超时。

Q:Lightsail 能用 CloudWatch Agent 吗? A:可以。Lightsail 底层就是 EC2,可以手动安装 CloudWatch Agent 并推送自定义指标到 CloudWatch。只是 Lightsail 控制台不展示 CloudWatch 指标,需要去 CloudWatch 控制台查看。

Q:Prometheus vs CloudWatch,什么时候选哪个? A:如果你是纯 AWS 栈且团队不熟悉 Prometheus → CloudWatch。如果你有混合云/多云需求、需要 PromQL 高级查询、已有 Grafana 仪表板生态 → Prometheus(Amazon Managed Prometheus)。两者也可以通过 CloudWatch Metric Streams 双向集成。

Q:如何监控 Auto Scaling 的"虚假扩容"? A:对比"扩容后 CPU 下降幅度"与"预期下降幅度"。如果扩容后 CPU 没有明显下降,说明瓶颈不在计算资源,可能在下游数据库或外部 API——这类扩容是浪费。可以设置 CloudWatch 复合告警来识别。


总结

AWS 计算服务的可观测性体系不是"装上 CloudWatch 就完了"——它是一个需要根据服务特性、业务优先级和成本约束持续调优的系统工程。EC2 需要 Agent 级别的深层指标,Lambda 关注冷启动和并发限流,ECS/EKS 需要容器级 + 编排层双重监控,Auto Scaling 则要监控"弹性行为"本身而非仅看指标。

核心原则:先建立无死角的基础告警(不漏报),再用复合条件和动态阈值消除误报,最后通过 EventBridge 实现自动自愈。当你半夜不再被手机警报告警惊醒的时候,才是真正"可观测"的那一天。


本文由 5.chengzicloud.cloud 提供,点击访问首页了解更多