☰
AI Agent智能运维平台:从告警到30秒自愈的架构设计与实战
2026/10/26 4:23:28 网站建设 项目流程

AI Agent这个概念,这两年已经被聊得快起茧了。可我一直觉得,如果Agent只能陪你聊天、帮你写周报、处理文档,那它顶多算个高级玩具。真正要让Agent体现出价值,是让它去干活——尤其接手那些以前必须值班工程师半夜爬起来处理的运维故障。最近我们团队一直在打磨的就是这样一套平台:AI Agent智能运维平台,主打即插即用和30秒自愈。今天我不打算念PPT,就聊聊这套平台为什么这么设计、怎么落地、踩过哪些坑。不管你是SRE、运维平台组,还是已经被告警轰炸到想跑路的值班负责人,相信都能从里面找到点能直接用的东西。

1. 项目定位:AI Agent在运维里到底该干什么

1.1 传统运维自动化的三个死穴

我先说点难听的大实话。过去几年大家都在讲自动化运维、智能运维,但真正用过的人都知道痛点在哪。

第一个死穴是阈值告警太死。监控系统里配了一堆固定阈值,有些规则是五年前定的,跟现在的业务形态完全不匹配。等到告警真的爆发,值班同学打开告警平台,看到几百条红色警报,根本不知道先处理哪个,因为缺少业务视角的优先级判断。

第二个死穴是脚本只能处理已知路径。你写了一个脚本专门应对磁盘使用率超过90%这种情况,但它遇到磁盘没满、可是文件系统变成只读这种没见过的组合,就彻底歇菜。真正的故障从来不是照着剧本演的,系统性故障往往跨模块、跨层次,前面写十条规则,后面就有第二十种意外等着你。

第三个死穴是人在回路太慢。以前值班遇到故障,流程是告警响了,值班同学定位,打电话叫开发,拉会议,翻文档,手工敲命令恢复。快一点二十分钟,慢一点几个小时。一晚上折腾几回,整个人就废了。更麻烦的是,很多操作只有个别老同事会,一旦他不在,恢复时间还得翻倍。

这三个问题共同指向一个核心矛盾:你只有感知和执行,中间缺了一个能根据实际故障情况做推理、拆解和组合的决策层。这个决策层,就是我理解里的AI Agent。

1.2 为什么是Agent,而不是更强的自动化框架

有人会问:Agent跟RPA或者编排平台有本质区别吗?

我的答案是,区别在泛化能力。老的编排平台,核心是一个固定流程,你把步骤定义死,输入进来就按图走。这种设计处理主路径很可靠,但处理不了图外的情况。

Agent不一样。它手里拿的不是一张固定的流程图,而是一套工具集和对应的使用规则。它接收到告警后,会先做一次处理:这是什么类型的故障,影响面在哪,以往有没有类似记录,需要调哪几个工具才能恢复。这个推理过程是动态的,工具是可以被它重新组合的。

举个例子。同样是数据库连接数暴涨,编排平台的路径可能是固定的:杀连接、改连接池、重启应用。但如果真实原因是慢查询瞬间占满了连接池,你需要的是先抓慢SQL、再杀掉来源查询进程,最后调整连接池参数。Agent可以根据监控指标自己现场攒一个三步方案,而不用你提前把所有可能性枚举出来。

当然,这里的自己攒方案不是没有边界。Agent所有的判断必须基于可观测数据,所有的执行必须走已注册的工具,并且每步都要有审计日志。你可以理解成一个有经验、有判断力,但被严格规定了不许乱动的执行者。

1.3 这套平台的目标定位

我们做这套平台的目标,说起来一点也不玄:把告警发现、根因判断、恢复操作、验证确认这条闭环的时间,从人肉值班的平均十几分钟、几十分钟,压缩到30秒以内。

它的目标用户非常具体:监控值班团队、SRE工程师、运维平台组,以及那些已经建了监控系统、也有自动化底子,但故障恢复依然靠人工的团队。也就是从0到1已经做完了,从1到100做不出来的阶段。

它不解决的事情,我也提前说清楚。它不负责预测未来十分钟会不会出故障,那是预测模型干的活;它也不取代人对核心架构的决策,所有高影响操作默认都要人工确认。它真正负责的,是把那些已经发生过多次、恢复步骤清晰的熟手故障做到无人值守。

2. 架构设计:即插即用和30秒自愈是怎么来的

标题里有两个词特别容易让人误解,一个是即插即用,一个是30秒自愈。我逐个拆开讲。

2.1 整体架构分成四层

