主题
AI 智能诊断
场景 作业跑挂了,靠人工翻日志、猜 Spark/Flink 报错原因,费时又费经验,新同事更是无从下手。智能诊断把这套排查动作交给一个 agentic 工具循环:模型自己决定去查哪些证据、查几次,最后给出结构化的"分类 + 根因 + 建议",而不是简单地把日志转发给大模型润色一遍。
能干什么
| 你想做的事 | 用智能诊断长这样 |
|---|---|
| 失败作业不知道从哪查起 | 实例详情点「智能诊断」,给出分类、根因、修复建议 |
| 想确认结论有证据支撑,不是模型现编的 | 展开「诊断过程」,能看到每一步调了哪个采集工具、拿到了什么证据 |
| 作业不是失败,而是迟迟不结束、卡住了 | 对"运行中/长时间未完成"的实例也能诊断,判断卡在依赖等待、资源排队还是 pod 未就绪 |
| 怀疑是数据本身的问题(脏数据/倾斜) | 模型能点名具体表、具体字段做采样分析(空值占比/高频值),用数据坐实或排除猜测 |
| 容器已被引擎回收,日志找不到了 | 平台采集层留了底:已删除容器的日志、pod 被杀死因照样查得到 |
| 跑一条即席 SQL、跑一个 Notebook cell 失败了 | 不止调度作业——查询页和 Notebook 里失败也能一键诊断 |
| 在对话里问"实例 #xxx 为什么失败" | AI 助手「工小数」自动转深度诊断,取证过程边跑边看 |
| 引擎日志动辄上万行,根因容易被淹没 | 平台先自动提炼出关键异常段,再喂给模型,不会把整份日志的噪声也交给它 |
| 没配大模型密钥,或者模型这次调用失败了 | 自动降级为规则诊断,基于同一批真实证据做模式匹配,诊断始终有结果可看 |
亮点
- 真连引擎取证,查不到也不编——19 种采集动作直连 Spark/Flink REST、k8s、日志采集层、血缘与元数据
- Agentic 且会"深挖":模型不但自己决定查什么、查几次,还能带参数点名查哪张表的哪个字段、哪个 stage、哪个 checkpoint
- 证据覆盖"已消失的现场":容器被引擎回收后,日志和死因仍有采集层留底
- 结论如实归因:AI 徽标就是 AI 给的,规则徽标就是规则给的;证据不足会明说,不臆造
诊断结果长什么样
点「智能诊断」后,平台会先自动采集这次失败相关的证据(日志、运行信息、引擎状态、血缘等,配了大模型的话由模型自主决定查哪些、查几次),再给出一张结果卡:分类标签 + 一句话结论 + 引擎徽标(AI/规则) + 根因 + 修复建议,连同可展开的「关键错误」「诊断过程」(每一步查了什么、拿到什么证据,供审计)一起呈现。下面两个例子分别来自 Spark 和 Flink 的真实触发失败。
示例一:Spark SQL 数据倾斜引发的 OOM
按 user_id 把每个用户的行为事件拼成一条摘要字符串(常见于风控/画像类报表),但 user_bot_9527 是异常刷量账号,事件数是普通用户的百万倍——拼接这条摘要时,负责这个 key 的 executor(申请了 512MB 内存)被真实打爆:

展开「诊断过程」能看到模型一共查了 6 步:运行信息、Spark pod 状态(已回收,如实报告查不到)、血缘写入表,以及两次 Spark REST 取失败 stage 详情——从中拿到「失败任务数=7」「executor 共 4 个(其中 1 个还活跃)、总 GC 耗时 29183ms」这些具体指标,这些数字后面被模型换算成"GC 耗时占运行总时长 32%",直接支撑了它的根因判断:

示例二:Flink 流作业 Checkpoint 持续失败
flink_checkpoint_fail_demo 是一个 datagen → Iceberg 的流作业,checkpoint 超时被故意设得比实际所需时间短得多,同时把"容忍失败次数"调到了接近无穷——数据流本身完全正常,但每一次 checkpoint 都会超时失败,是那种不崩溃、不重启、却在悄悄丢失容错能力的典型隐患:

展开「诊断过程」能看到模型查了 5 步,用的是和 Spark 完全不同的一套工具:先查 get_flink_exception 确认部署状态=RUNNING、JobManager 没报告 root-exception(数据流没崩,不臆造一个不存在的崩溃);再查 get_flink_runtime 拿到「checkpoint 完成=0 失败=16」「反压:各算子正常」这组关键指标;最后两次 engine-pod-logs 分别去拉 JobManager 和 TaskManager 的原始 pod 日志,从里面摘出了真实的 Checkpoint 14/15 has been notified as aborted 这类证据:

