大数据智能运维实战(一):机器和任务数据都有了,如何用 MCP 搭建运维助手?

系列:Spring AI + MCP------大数据智能运维实战

本篇目标:从一次任务延迟出发,梳理运维助手需要哪些数据,以及 Spring AI、MCP 和已有平台分别负责什么。

阅读基础:了解 Spring Boot,知道接口和数据库查询的基本概念即可。

案例说明:本系列中的人物、平台、节点、任务和数据均为虚构教学设定,示例独立设计,不对应任何真实生产系统。

1. 小周又来找小林了,这次不是查数

上一个系列里,小林给小周做了一个查数助手。

小周输入一句"帮我看看每天的订单金额",助手就能寻找数据、调用查询工具,再把结果解释清楚。

这天上午,小周又发来一条消息:

"今天的门店经营日报怎么还没更新?平时这个点早就有了。"

小林打开调度页面,发现任务还在运行。

他又打开监控页面,看了看机器的 CPU 和内存,再翻出任务日志,准备找找有没有报错。

几分钟过去,浏览器已经打开了好几个标签页,小周又补了一句:

"是不是机器不够用了?"

小林没有马上回答。

任务还在运行,可能是启动得晚,也可能是执行得慢;机器当前比较忙,也不能直接说明一小时前就在忙。光看一个状态、一个数字,很难把事情讲清楚。

他想起了之前做查数助手的过程:

既然程序已经能查询这些信息,能不能让助手把它们按排查顺序组织起来?

这个系列,就从这里开始。

我们要做一个运维助手,让它利用已有的节点信息、监控指标、调度记录和日志,帮助值班同学回答三个问题:

  • 现在发生了什么?
  • 哪些数据支持这个判断?
  • 接下来应该查哪里?

2. 先别急着接模型,把"慢"拆开看看

为了让后面的讨论有共同背景,我们先约定一个虚构环境:青禾数据平台。

平台每天早上运行一次"门店经营日报"任务,汇总前一天的经营数据。

这次排查固定在 2026 年 9 月 16 日 09:10。全文时间均按北京时间理解,不随着读者打开文章的时间变化。

教学记录如下:

项目 虚构记录
任务名称 门店经营日报
本次处理的业务日期 2026-09-15
计划启动时间 2026-09-16 08:00
进入调度等待队列 2026-09-16 08:00
调度侧实际启动时间 2026-09-16 08:35
查询时刻 2026-09-16 09:10
查询时刻的状态 运行中
调度执行节点 demo-worker-b
前 7 次成功运行的执行耗时中位数 30 分钟

小周说"一个多小时还没完成",这句话没有问题。

但如果助手直接回答"任务已经执行了 70 分钟",就把两段时间混在一起了。

我们手动算一下:

图 1:从计划启动到查询时刻经过了 70 分钟,需要按调度阶段拆开理解。

这里至少有两个问题:

第一,为什么启动前等了 35 分钟?

第二,启动后已经过去 35 分钟,任务执行过程有没有异常?

它们需要不同的证据。前一个问题主要看调度队列和资源分配,后一个问题还要看计算引擎状态、指标趋势和执行日志。

而且,这里的"启动"按调度平台记录划分。进入执行阶段后,是否还在计算引擎里等待资源,需要继续查询,不能把这 35 分钟都理解为实际计算时间。

历史执行耗时的中位数是 30 分钟,也只是一个比较基准。今天启动后经过 35 分钟,尚不足以单独证明发生了严重性能问题。

做运维助手的第一步,是把问题和时间口径讲清楚。后面的查询、计算和解释,都要沿着这个口径走。

3. 我们需要的数据,大部分已经在那里

小林整理了一下,发现自己刚才打开的几个页面,其实分别回答不同的问题。

已有信息 能帮助回答什么 使用时还要注意什么
节点与组件信息 有哪些机器,部署了什么,最近上报什么状态 当前登记状态能否代表查询时刻
监控指标 CPU、内存、磁盘等在某个时间段如何变化 单位、采样时间、聚合方式
调度队列 任务在等待还是运行,什么时候进入队列 调度等待与引擎内部等待要区分
任务运行记录 哪次运行、在哪台节点、是否失败或重试 同一个任务可能有多次运行和执行尝试
执行日志 出现过哪些错误,前后发生了什么 日志是否完整,是否属于本次执行

这些数据不必全部放在同一个地方。

节点信息可能来自管理平台,指标可能存放在监控系统,运行记录由调度系统保存,日志通过已有的日志服务查询。

本系列的前提是:这些信息已经被采集或记录,我们在已有查询能力之上组织工具。

教学环境里,我们会用本地模拟数据代替这些来源。这样读者不用先搭一整套大数据集群,也能练习完整的查询和排查过程。

不过,"已经上报"还需要再多问一句:什么时候上报的?

假设查询时刻是 09:10,节点信息如下:

节点 最近一次 CPU 使用率 对应采样时间
demo-worker-a 34% 09:09
demo-worker-b 88% 09:09
demo-worker-c 17% 08:20

看到第三行,助手不能直接说:

"节点 C 很空闲,可以把任务分过去。"

这个 17% 已经是 50 分钟前的记录了。

同样,节点 B 在 09:09 的 CPU 使用率是 88%,也不能证明它在 08:00 到 08:35 之间一直繁忙,更不能直接解释任务为什么排队。

数据除了数值,还需要带上时间。否则,助手很容易把"以前看到的情况"说成"现在正在发生的情况"。

4. Spring AI、MCP 和模型,各自负责哪一段

小周听到这里,问了一个很直接的问题:

"所以,装上 MCP,就能查出为什么慢了?"

还需要把几个角色接起来。

MCP 的全称是 Model Context Protocol 。在这个系列里,我们主要使用它的工具能力:让应用能够按统一协议发现工具、了解参数并发起调用。MCP 还支持其他能力,本篇先聚焦查询工具。MCP 官方架构说明

可以沿用之前查数系列的"点菜单"类比。

工具服务提供一张菜单,写清楚:

  • 可以查询什么。
  • 调用时要提供哪些条件。
  • 返回的结果表示什么。

例如,"查看某次任务运行记录"这个工具,需要一个明确的运行标识;"查看节点指标趋势"需要节点和时间范围。

模型根据问题和工具说明提出调用请求,应用负责组织调用,服务端检查参数和权限后执行查询。

各个角色的分工如下:

角色 本系列里的职责
用户 提出问题,必要时补充任务、日期等条件
模型 理解问题、提出工具调用、根据结果组织解释
助手应用 管理对话和调用流程,把工具结果交回模型
MCP 客户端 在助手应用中与工具服务通信
MCP 服务端 提供查询工具,执行校验并返回数据
已有平台或教学数据源 提供节点、指标、任务和日志等记录

Spring AI 则帮助我们在 Java 应用里接入模型、组织工具调用,并集成 MCP 客户端和服务端能力。后续我们会使用它把这些角色连接起来。Spring AI MCP 说明

熟悉 Spring Boot 的读者,可以先把业务代码理解为:

接收参数,检查条件,调用查询服务,返回结构清楚的结果。

你仍然需要写好这些代码。模型不会替我们决定某个字段的业务含义,也不会自动把不完整的数据补成事实。

5. 先把一条完整线路画出来

小林在纸上画了这样一张图:

图 2:助手应用组织排查,MCP 工具服务执行查询,结果返回后再交给模型解释。

模型通过助手应用参与分析;真正访问数据的,是我们编写并授权的查询程序。

第一版可以先准备几类职责清楚的工具:

工具能力 输入条件示例 返回内容示例
查找任务 任务名称关键词 候选任务及其标识
查看某次运行 任务标识、运行日期 状态、时间、执行节点
查看节点趋势 节点、开始时间、结束时间 指标值及对应时间
查看执行日志 本次执行标识、查询范围 日志片段、完整性说明

这里展示的是教学设计,具体名称和参数会在后续代码中逐步确定。

小林特别加了一条约定:

标识从查询结果里拿,不让模型凭空猜。

用户说"门店日报",系统里可能存在多个相近任务。助手应先查询候选项;如果仍然无法确定,就请用户补充。

同样,查到了某个任务,也要继续确定是哪一天、哪一次运行。不能拿昨天失败的日志解释今天的任务。

至于时间差、耗时等能够确定计算的内容,我们会尽量让程序算好,再交给模型解释。这样更容易检查结果,也便于后面做测试。

6. 查到结果以后,助手还要守住三条边界

工具能调用成功,只说明查询线路通了。

接下来,小林还得防止助手把结果解释错。

第一条:查不到数据,要说明查不到

如果某个时间段没有指标记录,助手应该说明:

"这个时间段缺少监控数据,暂时无法判断资源变化。"

不能自动把缺失值补成零,再得出"机器一直很空闲"。

日志也是一样。只返回了部分内容,就应该注明范围和完整性,不能声称已经检查过全部日志。

第二条:把事实和原因假设分开

在我们的虚构案例里,任务启动前等待了 35 分钟,这是调度记录能够支持的事实。

"可能是可用执行资源不足",属于需要继续验证的原因假设。

要验证这个假设,可能还需要查询当时的队列情况、资源分配记录,以及符合任务执行条件的节点状态。

看到一个 CPU 数字,或者找到一条带有 ERROR 的日志,都只是增加了一条线索。它是否能解释当前问题,还要检查时间、对象和上下文是否一致。

第三条:查询范围要由程序控制

用户问某次任务,工具就围绕这次运行查询;需要查看指标,再限定节点和时间窗口。

这些约束应该落实在服务端,例如检查必要参数、限制返回数量、控制查询时间范围。

只在提示词里写"请不要查询太多",不足以代替程序校验。

本系列第一阶段只提供查询和诊断建议。重启服务、终止任务、修改资源配置等操作,需要另外设计操作权限和执行流程,不属于这一阶段的交付范围。

7. 我们希望它最后怎样回答

现在可以回到小周最初的问题:

"今天的门店经营日报为什么一个多小时还没完成?"

图 3:已确认事实、待验证假设和下一步查询,需要分别说明。