第一层是接入层。负责对接各种监控系统、告警源和业务数据源。比如Prometheus、各类云监控、机房动环监控、工单系统。这一层只干一件事:把不同来源的事件统一成平台内部的标准事件结构。

第二层是Agent核心层。这一层包含事件解析、根因推理、方案生成、工具选择,以及记忆模块。核心是一个用Rust写的运行时,它负责调用大模型做推理,同时调度所有工具的执行。

第三层是执行层。包含Kubernetes集群操作、云产品API、服务器远程命令、脚本执行器,以及各种业务系统的开放API。执行层的每个动作都暴露成工具,工具本身是纯逻辑,由Agent核心层来编排。

第四层是安全治理层。包括身份认证、权限控制、审批流、熔断、审计日志。这一层无处不在,但我单独把它拎出来,是因为如果没有它,前几层做得再好也不敢上生产。

这样分层的理由很简单:每一层都可以独立替换。接入层想换一个监控源,不改Agent核心;执行层想加一个新工具,也不需要动决策逻辑。这也是后面即插即用的底层保障。

2.2 即插即用是怎么实现的

即插即用不是一个营销词,它有非常具体的工程实现:连接器抽象加插件注册。

我把每一个外部系统都定义成一个插件。一个插件包含三样东西:

  • 连接配置:地址、认证方式、协议。
  • 事件或工具的Schema:它提供什么事件,或者能执行什么动作,动作的参数是什么类型。
  • 处理策略:这个插件产生的数据有多可信,它的动作需不需要审批。

接入一个新的监控源,不需要改一行主程序代码。你要做的就是在配置目录里加一个文件,告诉平台这个监控源的Webhook地址是什么、事件字段怎么映射。同样,接入一个新的执行目标,也是在配置目录里声明一个tool条目,写上调用方式、参数校验规则、超时时间和权限级别。

我贴一段真实项目里添加工具的配置片段给你感受一下:

tools: - name: k8s_rollout_restart display: 重启工作负载 type: kubernetes target: cluster-main action: rollout_restart params: namespace: { type: string, required: true } workload: { type: string, required: true } permission: auto_allowed timeout: 30s audit: true

这段配置的意图很清楚:平台注册了一个叫重启工作负载的工具,目标集群是cluster-main,参数必须有命名空间和工作负载名,权限是自动放行,超时30秒,全程审计。Agent在决策时只需要知道工具列表里有这么个东西,剩下的事情就是传入合法的参数。

这样设计的好处是,不同团队的接入成本拉到了极低。一个能看懂YAML的运维,十分钟内就能接一个新工具。我们团队接入新系统最快的纪录是八分钟,都是配置驱动的功劳。

2.3 30秒自愈的时间线是怎么压出来的

30秒不是一个拍脑袋的数字,它是我们把完整闭环拆开以后,按里程碑卡出来的。

我先给你一张真实的自愈时间线:

时间节点动作说明
0-1秒告警接入系统收到Webhook事件,完成格式归一化
1-3秒事件解析Agent判断故障类型,提取关键字段,关联相关实体
3-8秒根因推理调用模型,结合知识库检索结果生成修复方案
8-15秒工具编排按方案依次调用工具,执行具体恢复动作
15-25秒验证检查健康探针、恢复指标以及业务日志
25-30秒通知与归档生成事件报告,发送通知,关闭工单

真正需要解释的是,为什么方案的生成和工具的编排能做到这么短时间。

首先是事件解析这一环。我们不会把原始告警原文直接给模型,因为原始文本太脏了。接入层已经把所有告警做成了统一结构,包含时间、对象、指标、变化量、持续时长等。模型拿到的是格式化数据,解析速度自然快。

其次是知识库的辅助。Agent做根因推理之前,会先根据故障特征做一次相似度检索,把历史工单、应急预案、变更记录里相关的片段带出来,作为参考上下文。这样模型就不用从零开始想解决方案,而是基于经验做决策,速度和准确率都会上一个大台阶。

最后是工具的幂等性。执行层里的所有自愈工具都要求做到幂等:同一个动作执行两次和执行一次效果一致。这样Agent做轻量重试时不会有副作用,验证失败后可以再跑一次方案,也不至于搞炸系统。

但我要强调,不是所有故障都应该30秒自愈。我们有一套严格的自愈白名单机制。只有满足三个条件的故障才能进入自动恢复流程:一是有明确可执行的恢复动作,二是动作本身是低风险的,三是动作执行后可以验证结果。做不到这三点的,一律降级成建议方案。

3. 核心技术与方案选型

3.1 为什么选了Rust来写Agent运行时

聊到AI Agent,很多人第一反应是Python,因为大模型生态里Python最方便。但我们最后把Agent运行时用Rust重写了,不是标新立异,是被实际场景逼出来的。

