AWS DevOps Agent 实测:AI 自主运维从告警到根因报告的完整技术路径

问题背景

企业级 AWS 环境里,EC2、RDS、EKS、Lambda、ALB 交织运行,一个故障的排查路径可能跨越 CloudWatch 指标、CloudTrail 操作记录、VPC Flow Logs、Config 变更等多个数据源。人工关联这些数据,从告警触发到定位根因往往需要 30 分钟到数小时。

AWS DevOps Agent(2026 年 3 月 GA)试图解决这个问题:AI 驱动的自主运维代理,接收告警后自动跨服务关联数据,输出结构化根因分析报告。

本文记录了用 EC2 CPU 告警场景做的一次完整测试,包括架构设计、部署代码和实际观察。

DevOps Agent 核心机制

自动拓扑发现

Agent 启动调查时,先自动调 AWS API 构建账户内的资源拓扑——哪些 EC2 关联了哪个 ALB、挂了哪个 RDS、属于哪个 VPC。不需要预先配置资源清单。

AI 自主调查策略

告警进来后,Agent 自己决定调查路径:先查 CloudWatch 指标确认症状,再翻 CloudTrail 看最近的 API 操作,然后检查 Config 变更和 VPC Flow Logs。整个过程不需要预定义 runbook。

结构化 Journal Records

调查结果按类型分层存储:

recordType 含义
symptom 发现的症状
finding 调查发现(含根因)
observation 观测数据
investigation_gap 调查中的信息缺口
investigation_summary_md Markdown 格式完整摘要

触发方式

  • Backlog Task:异步模式,适合自动化流水线。Agent 调查完通过 EventBridge 发布 Investigation Completed 事件
  • Chat API:同步流式响应,支持多轮对话,适合交互式排查
  • Webhook:第三方系统(PagerDuty、Datadog、Grafana)直接 POST

测试架构:事件驱动全链路

EC2 CPU > 80%
  → CloudWatch Alarm
    → EventBridge Rule-1
      → Lambda-A: create_backlog_task()
        → DevOps Agent 自主调查(5-15 min)
          → EventBridge Rule-2 (aws.aidevops / Investigation Completed)
            → Lambda-B: list_journal_records() → 飞书通知

Lambda-A:触发调查

import json, os, boto3

def lambda_handler(event, context):
    detail = event.get("detail", {})
    if detail.get("state", {}).get("value") != "ALARM":
        return {"statusCode": 200, "body": "Skipped"}

    alarm_name = detail.get("alarmName", "Unknown")
    metrics = detail.get("configuration", {}).get("metrics", [])
    instance_id = ""
    if metrics:
        dims = metrics[0].get("metricStat", {}).get("metric", {}).get("dimensions", {})
        instance_id = dims.get("InstanceId", "")

    client = boto3.client("devops-agent", region_name="us-west-2")
    resp = client.create_backlog_task(
        agentSpaceId=os.environ["DEVOPS_AGENT_SPACE_ID"],
        taskType="INVESTIGATION", priority="HIGH",
        title=f"Investigate: {alarm_name} - {instance_id}",
        description=f"Alarm '{alarm_name}' on {instance_id}",
    )
    return {"statusCode": 200, "body": json.dumps({"taskId": resp["task"]["taskId"]})}

注意:Lambda 运行时内置 boto3 不包含 devops-agent 客户端。需要通过 Layer 部署新版 boto3:

mkdir -p /tmp/boto3-layer/python
pip install boto3 -t /tmp/boto3-layer/python --upgrade
cd /tmp/boto3-layer && zip -r /tmp/boto3-layer.zip python/
aws lambda publish-layer-version --layer-name boto3-latest \
  --zip-file fileb:///tmp/boto3-layer.zip --compatible-runtimes python3.12

Lambda-B:获取报告

def get_summary(space_id, exec_id):
    client = boto3.client("devops-agent", region_name="us-west-2")
    resp = client.list_journal_records(agentSpaceId=space_id, executionId=exec_id)
    for r in resp.get("records", []):
        if r.get("recordType") == "investigation_summary_md":
            return r.get("content", "")
    return "No summary available."

EventBridge 规则

# 告警 → Lambda-A
aws events put-rule --name "Alarm-To-Agent" \
  --event-pattern '{"source":["aws.cloudwatch"],"detail-type":["CloudWatch Alarm State Change"]}'

# 调查完成 → Lambda-B(事件源是 aws.aidevops)
aws events put-rule --name "Agent-Done" \
  --event-pattern '{"source":["aws.aidevops"],"detail-type":["Investigation Completed"]}'

Chat API 实时对话

Backlog Task 是异步的。需要交互式排查时用 Chat API:

chat = client.create_chat(agentSpaceId=SPACE_ID, userId="user", userType="IAM")
resp = client.send_message(
    agentSpaceId=SPACE_ID, executionId=chat["executionId"],
    content="哪些 EC2 实例最近 1 小时 CPU 超过 80%?",
    userId="user",
)
# 流式返回,解析 contentBlockDelta.delta.textDelta.text

同一 executionId 多轮对话保持上下文。

测试观察

指标 结果
调查启动到完成 约 8 分钟(单 EC2 实例场景)
报告结构 Symptom → Finding → Observation → Summary,层次清晰
根因准确性 准确定位到 stress 进程导致 CPU 飙升
部署复杂度 2 个 Lambda + 2 条 EventBridge Rule,约 2 小时

GA 版还支持 Azure 和本地环境(通过 MCP 协议),以及 Datadog、Dynatrace、PagerDuty、ServiceNow 等第三方集成。Agent 通过 IAM 角色(服务主体 aidevops.amazonaws.com)调用 API,所有操作 CloudTrail 可审计。

适用场景判断

适合:凌晨告警预调查、多服务关联故障分析、新人 On-Call 辅助、运维知识标准化沉淀。

暂不适合:P0 级故障分钟级响应(调查耗时 5-15 分钟)。

运维从"规则驱动"走向"AI 驱动"是可见的趋势,DevOps Agent 解决的是"把排查经验标准化"这一步。

参考

posted @ 2026-04-29 07:36  亚马逊云开发者  阅读(15)  评论(0)    收藏  举报