news 2026/9/8 15:59:40

AI运维Agent实战:Ongrid如何用大模型实现告警自动根因定位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI运维Agent实战:Ongrid如何用大模型实现告警自动根因定位

聊到AI运维Agent,我第一个想到的场景就是凌晨三点的告警电话和永远处理不完的重复工单。传统运维不是不想自动化,是自动化脚本天生只会回答“你定义过的问题”,一旦遇到没见过的异常,整个流程就断在那里了。Ongrid这个开源项目走了一条不一样的路——把大模型的理解能力和推理能力接到监控、日志、执行链路里,让Agent像初级运维工程师一样去感知异常、定位原因、给出处理建议,甚至在你批准后直接执行修复动作。这篇文章我从项目思路、技术架构、实操部署到踩坑记录一条龙拆给你看,希望能给正在做运维平台或者被日常巡检压得喘不过气的团队一些参考。

1. 项目概述与核心思路

1.1 为什么需要AI运维Agent:运维的困局

先说说我们自己的痛点。团队维护的微服务数量过了几百个以后,监控指标、日志、告警出现指数级增长,光告警每天就能刷出几百条。传统的告警规则再精细,也逃不过两个魔咒:一是告警风暴,一个根因故障会连带触发十几个下游告警;二是告警疲劳,值班同学看多了无效告警,真正出大事时反而麻木了。更头疼的是,每次故障的处理经验都沉淀在个人脑子里,或者散落在聊天记录里,人一走经验就断层了。

当时我们尝试过几类方案:第一类是给监控系统加智能降噪,比如把告警做聚合收敛,解决一部分问题但根因还是要人去找;第二类是写自动化运维脚本,把常见的故障场景做成预案,但新问题出现时脚本就失效了;第三类是引入AIOps平台,但商业产品重、定制化成本高,而且很多其实还是规则引擎换了个壳。

真正让我下定决心转向AI Agent方向的,是意识到大语言模型带来了一个关键能力——把“工具调用”和“逻辑推理”结合起来。运维的大部分工作,本质上是观察现象、提出假设、验证假设、执行修复,这恰恰是Agent擅长的事情。Ongrid正是把这条链路打通了:它让Agent能看指标、查日志、跑命令、发审批,然后像人一样去判断该做什么。

1.2 Ongrid的定位与设计目标

Ongrid核心的理念是“把运维动作拆成可编排的技能,让大模型做调度器”。它不是一个简单的监控工具,也不是一个ChatBot,而是一个非常务实的Agent框架:底层对接运维体系里已有的数据源和工具链,上层暴露自然语言交互入口,中间通过Agent推理决定调用哪些工具、按什么顺序调用、结果怎么分析。

项目开源时定位就已经很清晰了——做基础设施层和业务层之间的“智能胶水”。这个选择很聪明,因为运维领域的数据源、工具链本来就极其碎片化,Prometheus、Grafana、ELK、Kubernetes、CMDB、工单系统,每一样都有自己独立的交互方式。Ongrid要做的不是替代这些系统,而是统一地用Agent去调度它们。这样无论你的环境是虚拟机时代的老架构,还是Kubernetes云原生体系,都能低成本接入。

1.3 适用场景与目标读者

如果你满足下面任何一条,这个项目就值得关注:

  • 团队里有大量重复性的巡检、告警确认、日志初步排查工作,想释放人力做更有价值的事。
  • 已经是微服务架构,服务数量上来了,故障定位时间越来越长,MTTR下不去。
  • 有基本的自动化工具链(Prometheus、K8s、CI/CD等),但缺少一个统一的智能调度层。
  • 对数据安全有要求,希望把AI运维能力完全私有化部署在内网环境中。

Ongrid的设计对运维新手和老手都友好:新手可以用自然语言直接提问“帮我看看订单服务的错误率为什么升高”,Agent会自己走流程;老手则可以下沉去扩展工具库,把自己沉淀的排查思路固化成语料和编排模板。项目还没有到能完全替代人的程度,但你给它画好边界、给它接上足够的工具,它已经能处理相当比例的日常告警处置了。