第一个原因是并发能力。作为一个运维平台,Agent不可能只处理一个故障。高峰期,一个中等规模的监控网络每分钟会有几十上百个事件进来。Rust配tokio异步运行时,开几千个并发任务毫无压力,内存占用只有几个G级别。换成Python协程也能跑,但扛大并发时性能和资源占用差距非常明显。

第二个原因是类型安全。Agent要调用的工具五花八门,参数校验一旦出问题,后果就是误操作。Rust严格的类型系统和serde反序列化,能在参数进入执行层之前就把非法值拦下来。比如工具要求namespace是字符串,模型返回了一个数组,类型校验直接就把它判定为无效,不会继续往下执行。

第三个原因是部署简单。Rust编译出来是一个单一二进制文件,依赖全打包在里面,放到服务器上就能跑,不需要装一堆运行时依赖。对运维团队来说,这种交付是最省心的。

当然Rust也有成本:开发效率比Python低,写异步代码容易踩生命周期和所有权的坑。我们团队花了大约三周才把雏形跑通,比起Python版本的几天时间,确实慢不少。但作为长期运行在生产环境的核心组件,这个前期投入是值得的。

另外,Agent用啥语言写根本不重要,重要的是它怎么跟模型对接。我们用的方式是决策逻辑和推理分离:推理全部交给外部的大模型服务,Rust运行时只负责任务调度、工具调用和状态管理。

3.2 Agent的决策流程和function calling

我先说说决策流程。整个Agent的核心是一个循环,类似大家常说的ReAct思想:思考、行动、观察。

模型接收当前故障事件和状态后,先做第一步思考:这个故障可能是什么引起的?它给出一个推测,同时给出下一步要调用的工具。平台执行工具后,把执行结果作为观察值喂回给模型,模型再更新判断,直到问题被验证为解决,或者累积尝试次数到达上限。

这里面的关键是,我们不允许模型直接生成一堆shell命令去执行,而是让它输出结构化的function calling结果。也就是告诉平台:我要调用工具A,参数是这样的。平台拿着这个结果去工具注册表里校对、校验、执行。

为什么不用自由文本命令?因为自由文本命令没法做权限控制和审计。结构化调用,可以从流程上保证每一步都在规划边界内,也方便后来追查问题。

设计上还有一个安全机制:执行分级。

级别动作范围执行方式示例
L1只读和幂等操作自动执行查询指标、检查进程、重启无状态服务
L2有一定影响的操作需要审批修改配置、重启数据库、触发扩容
L3高风险操作仅给建议删数据、格式化磁盘、变更核心架构

模型可以在L1自由度内自己决定并执行;想跨到L2,必须先把方案发到审批通道,等人点通过;L3干脆就不允许它碰,只输出建议给值班人员。这个分级参考了自动驾驶的理念:自动驾驶不是让系统乱飞,而是让系统很清楚哪些动作是用户授权的,哪些动作绝对碰不得。

3.3 运维知识库与上下文管理

AI Agent最容易翻车的地方是幻觉。尤其是在运维场景,模型一本正经地编一个根本不存在的命令,后果可能非常严重。我们解决这个问题的核心手段,是用知识库把模型的想象力拴住。

我们在平台里维护了一个运维知识库,里面存了三类东西:应急预案、历史工单、系统拓扑与变更记录。这些文档会被向量化,存到向量数据库里。Agent收到一个故障后,先用故障特征做一次相似度检索,拿出Top-K条相关文档片段,作为参考上下文一起交给模型。

这样做有两个好处。一是模型回答问题时有了出处,引用的是真实手册里的内容,而不是凭空编造。二是通过限定知识检索范围,我们可以控制Agent只能引用某个团队授权的知识,没有授权的故障类型它就不会乱给方案。

上下文管理方面,踩过的坑也值得讲一下。最开始我们贪心,想把所有相关历史都塞给模型,结果token费用暴涨,而且因为信息太杂,模型的判断质量反而下降。后来我们做了两件事:事件压缩和对话裁剪。

事件压缩是把几十条原始日志压缩成事件摘要加关键指标变化列表,传给模型的信息密度高了很多。对话裁剪是限制单次决策的上下文轮数,比如一个自愈任务最多做五步推理,超过五步就认定失败转人工。这样既控制了token成本,也防止Agent在无解的问题上无限循环。

4. 部署和接入:照着做就能跑起来

4.1 基础环境准备

