AWS DevOps Agent 接入实战:从可观测性集成到 MCP 扩展

前言

前文分析了传统 on-call 的五个结构性问题。本文进入实操环节——如何把亚马逊云科技的 DevOps Agent 接入你的环境,实现 AI 自动排障。

架构概览

DevOps Agent 的数据流分三层:

┌─────────────────────────────────────────────────┐
│                 告警触发层                         │
│  CloudWatch Alarm / PagerDuty / ServiceNow       │
└────────────────────┬────────────────────────────┘
                     ▼
┌─────────────────────────────────────────────────┐
│              DevOps Agent 调查引擎                 │
│  告警关联 → 三维关联分析 → 根因定位 → 修复建议        │
└────┬──────────┬──────────┬──────────┬───────────┘
     ▼          ▼          ▼          ▼
┌─────────┐ ┌────────┐ ┌────────┐ ┌──────────┐
│可观测工具 │ │代码仓库 │ │CI/CD   │ │MCP Server│
│CW/DD/SPK│ │GH/GL   │ │流水线   │ │自定义扩展 │
└─────────┘ └────────┘ └────────┘ └──────────┘

第一步:开通 DevOps Agent

在亚马逊云科技控制台 CloudOps 分类下找到 DevOps Agent。按秒计费 $0.0083/agent-second,无预付要求。开通后获得 Agent workspace。

第二步:连接可观测性数据源

CloudWatch:同账号自动接入,零配置。

第三方工具需要配 API 凭证。以 Datadog 和 Splunk 为例:

# Datadog 集成
type: datadog
api_key: ${DATADOG_API_KEY}
app_key: ${DATADOG_APP_KEY}
site: datadoghq.com    # 或 datadoghq.eu

# Splunk 集成
type: splunk
host: your-splunk-instance.splunkcloud.com
token: ${SPLUNK_HEC_TOKEN}
index: main

权限原则:只读即可。DevOps Agent 只需要 query metrics/logs/traces,不需要写权限。

完整支持列表:CloudWatch、Datadog、Dynatrace、Grafana、New Relic、Prometheus、Splunk。

第三步:连接代码仓库和 CI/CD

平台 接入方式 Agent 获取的数据
GitHub GitHub App 授权 commit、PR、部署事件、代码 diff
GitLab Access Token commit、MR、pipeline 事件
Azure DevOps Service Connection commit、PR、release 事件

这一步是让 Agent 能把"什么时候部署了什么代码"和"什么时候开始告警"关联起来。缺了这个环节,Agent 只能看到"出了问题",看不到"为什么出问题"。

第四步:配置告警路由

模式 A — ServiceNow 工单驱动(推荐已有 ITSM 流程的团队):

CloudWatch Alarm → SNS → ServiceNow (创建 Incident)
                                    ↓
                          DevOps Agent 自动调查
                                    ↓
                          结果回写 Incident Work Notes

不改变现有告警路由,只在 ServiceNow 侧加了 AI 调查层。

模式 B — 直接触发

CloudWatch Alarm → DevOps Agent 直接启动调查
PagerDuty Alert → DevOps Agent 直接启动调查

适合小团队或没有 ServiceNow 的场景。

第五步:配置协作通道

  • Slack:调查结果推送到指定 channel,支持双向对话(追问、让 Agent 深入查某个方向)
  • ServiceNow:结果自动回写 Work Notes
  • PagerDuty:更新 Incident 状态和注释

Slack 集成体验很不错——不只是通知,是真正的对话式排障。

第六步:MCP Server 扩展

对于官方集成列表之外的工具——自研 CMDB、内部变更管理系统、自建 wiki 等——可以通过 MCP Server 接入。

from mcp import Server

server = Server("internal-cmdb")

@server.tool("get_service_dependencies")
async def get_deps(service_name: str):
    """查询服务依赖关系图谱"""
    deps = await cmdb_client.get_dependency_tree(service_name)
    return {
        "service": service_name,
        "upstream": deps.upstream,
        "downstream": deps.downstream,
        "infra": deps.infrastructure
    }

@server.tool("get_recent_changes")
async def get_changes(service_name: str, hours: int = 24):
    """查询最近变更记录"""
    changes = await change_mgmt.query_by_service(
        service_name, 
        since_hours=hours
    )
    return {"changes": [c.to_dict() for c in changes]}

@server.tool("get_runbook")
async def get_runbook(service_name: str, issue_type: str):
    """获取服务对应的排障手册"""
    doc = await wiki.search_runbook(service_name, issue_type)
    return {"runbook": doc.content if doc else "No runbook found"}

MCP Server 部署在 VPC 内,通过 PrivateLink 与 DevOps Agent 通信。这样 Agent 排障时就能查你的内部依赖图、变更记录、甚至 runbook。

第七步:冷启动策略

刚接入时 Agent 没有你环境的历史调查数据。建议:

  1. 前两周主动复盘:挑最近 10 个有代表性的告警,手动让 Agent 做调查。快速积累不同类型的排障经验
  2. 观察学习循环:积累 30-50 次调查后,Agent 会开始复用之前学到的排障技能
  3. 校准期:前 10 次调查仔细验证 Agent 的根因判断是否准确,发现偏差及时反馈

安全最佳实践

维度 建议
凭证权限 所有集成凭证只给只读权限
网络 MCP Server 在 VPC 内,PrivateLink 通信
审计 所有调查记录保留完整 audit trail
修复执行 默认需人工批准,自动修复需显式开启
数据范围 按需授权 repo 和指标,不给全量访问

真实效果:United Airlines

  • 规模:500+ AWS 账号,38,000 Dynatrace OneAgent,20,000 Lambda 函数
  • 之前:多工具跨域排查有盲区,凌晨 3 点拉电话会议
  • 之后:Dynatrace 检测 → DevOps Agent 调查 → 修复步骤直接推送 → 单一面板闭环
  • United 首席工程师原话:"不用再凌晨 3 点拉电话会议切换工具了,答案已经准备好了"

成本参考

团队规模 月调查次数 平均时长 月成本
小(5 服务) 50 3 分钟 ~$75
中(20 服务) 200 5 分钟 ~$500
大(100+ 服务) 1000 5 分钟 ~$2,500

AWS Support 集成:调查中一键升级,上下文自动带过去。Enterprise Support 客户每月有 DevOps Agent credits。


参考资料:

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