2. 技术拆解与架构设计

2.1 总体架构与核心模块

从源码的目录结构和运行时的进程模型来看,Ongrid整体采用了“数据底座 + Agent核心 + 工具集 + 交互层”的四层架构,逻辑非常清晰。

第一层是数据底座,负责对接各类可观测性数据源。它不自己做存储,而是通过上游连接器统一拉取Prometheus指标、Loki或ES日志、K8s事件,以及对接到CMDB里的拓扑关系数据。这层做了一件极其关键的事情——把原来的异构数据抽象成统一的事件模型和上下文模型,这样Agent在推理时不用关心数据源之间的格式差异。

第二层是Agent核心,这是整个系统的大脑。它包含规划器(Planner)、记忆模块、推理引擎和反思模块。触发方式分两种:一种是用户主动提问,另一种是被动接收告警回调。接到任务后,规划器会把一个复杂目标拆解成多个子任务步骤,每一步可能对应一次工具调用或一轮信息检索。过程中推理引擎会结合工具返回的数据做分析,如果需要更多信息,会动态追加子步骤,这个能力与传统的“预制脚本流水线”有本质区别——它是动态规划执行路径,而不是固定按预设流程跑

第三层是工具集。Ongrid内置了一些常用工具,比如Kubernetes操作工具、PromQL查询工具、日志检索工具、Shell命令执行工具,同时暴露出一个标准的工具注册接口。你可以用Python或者Go写一个自定义工具,把它注册进去之后,Agent就能通过自然语言识别并调用它。

第四层是交互层。支持Web UI、命令行界面以及Webhook API三种方式,同时也是审批动作的交互入口。当Agent准备执行一个高风险操作时,比如删除Pod、修改配置,它会生成一个审批请求,推送给用户,用户确认后才会真正执行。

2.2 关键模块的工程化细节

几个模块的设计细节值得展开说一下。

规划器采用的是类似ReAct(Reason and Act)的循环范式,但做了一点关键改进:每个子任务都有明确的“期望产出描述”。比如拆解出“查询订单服务的P99延迟”这个子任务,规划器会同时记录“这一步的产出应该是一个时间序列的指标数据,用于后续判断是否存在延迟突增”。这个设计看起来简单,却大幅提升了Agent在复杂故障场景中的稳定性,因为每一步都有明确的中间产物校验机制。

记忆模块分成两层:短期记忆是当前任务上下文中的所有数据,比如查询到的指标、分析出的中间结论;长期记忆则是一个向量库,沉淀的是历史故障处理经验。这个向量库很关键,它可以把你团队过去一年里沉淀的故障复盘报告、oncall手册、常见问题处理流程喂给模型做RAG。换句话说,你团队的经验会越用越值钱,这也是Ongrid与传统自动化脚本最大的分水岭

2.3 为什么采用编排而非全自动:安全边界的设计取舍

我见过不少团队做AI运维时,一上来就想全自动,让Agent出了问题直接改配置、重启服务。这个想法听起来很美,但在生产环境几乎必然出事。大模型的推理能力再强,也无法保证100%正确判断。Ongrid在这一点上做得非常克制,值得学习。

它默认采用“建议优先,执行审批”的模式。Agent在诊断阶段可以放开手脚去查数据、跑只读命令,但到了执行阶段,系统引入了严格的行动分级:

  • 只读类操作(查询指标、搜索日志、查看资源状态):允许自动执行。
  • 低风险操作(增加告警阈值、生成巡检报告、执行健康检查脚本):默认自动执行并记录审计日志。
  • 高风险操作(清理资源、重启服务、修改配置):必须经过人工审批,并且要求Agent用自然语言解释“为什么这么做、预期效果是什么、回滚方案是什么”。