我先给一个最小可用的部署方案,不需要那种动不动十几台机器的豪华集群:

  • 一台4核8G以上的服务器,跑Agent运行时。
  • 一个向量数据库,数据量不大时完全够用。
  • 一个大模型的推理入口。可以用云厂商API,也可以本地化部署一个支持function calling的开源模型。注意,模型能力直接决定Agent的决策质量,建议优先选择function calling稳定、工具调用成功率高的模型。

为什么把function calling能力放这么高的优先级?因为我们的整个Agent交互都是结构化工具调用,模型如果总是把参数格式搞错,平台只能反复重试,30秒自愈就无从谈起。

4.2 五步接入你的第一个监控源

整个接入过程严格来说就五步。

第一步,安装Agent运行时。我们打包了容器镜像,三步起三个服务:Agent主进程、向量库、配置管理界面。省去了很多繁琐的预编译流程。

第二步,配置模型服务。在配置中心里填上模型服务的地址、API Key、模型名称和token上限。然后跑一个连通性测试,确保Agent能成功跟模型完成一次多轮对话。

第三步,接入告警源。比如对接Prometheus,只需要填上Webhook接收地址和事件格式映射。Prometheus的Alertmanager会把告警POST到这个地址,Agent收到后自动结构化入库。

第四步,注册执行工具。这个在前面已经讲过,就是在配置目录里加YAML条目,声明工具名称、参数、权限级别和超时。

第五步,配置自愈策略。这是最后一道安全阀:针对每一个故障类型,定义哪些工具允许自动执行、哪些需要审批、验证方式是什么。

我挑一个典型的自愈策略配置说一下:

policies: - event_type: service_http_5xx_ratio_high condition: error_rate > 0.2 for 3m actions: - tool: k8s_scale_up params: { workload: "${event.workload}", replicas: "+1" } level: L1 verify: - metric: http_5xx_ratio expect: "< 0.05" timeout: 30s

这个配置的意图是:当某个服务的HTTP 5xx比例持续三分钟超过20%时,自动调用扩容工具给对应工作负载增加一个副本,然后检查5xx比例是否降到5%以下,超时30秒没降下来就报异常。

4.3 给Agent配置运维技能

这一步很多人忽略,但恰恰是决定平台上限的关键。我把Agent的运维技能定义成四个组成:人设提示词、可用工具集、知识库权限、策略规则。

举个例子。你想让Agent学会处理服务假死这类故障,那一个完整的技能配置大致是这样的:

  • 人设:你是一个高级SRE工程师,负责线上服务稳定性,识别到服务假死时要先确认进程状态,再确定是否有优雅退出路径。
  • 工具集:进程探活查询、健康检查调用、服务重启工具、日志查询工具。
  • 知识库:假死类故障的应急预案、最近三个月的相关工单。
  • 策略:查询类L1自动执行,重启类L1自动执行,但首次重启失败后必须转人工。

这样一套技能,本质上是在给模型限定一个职业边界。它只在授权的工具和知识范围内做决策,不乱用。你可以搭配出很多技能,比如扩容技能、数据库连接池恢复技能、证书过期处理技能,每个技能对应一类高频故障。技能能拆能合,新增技能不会影响已有技能。

5. 实战记录:一场风电场数据采集中断的自愈

5.1 场景背景

说一个我们实际跑过的案例,算是把前面的理论串起来。

某风电场的管理系统接入了多台风机数据采集器。这些采集器负责实时上传振动、温度、功率等运行数据。某天晚上,监控平台连续收到该场区多条数据采集心跳丢失的告警。以前遇到这种情况,值班人员要先核对哪些风机掉线,再判断是网络问题还是采集器死机,然后想办法远程重启采集终端。整套流程正常要半小时以上。

这个场景正好符合自愈白名单的条件:告警特征明确、恢复动作低风险且幂等、验证方式清晰,所以我们把它划进了L1自动自愈范围。

5.2 自愈过程的时间线

这个案例当晚的真实处理时间线是这样的:

  • 0秒:告警接入,Agent收到心跳丢失事件。
  • 1秒:事件解析完成,Agent识别出故障对象是第二组采集终端,关联到对应风机编号。
  • 3秒:知识库检索命中一条历史工单,历史上同一型号采集器多次发生因为网络抖动导致的假掉线。
  • 6秒:Agent生成方案:第一步对掉线设备做一次网络连通性探测,第二步尝试通过管理接口远程复位采集终端。
  • 8秒:执行网络探测,确认管理网络可通,排除了大规模断网可能。
  • 12秒:执行远程复位命令。
  • 20秒:心跳数据恢复,Agent通过数据上报确认设备已正常上线,把告警标记为已恢复。
  • 22秒:自动生成事件报告推送值班群。

