CloudWatch 控制面板与容器洞察
构建多服务运营控制面板,并启用 Container Insights 以获取 ECS 和 EKS 集群级性能指标
CloudWatch 控制面板与容器洞察 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。
CloudWatch 仪表板概览
CloudWatch 仪表板是 AWS 基础设施的可自定义多组件视图,可提供统一的运维全貌。仪表板可以在同一屏幕上显示来自多个 AWS 服务和账户的指标,包括折线图、数字组件、仪表盘、警报和日志查询结果。仪表板是全局资源——一个仪表板可以显示来自任何区域的指标。您可以公开共享仪表板,也可以通过 IAM 策略限制访问权限。
仪表板组件
CloudWatch 仪表板支持多种组件类型:用于时间序列指标的折线图和堆叠面积图,用于显示最新指标值的数字组件(非常适合 KPI),用于比较的条形图,用于显示容量指标的仪表盘,用于汇总警报状态的警报状态,用于显示 Live Tail 或 Insights 查询结果的日志表,以及用于标签和文档的文本。将不同类型的组件组合到一个仪表板中,有助于团队快速评估系统运行状况。
# Create a dashboard via CLI (body must be escaped JSON)
aws cloudwatch put-dashboard \
--dashboard-name ProductionOverview \
--dashboard-body '{
"widgets": [
{
"type": "metric",
"properties": {
"metrics": [["AWS/EC2","CPUUtilization","AutoScalingGroupName","my-asg"]],
"period": 60,
"stat": "Average",
"title": "ASG CPU Utilization"
}
}
]
}'跨账户和跨区域仪表板
CloudWatch 支持使用监控账户和源账户实现跨账户可观测性。您可以指定一个中央监控账户,将源账户关联到该账户,并构建从所有已关联账户提取指标和日志的仪表板。这样,在观察多账户环境时就不必切换控制台账户。同一账户中的跨区域组件也原生支持,只需在仪表板 JSON 定义中指定区域即可。
# Enable cross-account sharing in a source account
aws cloudwatch put-dashboard \
--dashboard-name MultiRegionView \
--dashboard-body '{
"widgets": [
{
"type": "metric",
"properties": {
"metrics": [
["AWS/RDS","DatabaseConnections","DBInstanceIdentifier","prod-db",{"region":"us-east-1"}],
["AWS/RDS","DatabaseConnections","DBInstanceIdentifier","prod-db-eu",{"region":"eu-west-1"}]
],
"title": "DB Connections: us-east-1 vs eu-west-1"
}
}
]
}'CloudWatch Live Tail
CloudWatch Live Tail(于 2023 年推出)可以直接在 CloudWatch 控制台或 CLI 中,以近乎实时的方式从一个或多个日志组传输日志事件——类似于在日志文件上运行 tail -f。您可以应用筛选模式,仅查看匹配的事件。在部署或调查事件期间,当您需要观察应用程序当前正在执行的操作,而不想运行完整的 Insights 查询时,Live Tail 非常有用。
# Start a Live Tail session for a Lambda function's logs
aws logs start-live-tail \
--log-group-identifiers '/aws/lambda/my-function' \
--log-event-filter-pattern 'ERROR'
# The output streams log events in real time until you cancel (Ctrl+C)什么是 Container Insights
CloudWatch Container Insights 是 CloudWatch 的一项功能,可收集、聚合和汇总运行在亚马逊 ECS(EC2 和 Fargate)及亚马逊 EKS(EC2 和 Fargate)上的容器化工作负载的指标和日志。它提供预构建的仪表板,用于查看集群、服务、节点和 Pod 级别的性能,无需您手动为每个应用程序添加监控。Container Insights 使用 CloudWatch Agent 或 EKS Fargate 日志路由器来收集数据。
# Enable Container Insights on an ECS cluster
aws ecs update-cluster-settings \
--cluster my-ecs-cluster \
--settings name=containerInsights,value=enabled
# Enable Container Insights on EKS (via CloudWatch Agent DaemonSet)
eksctl utils update-cluster-logging \
--cluster my-eks-cluster \
--enable-types all \
--region us-east-1Container Insights 指标
Container Insights 在 ECS/ContainerInsights 和 ContainerInsights 命名空间中收集指标。对于 EKS,这些指标包括:Pod 级别——pod_cpu_utilization、pod_memory_utilization、pod_network_rx_bytes;节点级别——node_cpu_utilization、node_memory_utilization、node_filesystem_utilization;集群级别——cluster_failed_node_count、cluster_node_count。所有指标都会标记集群、命名空间、服务和 Pod 维度,以便进行精确筛选。
# Query pod memory utilization for a specific namespace
aws cloudwatch get-metric-statistics \
--namespace ContainerInsights \
--metric-name pod_memory_utilization \
--dimensions \
Name=ClusterName,Value=my-cluster \
Name=Namespace,Value=production \
--statistic Average \
--period 60 \
--start-time 2024-01-01T00:00:00Z \
--end-time 2024-01-01T01:00:00Z控制台中的 Container Insights 仪表板
启用 Container Insights 后,CloudWatch 控制台会自动提供预构建的容器映射和性能监控视图。容器映射以可视化拓扑的形式显示您的 ECS 任务或 EKS Pod,并根据运行状况使用不同颜色标识,还可以进一步查看单个容器的指标。性能监控视图提供集群、节点、Pod 和容器性能的时间序列图,无需手动配置仪表板。
使用 Container Insights 监控 ECS 任务性能
对于EC2 上的 ECS,Container Insights 会在每个容器实例上将 CloudWatch Agent 安装为守护服务。对于Fargate 上的 ECS,Container Insights 使用 Fargate 平台版本 1.4.0 的旁车指标收集器。您可以按集群、服务、任务或容器维度访问 ECS 指标。一种常见的告警模式是:当 MemoryUtilized 接近任务的 MemoryReserved 值时触发警报,从而在 OOM 条件终止任务之前及时发现潜在问题。
# Get memory reservation and utilisation for a service
aws cloudwatch get-metric-statistics \
--namespace ECS/ContainerInsights \
--metric-name MemoryUtilized \
--dimensions Name=ClusterName,Value=my-cluster Name=ServiceName,Value=api-service \
--statistic Average \
--period 300 \
--start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ)应用程序信号和 ServiceLens
CloudWatch ServiceLens 将指标、日志和跟踪整合到统一的服务映射中。使用它时必须同时启用AWS X-Ray 和 CloudWatch。ServiceLens 可以直观显示服务之间端到端的请求流,突出显示延迟瓶颈,并按服务显示错误率。CloudWatch 应用程序信号(较新的后继功能)可以自动为应用程序添加监控,以便在无需修改代码的情况下公开 SLO 和 SLI,从而实现超越原始指标的可靠性跟踪。
仪表板最佳实践
高效的 CloudWatch 仪表板应遵循以下最佳实践:按受众划分仪表板(运维人员、管理人员和开发人员分别使用),将警报状态组件放在值班团队首先看到的位置,固定仪表板以便频繁访问,并结合 CloudFormation 使用动态引用,确保仪表板中的指标引用与实际资源名称保持一致。避免在单个仪表板中放入过多内容——在高压下诊断事件时,可读性非常重要。
CloudWatch Contributor Insights
CloudWatch Contributor Insights 会分析结构化日志数据,以识别一段时间内某项指标的前 N 个贡献者。例如,它可以显示产生最多 5xx 错误的 IP 地址、请求量最高的 API 路径,或触发最多 DynamoDB 限流的客户 ID。规则用于定义要提取并进行聚合的 JSON 字段。结果会以时间序列图的形式显示,并随着新日志数据到达而持续更新。
# Enable Contributor Insights on a DynamoDB table
aws dynamodb enable-kinesis-streaming-destination \
--table-name my-table
# Or enable CloudWatch Contributor Insights via the console:
# CloudWatch -> Contributor Insights -> Create rule
# Log group: /aws/dynamodb/tables
# Contributor field: $.TableName
# Aggregation: COUNT by $.requestID快速检查
测试您对本课 AWS 解决方案架构师(SAA-C03)相关概念的理解。
课程回顾
本课介绍了:CloudWatch 仪表板支持多种组件类型,并可以跨账户和区域聚合指标;Container Insights无需手动添加监控,即可自动收集 ECS 和 EKS 的 Pod 级别及节点级别指标;Contributor Insights可以从结构化日志数据中识别主要贡献者。接下来,我们将探索 CloudTrail Trails 和事件历史记录,了解 API 级别的审计。
常见问题解答
「CloudWatch 控制面板与容器洞察」课时是免费的吗?
是的 — 「CloudWatch 控制面板与容器洞察」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。
「CloudWatch 控制面板与容器洞察」这节课中我会学到什么?
构建多服务运营控制面板,并启用 Container Insights 以获取 ECS 和 EKS 集群级性能指标 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AWS Solutions Architect 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「CloudWatch 控制面板与容器洞察」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AWS Solutions Architect 课中编写并运行代码吗?
能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- CloudWatch 指标、命名空间与维度
- CloudWatch 警报与复合警报
- CloudWatch 日志与日志洞察
- CloudWatch 控制面板与容器洞察