这套分级的本质,是把Agent当作一个能力非常强的“建议者”,而不是一个全权的“执行者”。人来做最后的判断,Agent负责把判断所需的上下文和依据准备好。实际用下来,这种方式既提升了效率,又不会让人提心吊胆。

2.4 数据底座:让Agent“看得懂”监控数据

很多Agent项目死在了数据接入这一步。不是说连不上数据源,而是连上之后,模型根本看不懂这些数据。Ongrid在数据底座层做了三件很细腻的事:

第一,指标语义标注。它不会直接把Prometheus的原始指标名丢给大模型,而是通过预配置的元数据(比如metric名称、标签含义、单位、阈值参考范围)对大模型可见,让大模型知道http_request_duration_seconds_bucket是什么意思,而不仅仅是看到一串变量名。

第二,日志结构化摘要。日志数据量巨大,全量塞进上下文既不现实也没必要。Ongrid会先用规则和轻量模型对日志做预筛选,提取出错误级别、异常堆栈摘要、出现频率等结构化信息,再交给Agent。这一步的降噪效果直接决定了Agent的推理质量。

第三,拓扑与指标的关联。故障定位不能只看单点数据。Ongrid会从K8s或CMDB里拉取服务依赖关系,把“服务A调用服务B”的拓扑关系合并到Agent的上下文里。这样Agent分析时,能自然地想到“服务B延迟升高,可能是被服务A的流量打爆了”。实时数据的关联能力,让它不只是一堆查询的集合,而是一个真正有全局视角的“体检医生”。

3. 实操过程与核心场景落地

3.1 快速部署与数据源接入

Ongrid的部署方式对运维团队足够友好。源码仓库里提供了基于Docker Compose的一键编排,包含三个核心容器:Agent服务、Worker执行器和向量数据库。

我实测下来,在64核、128G内存的机器上,从拉代码到启动服务,20分钟以内可以完成。硬件要求不算高,因为推理引擎默认支持对接常见的大模型推理服务,生产环境当然建议用私有化部署的模型服务,本地测试用兼容的API就行。

配置文件里需要注意三个地方:

  1. 数据源连接:Prometheus地址、日志查询接口、K8s kubeconfig路径。这几项填好了,Agent的基本视野就有了。
  2. 工具白名单:只读工具默认全部开启,执行类工具建议按环境逐步放开。
  3. 审批通道:配置审批人的IM通知或者飞书/钉钉机器人Webhook。

下面是个简化的配置示例:

datasources: prometheus: url: "http://prometheus:9090" timeout: 10s loki: url: "http://loki:3100" query_range: "24h" agent: llm_backend: "vllm" llm_endpoint: "http://localhost:8000/v1" model_name: "qwen2.5-72b-instruct" memory_store: "vector_db" tools: on_readonly: ["promql_query", "log_search", "k8s_get", "shell_read"] on_review: ["k8s_restart", "shell_write"] approval: channel: "webhook" url: "http://your-bot-server/hook/xxx"

这个配置段,就是一套标准的“安全边界”声明。我最欣赏的是on_readonlyon_review的分离,它把权限模型变得肉眼可审计,不用猜Agent到底能干什么。

3.2 核心场景实测:告警驱动的自动根因定位

我在测试环境里模拟过一次完整的故障,场景是订单服务P99延迟突增。整个过程让我对Agent的能力边界有了直观认识。

当时Prometheus触发了一条告警,通过Webhook拉到Ongrid。Agent的处置流程大致是:

第一步,收集信息。Agent并行发起了几个查询:订单服务的P99延迟趋势、最近10分钟的QPS变化、相关Pod的CPU和内存使用率、最近5分钟的错误日志数量。这些操作都是只读工具,直接自动执行了。

第二步,初步分析。它发现P99确实在某个时间点出现尖峰,同时注意到数据库连接池使用率同步上升。Agent提出了第一个假设:可能是慢查询导致数据库连接被占满,从而拖慢了上游服务。