整个流程大约22秒,跟标题里说的30秒自愈基本吻合。从实际感知来看,值班同事刚点了几个通知消息,发现告警已经自己绿了。这种体验,说实话比任何汇报PPT都有说服力。

5.3 上线后的效果和边界

平台上这个自愈策略跑了一个季度之后,效果是明显的。同类故障的平均恢复时间从40分钟降到了25秒以内,夜间值班被叫起来的次数大幅减少,人工误操作从每月个位数降到了零。

但我要泼一盆冷水。稳定的自愈效果一半归功于Agent,另一半归功于我们非常克制地只开放了低风险动作。我们从来没有想让Agent去解所有问题。不是它做不了,而是运维系统的核心是稳定性,不折腾就是最大的贡献。

还有一个细节是复盘。即便Agent自愈成功了,我们仍然要求每周把自愈记录人工过一遍,确认哪些判断是对的,哪些是歪打正着。因为自愈机制本身如果藏了错,它会在没有任何人发现的情况下反复执行错误的恢复路径,这才是最吓人的。

6. 常见问题与排查技巧实录

6.1 Agent误判导致错误执行怎么办

误操作是所有人对AI Agent自动化执行最大的担心,这个担心不丢人。我们的处理方式有三道闸。

第一道是你前面看到的执行分级。只有L1自动执行,而且是白名单里的工具。第二道是审批。L2级别的动作强制插入一个审批节点,人工不点头,Agent就只能干等。第三道是审计和回滚。平台记录每一个工具执行的任务ID、参数和执行结果,一旦发现异常,可以一键回溯到操作前的状态,或者执行配套的回滚动作。

实际经验是,让Agent误判概率降到可接受范围的,不是模型变聪明,而是把工具定义得干干净净。参数明确、生效范围明确、是否有副作用明确,模型就不容易走歪。

6.2 工具执行失败或者超时

这个我们在早期踩了不少坑。Agent判断得对,但工具执行失败了,整个自愈流程就卡住。

后来定了一套统一的处理规范。每个工具必须配置超时时间,比如重启服务默认30秒,超过就按失败处理。失败后平台会按策略重试,但重试次数一般不超过两次,间隔逐步拉长。重试仍然失败,马上把上下文完整打包,转给人工值班通道,同时附上Agent已经做过的操作和观察结果,让人工不用从头查起。

还有一类问题是工具本身不可重入,比如创建一台云主机这种动作不能随随便便重试。所以工具定义里要显式声明幂等性,非幂等工具默认禁止自动重试。

6.3 成本高不高,性能和token怎么控

Agent平台最容易被忽视的是一场慢火烧钱:token费用。特别是本地模型响应慢、云API计费贵,如果每一件小事都走完整Agent链路,成本很快就失控。

我们的处理思路是分层过滤。先走规则引擎,固定、明确的告警直接匹配预设响应,根本不进Agent。只有规则引擎处理不了、需要推理判断的事件,才会触发Agent。这样一来,90%的告警都是廉价确定的路径处理掉的,Agent只处理剩下的10%复杂事件。成本下来一大截,准确率反而更高。

性能方面,Rust运行时目前实测单机能扛住每分钟上千次事件,瓶颈通常不在Agent,而在模型服务的响应速度。所以如果发现端到端延迟变高,先查模型服务的吞吐和限流配置,这基本能解决80%的问题。

我整理了三个高频故障的排查速查表,给你参考:

现象可能原因排查动作
Agent一直不生成方案模型服务超时检查模型API状态、token上限、并发限制
工具调用被拒绝参数校验失败查看日志中的校验错误,检查工具Schema参数类型
自愈执行成功但告警没解除验证规则太严格确认验证指标名称和数据源,适当放宽期望阈值
知识库检索结果不相关向量化切分太粗调整文档切分长度,增加标题权重

最后再聊几句个人体会

做AI Agent智能运维,最容易上头的是追求啥都自动搞定,但我现在最深的感受是:Agent的自愈能力不是模型有多聪明决定的,而是你的工具链和边界设计有多扎实决定的。宁可让它少修,也不能让它乱修。所以我特别建议刚开始尝试这种平台的团队,先花两周时间把只读类工具全部放开,让它多看多判断,不要动手。摸清它的判断质量以后,再逐步放开重启、扩容这类可逆的低风险操作。等到稳定跑一个月,你自然知道该往哪个方向加技能了。这个平台后续还有很多可挖的点,比如把自愈策略跟容量预测结合,比如让Agent在自愈之后自动写变更记录。但核心这件事已经验证了:把一群训练有素的运维沉淀下来的经验,变成一套能自动决策、自动执行、自动验证的系统,这条路是完全走得通的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询