示例三:模型自己"点名查数",用采样坐实根因
有一类失败,光看报错猜不透:SQL 里的数据校验断言炸了,到底是数据真有问题,还是断言本身写错了?下面这个作业用 assert_true(amount > 1000000) 做入库前校验,运行期抛了异常。诊断过程中,模型在读完报错和 SQL 源码后,自己决定带参数去查这张表的这个字段——先调表采样分析拿到 amount 的实际取值(154.02、68.92,均远低于 100 万),再调表结构确认 amount decimal(10,2) 类型正常——于是结论不是含糊的"数据校验失败",而是明确的"断言阈值与真实数据不匹配,先探查取值范围再修阈值":
![诊断过程展开:诊断·get_table_data_distribution 带参数 table=iceberg_lake.site_demo_ws10.daily_sim_orders、fields=[amount],返回"字段 amount: null占比=0.0%, 高频值Top2=[154.02(1次), 68.92(1次)]";诊断·get_table_schema 返回分区键[dt]与字段列表 order_id long/amount decimal(10,2)/dt date;上方还有失败 stage 的 shuffle 堆栈与 executor GC 占比等证据](/screenshots/83-diagnose-sampling-drilldown.png)
这是"能深挖"的典型形态:采集工具不只是固定清单,模型可以指定表名和字段做采样分析、指定 stage 编号取全量 task 明细、指定 checkpoint 编号看逐算子耗时细分——像一个会顺着线索追问的工程师,而不是跑完固定检查单就交差。
证据面有多宽
按作业类型精准暴露(Spark 作业不会去调 Flink 的工具,反之亦然;没有容器的作业不会白查一轮容器):
- 通用:日志关键异常段(自动提炼,不喂噪声)、运行信息(申请资源/起止/退出码)、容器死因(含 OOMKilled;容器重启过也能翻出"上一世"的死因)、资源趋势(逐 pod 实测轨迹,判"渐进泄漏还是单点打爆")
- Spark 专属:失败 stage 与数据倾斜/磁盘溢写判定、SQL 执行计划(AQE 是否改写)、executor 内存分区峰值(定位 OOM 属于哪块内存)、指定 stage 的 task 级深挖
- Flink 专属:异常按种类归并(把"真因"从重启循环的症状和次生错误里拎出来)、checkpoint 细分耗时(瓶颈算子+同步/异步/对齐)、反压方向归因(被下游压还是正压上游)、异常历史时间线、RocksDB 状态后端指标
- 数据与代码:血缘(读了哪些表/写哪张表)、表结构、表数据采样分析、SQL/脚本源码与作业参数原文、Notebook 出错 cell 定位
- "已消失的现场":引擎删掉的 executor/TaskManager 容器,其日志仍能从平台采集层查到;pod 被回收前死因已先落库
不只调度作业:即席查询和 Notebook 也能诊断
日常点得最多的"跑一条 SQL"失败了,同样不用自己啃报错——结果区直接点「AI 诊断此错误」。下面这条查询把列名 amount 拼成了 amout,诊断不但把报错翻译成了人话,还给出可直接粘贴的修正 SQL:

Notebook 里交互式跑挂的 cell 也一样:平台能定位到出错的是哪个 cell、连同那段源码和内核日志一起诊断。
在对话里诊断,过程边跑边看
诊断也被 AI 助手「工小数」收编成对话里的一个工具:贴一个失败实例号就能触发。取证要跑十几秒到几十秒,这段时间不是白屏等待——气泡顶部的「回答过程实况」会把每一步边执行边展开:哪个工具正在跑、上一步拿到了什么证据,全程可见;答案生成后自动滚到开头:

对话中断也不浪费已完成的工作:如果诊断已经跑完、只是对话模型这一环出了问题,已完成的诊断结果会原样呈现并如实标注来源,不会重跑一遍昂贵的取证,更不会把 AI 的结论错标成"规则"。
稳当:兜底、去重、熔断
- 规则兜底,始终有结果:没配大模型密钥、或模型这次调用失败,自动切到规则诊断——同样采集全部证据,按预置规则匹配分类。深层归因还是模型强,但"有没有结果""结果对不对得上证据"这两条底线始终守得住。
- 重复点击秒回:短时间内对同一实例反复发起诊断,直接复用刚出炉的结果,不重复烧模型调用。
- 故障自动熔断:模型服务持续出错时自动熔断、直接走规则,恢复后自动探测切回;并发也有上限,多人同时用不会相互拖垮。
- 准确率有人管:内置一套取自真实失败案例的评测集,按轮次度量诊断准确率,改动回归跑评测,防止越改越差。
数据安全
诊断证据要送给大模型,送出去之前平台先做两件事:基础设施凭证(如对象存储密钥)一律脱敏;日志原文、SQL 报错这类"外部数据"打上显式边界标记,防止里面混入的指令文本被模型当真(提示注入防护)。合规要求更严的场景,还可以打开业务字面量掩码,把 SQL/日志里的字符串与长数字值遮掉、只留结构。
前端呈现
结果卡是一个可收起的组件,展开时依次是分类标签、一句话结论、根因、建议列表、可折叠的关键错误与诊断过程。入口有四处:运维监控的实例钻取右栏和流作业详情页(失败/运行中的实例显示按钮)、数据查询页的失败结果区、Notebook 的失败 cell、以及工小数对话。重新进入页面时会自动回显上次的诊断结果。
想看失败实例诊断在完整产品动线里长什么样,去产品巡览;在对话里触发诊断的完整体验,见智能问答。
回到核心能力总览 →