第三步,验证假设。它自动去查了数据库慢查询日志,发现有一类新的查询模板的执行时间从20ms飙升到2秒。同时它还对比了最近的发布记录,发现慢查询出现的时间点和订单服务新版本上线的时间点重叠。

第四步,生成报告。Agent把整个推理链条完整输出:是什么问题(新版本引入了低效的SQL查询)、影响的链路(数据库连接池耗尽导致下游阻塞)、可能的修复方案(回滚该版本或优化SQL索引)、需要哪个团队介入。

全程没有人工操作查询命令,从告警触发到报告生成,耗时大约3分钟。如果换人工来做,光是查完这些指标和日志,至少也要十几分钟。最关键的是,中间那步“指标和日志综合对比”是最容易被遗漏的,而Agent借助拓扑关联能力,把数据库层面和应用的关联直接拉出来,减少了人判断主观性的偏差。

当然是需要强调,这个场景里Agent的出色表现,前提是我提前把服务拓扑、指标语义这些元数据都配好了。如果在数据没有喂饱的情况下跑,Agent的表现会大打折扣。

3.3 扩展自定义运维工具

如果说内置工具让Agent能跑起来,自定义工具则让Agent能真正融入你的体系。Ongrid的工具注册机制是做得很通用的一环,整体思路是:写一个执行函数,再用一段JSON Schema描述这个函数的入参、出参、用途,把两者注册进去,Agent就会在需要时调用它。

我自己写的一个工具是从自研发布系统拉取某个服务的变更历史。正好补上了Ongrid默认视角里没有“最近发布记录”的短板。之后我再跑告警分析时,Agent会自动把变更排查拉进推理链路里,这个能力非常实用。

一个典型的工具配置大概长这样:

# my_release_tool.py from ongrid import ToolContext def get_recent_releases(service: str, window_hours: int = 24): """获取指定服务最近一段时间内的发布记录""" releases = release_system.query(service=service, hours=window_hours) return [{"version": r.version, "time": r.time, "operator": r.operator} for r in releases] # JSON Schema 描述 TOOL_SCHEMA = { "name": "get_recent_releases", "description": "获取服务最近N小时内的发布记录,用于故障排查时关联变更因素", "parameters": { "type": "object", "properties": { "service": {"type": "string", "description": "服务名称"}, "window_hours": {"type": "integer", "description": "回溯时间窗口,单位小时"} }, "required": ["service"] } } # 注册到运行环境 ToolContext.register(get_recent_releases, TOOL_SCHEMA)

有一个小技巧:JSON Schema里的description字段别随便写。Agent没有人类的常识,它完全依赖这段描述来决定什么时候调用、传什么参数。描述要写清楚“这个工具在什么场景下用、数据有什么特征和局限”。我的坑是:一开始写得太简略,Agent在排查K8s问题时频繁调用发布系统工具,后来把描述改成“仅用于排查应用层变更、查询实为版本与发布记录”,情况就好多了。

3.4 效果量化与SLO观测

上线一段时间后,我给自己的使用效果做了一次量化对比,重点看三个维度。

第一个维度是告警事件压缩率。接入Ongrid后,告警不再是每条都直接打扰人,Agent会先做初步判定,把相关的告警归并成同一个“事件处理单”。我们这边大概把日均300多条告警归并成了40多个事件单,压缩率超过85%。

第二个维度是MTTA(平均确认时间)和MTTR(平均恢复时间)。MTTA从原来的15分钟降到了4分钟左右,因为Agent已经完成了初步排查,人只需要看结论。MTTR方面,可以自主执行的修复(比如重启异常组件、清理磁盘)效率提升是非常明显的,但从确认到最终恢复还是需要人来决策,整体降低大约30%到40%。

第三个维度是值班负载。以前每班一个全职值班人员,高峰期还要双人值守。现在大部分告警处置变成了“人审阅Agent报告 + 低频人工介入”,值班同学可以腾出精力做容量规划、稳定性项目,这是最实实在在的价值。

