MTTR缩短80%!DevOps Agent助力Habby游戏实现智能运维

Habby(海彼游戏)是一家全球知名的休闲游戏发行商,代表作包括《弓箭传说》《弹壳特攻队》《GO!卡皮巴拉》等。公司在全球拥有数亿玩家,其运行在亚马逊云科技上的后端基础设施按游戏多账户管理。

Habby作为Amazon DevOps Agent的早期采用者,通过深度集成Grafana、GitHub、Lark等工具,构建了一套适合游戏行业的智能运维方案,从而更好地应对流量波动、延迟敏感、版本更新频繁的运维要求。

本文将介绍Habby游戏使用DevOps Agent的最佳实践,为行业客户提供有价值的落地经验。

游戏行业的运维挑战

流量波动剧烈

游戏业务的流量特征与传统业务有着显著差异。每次大版本更新或新功能上线,都会带来短时间内的流量激增。限时活动、节日庆典等运营活动同样会引发用户的集中登录和高频互动。

如果是使用全球同服方式部署的游戏,不同地区玩家的活跃时段交替出现,会形成24小时的波浪式负载。这种剧烈波动对基础设施的弹性扩展能力、监控告警的敏感度、故障响应速度都提出了极高要求,使得运维团队难以应对。

多账户、多服务的复杂架构

Habby运营的游戏非常多,亚马逊云科技账户以游戏、环境、中台服务为单位划分。游戏后端涉及Amazon EKS、Lambda、DynamoDB、ElastiCache、API Gateway等数十种服务。

在这样的架构下,一个告警的根因可能隐藏在跨账户跨服务的调用链中,人工排查效率很低。

运维团队规模有限

游戏公司的核心竞争力在于游戏内容和玩法的创新,更倾向于将主要的人力资源投入研发和运营而非运维团队建设。

Habby的SRE团队仅有数人,却需要支撑全球数亿玩家、数十款游戏的运维工作。处理多款游戏的告警会消耗大量精力,形成“告警疲劳”。在人少事多的现实下,如何将重复性调查工作自动化,成为提升运维效率的关键。

版本迭代快、变更频繁

核心游戏每周都有热更新,每月有大版本发布。频繁的代码变更和配置调整都可能引入问题,如何快速判断“是不是最近的变更导致了故障”至关重要。

Amazon DevOps Agent简介

Amazon DevOps Agent是一款AI驱动的前沿Agent,能够自动响应和主动预防事件,持续提升系统可靠性和性能。它以经验丰富的DevOps工程师技能经验为基础,在AI的加持下,可协助运维团队高效完成运维工作。

三大核心能力

自主事件响应

自主事件响应是DevOps Agent最核心的能力。

当配置好告警触发时,Agent可自动开始调查,无需人工干预。它会进行事件分诊(Incident Triage),评估严重程度和影响范围(受影响的服务、用户、区域)。

基于亚马逊云科技资源拓扑图,Agent能理解故障的“爆炸半径”,追踪故障的传播路径。在调查过程中Agent会自动收集相关日志、指标、事件和最近的代码变更,结合上下文生成详细的根因分析(RCA)和缓解计划。

运维人员还可以通过调查引导指引Agent的分析方向。下图展示了Habby使用DevOps Agent调查ALB 5XX错误的问题。

DevOps Agent对5XX错误的根因分析

按需DevOps任务

按需DevOps任务可通过内置于Agent Space Web应用的对话式AI助手完成。运维人员可以通过自然语言进行资源查询、系统健康分析、调查洞察、制品生成(报告、文档、周报)等任务,且不同的会话会独立分开,能保留对话历史,支持多轮追问。

它还具备上下文感知能力,可以根据当前页面(如拓扑/事件)自动调整响应范围。下图展示了客户让Agent提供安全配置的优化建议。

DevOps Agent提供的安全配置优化建议

主动事件预防

主动事件预防(改进项)是通过分析历史事件,自动生成覆盖不同领域的预防性建议,包括:可观测性增强(添加缺失的监控指标、优化告警阈值)、基础设施优化(识别自动扩展配置不合理、单点故障风险)、部署管道增强(增加测试覆盖、添加验证步骤)和架构弹性(识别服务依赖的脆弱点)等。

建议还会附带Agent就绪规范(Agent-ready Spec),如Amazon CloudWatch告警配置JSON,并根据团队反馈持续优化。下图展示了每周运行的预防任务提供的改进项建议。

每周运行的改进项建议

关键功能集成

DevOps Agent的价值不仅在于三大核心能力,还在于其能够集成丰富的第三方服务:

