可观测性栈
AIDLC Operations 的数据基础 — 用 3-Pillar 遥测 + AI 分析层构建运维智能
1. 概览
1.1 可观测性为何是 AgenticOps 的数据基础
可观测性 (Observability) 指通过外部输出 (指标 · 日志 · Trace) 理解系统内部状态的能力。在 EKS 环境中,数百个 Pod、复杂服务网格、动态伸缩交织后,传统监控难以定位根因。
AgenticOps 语境下的可观测性作用:
- 预测运维: 学习历史遥测模式 → 预测未来问题
- 自主响应: 基于实时指标的自动伸缩与自愈
- Ontology 工程 Outer Loop: 把运维数据回馈以持续改进 Ontology
可观测性栈扮演 AIDLC 可信性的 Harness 角色。Ontology 定义 "什么是正确行为",可观测性校验 "是否真的以正确方式运行"。二者结合形成可信性双轴 (Ontology × Harness)。
1.2 3-Pillar 可观测性 + AI 分析层
新增 AI 分析层:
- CloudWatch AI 自然语言查询: 无需 PromQL/Logs Insights,以自然语言分析
- CloudWatch Investigations: 告警发生时基于 AI 的自动根因分析
- DevOps Guru: 基于 ML 的异常检测与洞察
- MCP 集成: AI Agent (Kiro/Q Dev) 直接查询并分析可观测性数据
1.3 EKS 可观测性的核心挑战
- 动态基础设施: Pod 频繁创建 / 删除、Karpenter 动态置节点
- 微服务复杂度: 服务间调用链复杂,难以追踪故障传播路径
- 多层问题: 应用 · 容器 · 节点 · 网络 · AWS 服务等多层结构
- 成本优化: 基于资源使用模式的 Right-sizing 需求
- 合规: 审计日志、访问记录等合规要求
2. 5 层可观测性架构
2.1 层级结构
🏗️ 可观测性架构层次
采集 → 传输 → 存储 → 分析 → 执行
数据流:
2.2 各层核心职责
1. 采集层 (Collection):
- ADOT (OpenTelemetry): 一体化采集指标 · 日志 · Trace,CNCF 标准
- CloudWatch Agent: Container Insights Enhanced、Application Signals
- Fluent Bit: 高性能日志转发
2. 传输层 (Transport):
- OTLP (OpenTelemetry Protocol): 厂商中立标准协议
- Prometheus Remote Write: 长期指标存储
- CloudWatch API: AWS 原生集成
3. 存储层 (Storage):
- AMP: 长期指标 (150 天),支持 PromQL
- CloudWatch Logs: 集中日志、Insights 查询
- X-Ray: 分布式 Trace 存储
4. 分析层 (AI Analysis):
- AMG: Grafana 看板 (融合 AMP/CW/XRay)
- CloudWatch AI: 自然语言查询 + Investigations (根因分析)
- DevOps Guru: 基于 ML 的异常检测
- Application Signals: Zero-code 埋点服务图
5. AI 执行层 (Action):
- MCP 服务器: 向 AI Agent 供给可观测性数据
- Kiro: Spec-driven 自主响应 (生成 IaC 代码)
- Q Developer: 对话式运维支持
2.3 可观测性栈选择模式
无论选哪个后端,只要用 ADOT 作采集层,就可自由更换后端。OpenTelemetry 是 CNCF 标准,数据可导出到 Prometheus、Datadog、Sumo Logic 等大多数后端。这也是 AWS 选择以 Managed Add-on (ADOT) 提供 OpenTelemetry 而非自家 Agent 的原因。
3. AWS 托管可观测性栈
3.1 基于 Managed Add-ons 构建
EKS Managed Add-ons 让 AWS 负责可观测性 Agent 的安装 · 升级 · 补丁,消除运维复杂度。
| Add-on | 作用 | 版本示例 |
|---|---|---|
| adot | ADOT Collector (OpenTelemetry) | v0.40.0-eksbuild.1 |
| amazon-cloudwatch-observability | Container Insights + Application Signals | v2.2.0-eksbuild.1 |
安装示例:
# ADOT Add-on
aws eks create-addon \
--cluster-name my-cluster \
--addon-name adot \
--addon-version v0.40.0-eksbuild.1 \
--service-account-role-arn arn:aws:iam::ACCOUNT_ID:role/adot-collector-role
# CloudWatch Observability Add-on
aws eks create-addon \
--cluster-name my-cluster \
--addon-name amazon-cloudwatch-observability \
--service-account-role-arn arn:aws:iam::ACCOUNT_ID:role/cloudwatch-agent-role
使用 ADOT Add-on 的好处:
- 自动安装 OpenTelemetry Operator
- 内置 AWS 服务认证 (SigV4)
- AWS 保证 EKS 版本兼容性
- 相较自建运维负担降低 80%
3.2 AMP + AMG 集成
Amazon Managed Prometheus (AMP):
- 150 天长期指标保留 (较自建节省 60% 成本)
- 完整 PromQL 兼容
- 自动扩缩 (无限吞吐)
Amazon Managed Grafana (AMG):
- 自动托管最新 Grafana v11.x
- 一体化 AMP/CloudWatch/X-Ray 数据源
- 内置 SAML/SSO 认证
数据流:
ADOT Collector → Prometheus Remote Write → AMP
↓
AMG ← PromQL 查询 ← Grafana 看板
3.3 可观测性后端对比
| 后端 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| AWS 原生 (AMP+AMG+CW) | 与 EKS 集成最佳、IAM 认证、托管负担最小 | 多云不利 | AWS 为主的基础设施 |
| OSS (Prometheus+Grafana) | 完全掌控、成本透明 | 运维负担 (HA、存储管理) | 具备自运营能力时 |
| 3rd Party (Datadog) | 一体化平台、看板丰富 | 成本高、厂商绑定 | 多云环境 |
4. Container Insights Enhanced + Application Signals
4.1 Container Insights Enhanced
EKS 1.28+ 中,Enhanced Container Insights 提供包含 Control Plane 指标 的深度可观测性。
采集指标范围:
- Pod 指标: CPU、内存、网络、磁盘 I/O
- 节点指标: 资源使用率、Kubelet 状态
- Control Plane 指标 (EKS 1.28+):
- API Server:
apiserver_request_total、apiserver_request_duration_seconds - etcd:
etcd_db_total_size_in_bytes、etcd_server_slow_apply_total - Scheduler:
scheduler_schedule_attempts_total、scheduler_scheduling_duration_seconds - Controller Manager:
workqueue_depth、workqueue_adds_total
- API Server:
Enhanced Container Insights 每月新增约 $50-200 费用。建议开发 / 预发使用基础 Container Insights,仅生产启用 Enhanced。
4.2 Application Signals
Zero-code 埋点 自动生成应用的服务图、SLI/SLO、调用图。
支持语言:
- Java: Spring Boot、Tomcat、Jetty (自动埋点)
- Python: Django、Flask、FastAPI (自动埋点)
- .NET: ASP.NET Core (自动埋点)
- Node.js: Express、Nest.js (手动埋点)
自动生成项:
- Service Map: 服务间调用可视化 (显示错误率 · 延迟)
- SLI 自动设定: 自动测量可用性 (错误率)、延迟 (P99)、吞吐
- SLO 配置: 基于 SLI 设定目标 (例 99.9%、P99 < 500ms)
启用方式:
# 仅为 Pod 加 annotation 即可自动埋点
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-java-app
spec:
template:
metadata:
annotations:
instrumentation.opentelemetry.io/inject-java: "app-signals"
spec:
containers:
- name: app
image: my-java-app:latest