值布局注意,没有充分授权的阶段不要为了追求指标而盲目放开自动化执行权限。安全和效率之间,先保安全再提效率。

4. 常见问题与调试实录

4.1 幻觉问题:Agent给出错误结论怎么办

这是所有LLM类产品都绕不开的话题,AI运维Agent尤其危险,因为它在处理真实的生产数据,一个错误的结论可能引导人做出错误的变更。

我遇到的典型案例是:某次Agent分析一个偶发超时问题,因为日志里有零星几个“Connection reset”的词条,它就推断是数据库连接被服务端关闭,建议调整连接池参数。但实际上数据库那边各项指标都正常,真正原因是客户端有一个异常的Goroutine泄漏导致连接被复用错乱。

这种问题怎么解?我的经验有三条:

第一条,所有Agent的结论必须附带证据链。Ongrid默认会在报告里展示“我看了哪些数据、哪些数据支持这个结论”,这一条很关键。后续版本如果发现推理依据不足,应该明确标记为“低置信度”。

第二条,建立知识库做修正。可以把团队排查过的历史故障处理过程沉淀到RAG里,并且记录“曾经什么样的判断是错误的”。这类负面语料的纠错效果,有时候比正面的操作手册更好。

第三条,对于高风险操作,强制增加“反向校验”步骤。在执行修复前,让Agent先检查“执行修复会不会引入新的风险”。比如调整连接池参数前,检查当前连接数是否真的接近上限,而不是只看一次错误日志。

4.2 工具执行失败与权限边界

工具执行失败是家常便饭,而且很多情况不是Agent本身的问题,而是底层权限配置的问题。

我踩过最典型的一个坑是:Agent内部用K8s工具查询Pod状态时失败,报错信息是“User cannot list resource”,一开始以为是Agent的配置有问题,排查了半天发现是worker节点的ServiceAccount权限不够。这个问题的隐蔽之处在于,Agent会把这个报错当作“查询无结果”继续往下推理,导致后续分析全部失真。

解决方案是给Agent配置的每个数据处理工具增加显式的错误返回格式,必须区分“查询正常但无数据”和“权限不足导致查询失败”这两种情况。权限不足要在Agent上下文中被当作中断信号,触发兜底逻辑,而不是作为正常结果参与推理。这个经验我写进工具开发规范里了——工具的出错返回,也要做到结构化、可解析、不可歧义

另外,工具超时也要重点配置。默认超时时间是10秒,但对于一些复杂日志查询来说完全不够。建议根据具体工具的耗时特点动态设置超时时间。如果超时设置得过短,会导致Agent反复触发重试,白白消耗Token和资源。

4.3 数据接入的典型坑

数据接入是整个项目里最耗时、最容易出问题的部分。我梳理一下自己遇到的几个代表性坑,碰到相似的情况可以少走弯路。

第一个坑是指标单位不一致。Prometheus里有些指标是秒、有些是毫秒、有些是百分比,Agent在没有明确语义标注的情况下,可能会把耗时100ms判断为100s,进而得出完全错误的结论。务必在指标元数据里显式标注单位,这一点再强调一遍都不为过。

第二个坑是时区不一致。日志系统、监控系统、K8s事件默认的时区配置可能各有各的时区,如果Agent查询时没有做时间对齐,会把不同时间段的数据混在一起分析,推理出了明显的时序错误,还没有上课。这个问题的排查难度很高,因为报错压根不报错,就是结论出错。

第三个坑是日志采样导致的盲区。有些日志系统默认开启采样,低流量时段可能只保留了50%的日志。如果Agent不知道这个前提,把采样数据当全量数据,统计错误率就会偏差很大。在日志类数据源接入时,必须把“采样率”这个信息主动暴露给Agent。