Telemetry(遥测数据源)

除Amazon CloudWatch原生集成外,支持接入Grafana、Dynatrace、Datadog等遥测数据源。Habby游戏以Grafana作为主要监控工具,在和DevOps Agent集成后,调查时就能看到基础设施指标和其他业务指标,丰富调查的上下文信息。

Pipeline(CI/CD集成)

DevOps Agent还可以集成GitHub/GitLab等工具,使得Agent调查时自动关联最近的commit和部署记录,从而可以判断“是否是最近的代码变更导致了问题”,并在事件报告中提供完整的变更时间线。

Communication(通讯渠道)

DevOps Agent默认支持Slack、Microsoft Teams、ServiceNow等IM工具的集成,也可以通过Webhook/Chat API,以更加灵活的方式集成诸如Lark这样的通讯工具。

MCP(Model Context Protocol)

作为一个AI Agent,通过接入MCP工具,DevOps Agent就可以安全地访问企业内部或者三方系统,使得自身能力得以延伸。

Skills(自定义技能)

DevOps Agent本身就是亚马逊云科技运维经验沉淀的“知识库”和“最佳实践仓库”。它还支持上传或生成自定义Skill,使得团队将自己的故障排查经验标准化,让Agent按照团队经验进行工作。

Habby的DevOps Agent解决方案

Habby结合自身技术栈,构建了一套深度集成DevOps Agent的智能运维方案,核心设计理念是:自动化优先、多渠道融合、上下文增强。

整体架构

整套解决方案由两大部分组成:

  • 告警触发DevOps Agent自动调查的链路,通过Lambda实现的告警处理器根据收到的Grafana告警,一方面以Lark群告警卡片的形式第一时间通知团队,另一方面触发DevOps Agent自动调查并完成根因分析。

  • 第二部分是Lark Bot对话助手,通过调用Agent Chat API实现了直接在Lark中使用Agent的能力。下图展示了方案的整体架构。

方案架构

下文将分别介绍这两部分的具体实现方法。

告警自动处理链路

整个告警处理流程由告警发送者(Grafana)、SNS告警主题、Lambda告警处理器、Lark告警卡片和DevOps Agent共同完成。其中Lambda告警处理器需要用户自己编码实现,它接收到SNS事件后,解析来自消息中的告警。

告警路由

Grafana Alert的通知目标设置为Amazon SNS,Lambda自动识别Grafana告警格式(JSON或纯文本),封装为Agent Webhook请求要求的Payload,并触发Agent。

遥测数据源

Habby使用Grafana作为统一的监控系统,数据源添加了Amazon CloudWatch和三方系统的Prometheus,将亚马逊云科技基础设施的指标和其他指标统一管理。Grafana作为Telemetry Source接入Agent Space后,Agent调查时就可以直接读取Grafana Dashboard和相关指标。

解析完成后,Amazon Lambda执行两个动作:

1.推送Lark告警卡片:通过调用Lark API发送交互式告警卡片,包含时间戳、服务名、区域、状态、描述以及“查看告警详情”的跳转按钮。

Lark告警卡片

2.触发DevOps Agent:通过构造Agent的Webhook请求体(包含eventType、incidentId、priority、title、description等字段),并按照要求使用HMAC-SHA256生成请求签名,调用Webhook URL触发Agent自动调查告警事件。

下面的时序图展示了告警自动处理链路的整个工作流程,包括告警事件如何自动触发DevOps Agent自动调查,Lambda基于告警事件发送Lark告警卡片等。

告警链路工作流

部分核心代码如下:

def lambda_handler(event, context):    """Lambda 入口函数,由 SNS 触发。    处理流程:      1. 从 SNS 事件中提取消息内容      2. Grafana Alerting 解析      3. 推送飞书群通知(非阻塞,失败不影响后续流程)      4. 构造 Webhook 请求并调用 DevOps Agent 触发自动化调查    """    # ......    # 按要求构造 DevOps Agent Webhook 请求体    # 生成 HMAC-SHA256 签名,用于 Webhook 端点验证请求合法性    # 签名格式:base64(HMAC-SHA256(secret, "timestamp:payload"))    # ......
    # 步骤一:推送飞书群通知(非阻塞)    try:        card = _build_feishu_card(alert)        _send_feishu_card(card)    except Exception as e:        logger.error('飞书通知发送失败: %s', e)
    # 步骤二:调用 DevOps Agent Webhook 触发自动调查     try:        response = http.request('POST', webhook_url, body=payload_str, headers=headers)        print(f"Webhook response: {response.status} - {response.data.decode('utf-8')}")        return {            'statusCode': 200,            'body': json.dumps({                'message': 'DevOps Agent investigation triggered',                'alarmName': alert['service'],                'webhookStatus': response.status,            })        }    except Exception as e:        print(f"Error calling webhook: {str(e)}")        return {'statusCode': 500, 'body': json.dumps({'error': str(e)})}