下面是依据前文虚构数据编写的回答样稿,用于说明预期效果,尚未接入模型运行。


截至 2026 年 9 月 16 日 09:10,这次任务仍在运行。启动前的调度等待占用了 35 分钟;具体等待原因还需要继续查询。

已确认的情况:

  • 本次任务处理的业务日期为 2026-09-15。
  • 08:00 进入调度等待队列,08:35 实际启动,等待了 35 分钟。
  • 从实际启动到查询时刻,经过了 35 分钟。
  • 前 7 次成功运行的执行耗时中位数为 30 分钟。当前运行尚未结束,最终耗时还不确定。
  • 调度执行节点 demo-worker-b 在 09:09 上报的 CPU 使用率为 88%。

目前不能确认:

  • 08:00---08:35 的等待是否由执行资源不足导致。
  • 节点在启动前的等待期间是否持续繁忙。
  • 进入执行阶段后,是否仍存在计算引擎内部排队或其他阻塞。

建议继续查询:

  1. 08:00---08:35 的调度队列及资源分配记录。
  2. 对应时间段内相关执行节点的资源趋势。
  3. 本次运行关联的计算引擎状态和执行日志。

以上判断来自教学任务记录与节点样本;历史队列、资源趋势和日志尚未查询。


小周看完,至少能明白一件事:

"这 70 分钟里,有 35 分钟是在启动前等待,不能全部算成任务执行慢。"

而小林也能直接沿着建议继续排查。

一个有用的回答,需要让人看得出哪些事情已经确认、哪些还不确定,以及下一步查什么。

8. 开始之前,三个常见问题

"是不是要先训练一个懂 Hadoop 的模型?"

这个系列不要求先训练模型。

我们先通过工具把明确的问题和相关数据交给模型,再检查它能否正确选择工具、理解结果、表达不确定性。

第一阶段更值得花时间的地方,是整理数据口径、工具说明和可复现案例。

"现有平台已经有监控页面,为什么还要做助手?"

页面仍然很有用,尤其适合查看曲线和细节。

助手的目标,是帮用户找到相关信息、组织查询顺序,并把分散在不同地方的结果解释清楚。

比如,小周只知道"日报没更新",并不知道应该先看哪条任务、哪个队列和哪台节点。这个从问题到查询条件的过程,就是我们希望助手协助完成的部分。

"可以把所有监控数据和日志一次性发给模型吗?"

本系列会按问题逐步查询。

先确定任务和运行实例,再寻找相关节点、时间窗口和日志。这样既能控制查询量,也更容易核对每一步结论来自哪里。

如果第一步已经发现任务根本没有启动,后续排查重点就应放在启动前的环节,而不是马上搜索所有执行日志。

9. 小林先准备了一份"故障样本"

思路理顺以后,小林没有急着把所有大数据组件都接进来。

他先列了一份教学数据清单:

  • 一个虚构集群和三台节点。
  • 一项每日运行的统计任务。
  • 几次历史成功运行记录。
  • 一次启动前等待较久的运行记录。
  • 对应的指标样本和日志片段。
  • 一组故意缺失或过期的数据。

为什么还要准备缺失数据?

因为我们既要检查助手能否读懂已有记录,也要检查它在证据不足时,能否停在合理的位置。

后续文章会沿着这套环境往前走:先让工具返回节点和任务信息,再加入健康状态、指标趋势、调度排查和日志查询,最后串成一次完整诊断。

小周看了看这份清单,问:

"所以,下一步是先把这次'日报迟到'准备出来?"

小林点点头:

"对。先把场景和预期结果固定下来,后面每增加一项能力,我们都能检查它到底有没有查对。"

下一篇,我们就来准备这个本地实验环境。即使手边没有真实集群,也能跟着创建数据,手动还原这次任务延迟,为后续的 MCP 工具提供可验证的输入。

下一篇:《大数据智能运维实战(二):准备一个可复现的运维实验环境》

相关推荐
救救孩子把1 小时前
AI面试八股文-14_14-MCP-Skill-Function Calling
人工智能·安全·面试·职场和发展·推理·mcp·functioncall
海宇数据2 小时前
零信任架构实战:基于海宇入职背调报告构建自动化即时配送与网约车众包运力准入鉴权网关
运维·人工智能·架构·自动化
墨子夕2 小时前
创新的潮汐——从科学发现到资本周期的百年规律(第二卷)
大数据·数据库·人工智能
姜鱼问生2 小时前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
wangqiaowq2 小时前
PostgresSQL server Docker 安装部署
运维·docker·容器
企业数字化笔记2 小时前
多租户配额怎么控制?用量口径、并发预留与超额处理的实现方法
java·数据库·spring boot
盟接之桥3 小时前
盟接之桥谈线束数字化-按单入按单出:线束企业库存管理的破局之道
大数据·前端·网络·数据库·人工智能·制造
南棋网络安全3 小时前
ssrf跨站请求伪造(保姆级教程)
运维·服务器·网络·网络安全
帷幕落秋3 小时前
进程服务与文件描述符
linux·运维·面试