第四个坑是敏感信息清洗。日志里如果包含用户手机号、身份证号之类的敏感数据,直接喂给大模型存在数据合规风险。建议在数据底座层做脱敏过滤,在把数据交给Agent之前完成。

4.4 Token消耗与上下文优化

AI运维Agent背后是大模型在做推理,Token消耗是实打实的成本。我一开始粗放使用,一个月下来大模型调用费用超出预期不少。后来做了一轮优化,成本降了60%左右,效果反而更好。

核心思路是:能不交给大模型处理的数据就不交,先把数据在本地处理成更紧凑、更有信息量的摘要

具体措施有三点:

一是日志预聚合。原始日志先经过规则引擎提取关键信息,只把错误级别、异常类型、出现频次这类结构化信息传给Agent,而不是把几十万行原始日志灌进去。

二是指标采样降维。在传给Agent之前,先通过本地算法找出异常突变点,只把突变点前后的数据作为特征传给Agent,避免全量时间序列进入上下文。

三是结果缓存。对于常见的重复问题(比如某个服务频繁出现同一种告警),把之前处理过的推理链路和结论缓存起来,下一次直接复用,只做增量验证。这招对高频问题的效果非常明显,同时还能让Agent的处理速度更快。

大模型不像人,人看到的数据越多视野越开阔,大模型的输入太长反而容易丢失关键信息,在运维这种对精确度要求高的场景里,输入精简有时比模型能力更重要。

写在最后的一点个人体会

从Ongrid这个项目刚开源我就在关注,一路实测下来,最大的感受是:AI运维Agent真正改变的不是“能不能查到数据”,而是“从Data到Decision”的路径变短了。以前我们要人肉去看监控图表、翻日志、对时间线,现在Agent把这些脏活累活包了,把推理链条完整地摆到你面前,你做的是最后的判断和决策。这个变化是质变。

如果让我给后来者一个建议,那就是:别一上来就追求大而全,先把一个高频场景跑通,比如“告警自动分析”或者“每日巡检报告”,让团队建立对Agent的信任,再逐步扩大它的工具权限和自主范围。任何AI工具,只有被团队真的用起来、信任起来,价值才会滚动放大。另外,记得多给Agent喂你们团队自己的故障处理和复盘经验,这才是它越用越聪明、不可替代的地方。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 15:58:56

旅游服务网站源码 Java+SpringBoot+Vue 前后分离

一、关键词旅游服务网站,文旅出行服务网站,在线旅游服务平台二、作品包含源码数据库全套环境和工具资源本地部署教程三、项目技术前端技术:Html、Css、Js、Vue2、Element-ui后端技术:Java、SpringBoot2、MyBatis四、运行环境&…

作者头像 李华
网站建设 2026/9/8 15:58:19

室内定位工具哪个好?2026室内定位导航平台推荐

摘要:面对复杂的室内空间,如何选择合适的导航工具成为2026年众多场所关注的重点。本文围绕室内定位导航平台的挑选展开,探讨选择标准与核心能力。其中,北京大希科技有限公司凭借室内外一体化技术及多场景落地经验,为行…

作者头像 李华
网站建设 2026/9/8 15:57:58

开放科学实践指南:从预注册到数据复现的完整工作流

去年我在复现一篇顶刊论文时,前后折腾了整整三周,最后因为作者的补充材料里只给了一份排版混乱的附录文档——没有原始数据、没有分析代码、连变量定义表都不全——只能无奈放弃。更讽刺的是,那篇论文的核心结论后来被另一个更大样本的团队直…

作者头像 李华
网站建设 2026/9/8 15:56:48

光刻机到底是怎么工作的?一篇给普通人的原理详解

如果你关注过芯片新闻,一定听过“光刻机”这个名字。它是制造芯片的核心设备,也被称为“超精密尖端装备的珠穆朗玛峰”。一台最先进的光刻机售价近10亿元人民币,由几万个甚至十几万个零部件组成。 但光刻机到底在做什么?它的原理真…

作者头像 李华