左右滑动查看完整示意

凭证管理方面,Webhook URL/Secret和Lark App ID/Secret统一存储在Amazon Secrets Manager中,Lambda进行缓存避免多次重复请求。

这部分实现中有几点需要注意:

  • 告警去重:DevOps Agent默认有20分钟的回溯窗口,可以在窗口期中自动关联同类调查,但同时运维团队也需要对告警设计分组/聚合/去重的能力,避免故障一直没有处理,频繁的发送告警冲击到Agent端。Amazon CloudWatch默认是通过告警状态变化触发告警,Grafana默认的发送策略也有4小时的冷却期,一般都不会对DevOps Agent产生影响。

  • 如果使用Amazon CloudWatch Alarm作为告警源,是可以直接挂载Lambda的,但引入SNS依然是更优雅的选择,可以解耦告警的生产者和消费者,实现更灵活的告警方案。

  • 托管的Amazon Managed Grafana(AMG)需要通过SNS触发后续的告警流程,自建的Grafana支持Webhook调用,可以直接与DevOps Agent关联。

Lark Bot对话式助手

Lark Bot是方案中的一大亮点,可以让团队无需登录亚马逊云科技控制台,就能使用DevOps Agent的能力。

具体流程如下图所示:Lark机器人作为和用户交互的客户端,将消息发送到Lark云端,用户自己实现的Lark Bot服务端程序和Lark云端,以长连接的方式接收消息,并调用DevOps Agent的Chat API,从而实现和Agent的交互。

Lark机器人工作流

流程中两个核心组件需要您自己创建:

  • Lark机器人应用:作为对话入口,需要在Lark开放平台(开发者后台)创建机器人类型的自建应用,事件与回调的订阅方式选择长连接,权限部分开通im:message相关的消息收发权限。

申请Lark机器人应用

  • Lark Bot服务端程序:用户在Lark聊天界面和机器人对话后,消息以WebSocket长连接方式发送到这里,程序处理消息,并调用DevOps Agent的Chat API实现和Agent的交互。

部分核心代码如下:

# AWS DevOps Agent 客户端devops = boto3.client("devops-agent", region_name=AWS_REGION)
def ask_devops_agent(session_key: str, query: str) -> str:    """向 DevOps Agent 发送消息并收集流式响应。
    Agent 以 EventStream 形式返回响应,每个事件包含一个文本片段(delta)。    按 contentBlockIndex 分组收集,取最后一个 block 作为最终回复。
    参数:        session_key: 飞书会话标识        query: 用户发送的问题文本
    返回:        Agent 的完整回复文本,或错误提示信息    """    execution_id = get_or_create_execution(session_key)    try:        resp = devops.send_message(            agentSpaceId=AGENT_SPACE_ID,            executionId=execution_id,            content=query,        )        blocks: dict[int, list[str]] = {}        for event in resp.get("events", []):            if"contentBlockDelta" in event:                block = event["contentBlockDelta"]                idx = block.get("contentBlockIndex", 0)                delta = block.get("delta", {})                text_delta = delta.get("textDelta", {})                if"text" in text_delta:                    blocks.setdefault(idx, []).append(text_delta["text"])            elif "responseFailed" in event:                err = event["responseFailed"]                logger.error("Agent response failed: %s", err.get("errorMessage"))                return f"DevOps Agent 返回错误:{err.get('errorMessage', 'unknown')}"
        ifnot blocks:            return"(DevOps Agent 未返回内容)"
        last_idx = max(blocks.keys())        return"".join(blocks[last_idx])
    except Exception:        logger.exception("DevOps Agent call failed")        with _lock:            _sessions.pop(session_key, None)        return"调用 DevOps Agent 失败,已重置会话,请重试。"

左右滑动查看完整示意

技术实现要点

WebSocket长连接:使用Lark lark-oapi SDK建立WebSocket连接,订阅im.message.receive_v1事件,无需暴露公网端口。

会话管理:每个Lark会话(chat_id)对应一个DevOps Agent的executionId,多轮对话共享同一execution保持上下文连贯。

异步处理:Agent调用耗时较长,Bot使用后台线程处理,不阻塞WebSocket事件循环。收到消息后立即添加emoji表情给用户即时反馈。

Markdown→Lark卡片转换:Agent返回的Markdown文本自动转换为Lark交互式卡片,支持粗体、链接、代码块等格式。

下面的截图是通过Lark机器人询问账号中Amazon S3的使用情况:

通过机器人对话使用DevOps Agent

下面的时序图详细说明了用户通过@机器人,完成对话交互的全过程:

对话交互流程

在部署方面,本例提供了两种方案:基于Amazon EKS的容器方案和Amazon EC2方案。

对于已经有Amazon EKS集群的用户来说,前者更加适合,只需要在集群中创建一个Pod即可,无任何额外成本,缺点是如果Pod重启会丢失容器内存储的上下文信息。

但对于对话方式的交互来说,对连续性要求不高,且Bot可以获取到已经发送在聊天界面的历史信息,因此影响不大。Amazon EC2方案的配置更加简单一点,且Bot服务端对资源的要求非常低,将其部署在已有的Amazon EC2实例也可以做到无成本。

集成GitHub

变更是导致故障产生的最主要原因,在IT/互联网运维及软件开发领域属于共识性的铁律。据研究和生产经验显示,生产环境中约**70%**左右的故障是由变更引起的。对于发布频繁、迭代周期短的游戏行业来说,快速判断“是否是最近的代码变更导致了问题”至关重要。

在Agent Space的Settings→Pipeline Sources中添加GitHub仓库后,Agent在调查事件时会自动查询“告警发生前1-2小时内的代码变更”,包括 commit、pull request和merge记录。

如果发现可疑的commit,会在RCA报告中高亮显示,并在事件报告中标注事件发生前后的代码变更和部署操作,提供完整的时间线视图。

DevOps Agent还支持跨仓库关联,例如Habby的完整游戏应用是由游戏业务服务和中台服务共同实现的,用户可以把游戏业务代码仓库和中台代码仓库都关联到Space空间,完善调查的上下文。

多账户统一管理

DevOps Agent支持将多个Accoun挂载在同一个Agent Space下,这样做的好处有以下两点:

单一入口,统一管理

您可以统一监控和调查所有账号的问题,无需逐个登录。发生故障时无需切换账号,DevOps Agent会根据告警中的Account信息在对应账号进行调查。

跨账号关联调查

如果应用是跨账号部署的,或者不同账号之间的服务有交互,那么关联调查就非常有用。DevOps Agent能理解这种跨账户依赖,在调查时一并分析。

多账号绑定是通过Amazon IAM Role的跨账户信任关系(AssumeRole)实现的。Agent在调查时可自动切换账户查询资源和指标。

单一Agent Space即可跨账户查看拓扑、响应事件、生成建议。权限控制方面,遵循最小权限原则,通过Amazon IAM策略精细化控制、Agent在每个账户中的可访问资源范围。默认情况下,Agent只需要只读权限就可以完成工作。

Habby采用DevOps Agent的收益

MTTR大幅缩短

传统人工模式下,运维工程师收到告警后需要登录亚马逊云科技Console、Grafana等多个控制台,逐一检查日志、指标、事件,平均排查时间1.5-2小时。凌晨告警如果无人值班,可能延迟到早上才处理,MTTR长达4-6小时

采用DevOps Agent后,告警触发后Agent在几分钟内就能完成数据的收集和调查工作,生成根因分析报告并推送到Lark群,运维人员在移动端即可查看。

人工介入时间缩短为15-30分钟(主要用于验证分析结果和执行缓解操作),平均MTTR从2小时降低到20分钟,缩短了80%。

即使在凌晨无人值守的情况下,第二天运维人员可直接基于RCA报告修复故障,省去了故障排查的时间。

告警疲劳显著降低

DevOps Agent会自动分类和关联告警,将同一根因的多次告警聚合为一个Incident(如Amazon EC2的CPU告警、内存告警、健康检查失败可能识别为同一事件),对低优先级告警自动降级。运维工程师需要处理的告警数量大大降低。

运维效率提升

理解并优化架构:运维/开发人员可以通过Lark Bot直接了解架构问题和服务依赖拓扑关系,查看历史RCA报告学习排查思路,从而熟悉部署架构并做好优化工作。

报告生成:DevOps Agent提供了构件功能,可以对运维相关信息生成分析报告。比如您可以通过对话方式输入“生成本周事件汇总报告”。生成的构件通常会包含表格/图表等信息,极大缩短了自己编写报告的工作量。下图展示了生成的运维健康摘要。

DevOps Agent生成的运维健康报告

减少控制台切换:所有信息聚合在Agent Space中,可以通过Web页面或者接入的Lark Bot机器人统一交互,无需在多个平台或账号之间频繁切换。

系统可靠性持续提升

DevOps Agent每周会生成防护建议,帮助团队消除系统中的隐患。运维团队会定期对防护报告进行Review,按影响范围和实施难度评估优先级,并将高优先级建议转化为工作计划。防护功能可以让运维工作从“救火式”转变为“防火式”,提高系统的可靠性。

运维知识沉淀

DevOps Agent支持上传或者新建Skill,可以将资深工程师的排查经验编写为自定义Skills。而根因分析报告也是高质量的事后复盘文档,包含时间线、根因、相关数据和缓解措施等内容,这些经验Skill和复盘报告可以沉淀下来,成为团队的运维知识库。

落地最佳实践

分阶段落地

任何项目或系统的构建都不是一蹴而就的,需要循序渐进,逐渐完善,DevOps Agent的落地方案也是如此,Habby的经验如下。

第一阶段

先进行快速验证,从单个游戏项目的生产账户创建第一个Agent Space,优先接入Amazon CloudWatch(原生告警),最小化配置即可看到自动事件响应的效果,使用Chat对话进行日常巡检和架构查询。

第二阶段

持续集成,接入Grafana将游戏指标纳入Agent的可观测视野,接入Github打通代码变更→部署→事件的关联链路,添加Secondary Account,实现多游戏项目的跨账户聚合监控。

第三阶段

知识沉淀与持续优化,编写自定义Skills,将团队积累的调查经验标准化;定期Review防护建议,按优先级逐项落实。

Agent Space设计建议

按游戏项目划分

每个核心游戏创建独立Agent Space,数据隔离、调查不互相干扰。

环境隔离

生产和非生产使用不同Agent Space。

权限精细化

按角色分配权限(运维完整权限、开发只读),利用权限限制资源范围。

告警与事件响应调优

告警质量先行

建议先梳理现有告警,清理过期/无效告警,确保告警阈值合理。为关键服务配置Composite Alarm减少噪声告警(例如“CPU>80%且持续5分钟”比“CPU>80%”更合理)。

在告警描述字段中提供更多上下文,例如:

payment-service in us-east-1: CPU usage > 80%。

善用调查引导

当Agent自动调查的方向不够精准时,运维人员可以通过Chat提供引导,例如“聚焦UTC 14:00-15:00之间支付服务的日志并更新你的RCA”。

引导过的调查会帮助Agent在类似场景中做出更好的判断,将运维人员的领域知识教给Agent,实现持续学习。

防护建议的落地机制

建议每两周召开一次Review会议,生成建议摘要报告,按影响范围和实施难度评估优先级,将高优先级的建议转化为工作计划,从而持续改进系统可靠性。

总结与展望

通过深度集成Amazon DevOps Agent,Habby成功将运维模式从“人工救火”升级为“AI驱动的智能运维”,实现了MTTR缩短80%、告警疲劳降低75%、系统可用性显著提升等核心收益。

在实践过程中,Habby团队也与亚马逊云科技产品团队保持了紧密的沟通与反馈。基于一线使用经验,双方对DevOps Agent未来的能力演进方向有着共同的期待:

从“建议”到“行动”

当前Agent已能高效完成问题调查与根因定位,未来期待进一步向自动化修复演进——对于置信度高的常规运维操作,Agent能够在人工确认后自动执行,实现“调查→建议→执行”的完整闭环。

更灵活的调查策略

不同业务场景对告警回溯的时间窗口需求各异,未来若能提供可配置的调查回溯范围,将帮助团队更精准地匹配自身的运维节奏。

更流畅的交互体验

在深度排障场景中,工程师与Agent的对话往往持续较长时间,期待会话管理策略能更好地适配这类长时交互场景,减少不必要的中断。

更简洁的集成体验

随着DevOps Agent对接的数据源和告警通道日益丰富,期待未来能提供更开箱即用的集成方式,降低初始配置的门槛,让团队能更快速地获得价值。

亚马逊云科技相信,随着AI技术的持续演进和客户反馈的不断融入,DevOps Agent将帮助更多团队实现真正的智能运维。

新用户注册海外区域账户,可获得最高200美元服务抵扣金,覆盖Amazon Bedrock生成式AI相关服务。“免费计划”账户类型,确保零花费,安心试用。

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

听说,点完下面4个按钮

就不会碰到bug了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值