DataWorks支持通过大模型的能力来进行任务诊断,其以任务实例 ID 为入口,通过对话输出一句话根因、关键证据和可执行的处置建议,用于定位调度任务失败、未运行、等待资源或明显变慢等异常,面向数据开发、运维和值班人员。诊断过程只读取数据,输出报告和建议,重跑、置成功等处置动作由人工确认后触发。
适用场景
当调度任务异常时,运维值班人员通常需要解决三个核心问题:问题在哪,证据是什么,如何处理。传统的排查方式——逐个查看实例、检索日志、比对依赖——在面对业务催促时会面临较大的压力。

AI助理服务的任务诊断功能,正是为了自动回答这三个问题而生。它以一个或多个任务实例 ID 为入口,自动串联起调度状态、上下游依赖、运行日志、历史记录及引擎证据,最终提炼出一份精准的诊断报告,其中包含:
根因结论:问题发生在哪一层,以及当前能够确认的原因。
关键证据:支持结论的日志、依赖、变更、资源或引擎信息。
处置建议:与根因直接对应、能够执行的动作。
结论边界:缺失哪些信息,以及会影响哪部分判断。
安全可控:整个诊断过程均为只读,不会对您的系统做任何修改。所有“重跑”、“置成功”等处置动作,都必须在您人工确认后才会触发。
前提条件
Data Agent和AI助理服务均可支持任务诊断,按实际使用的服务确认前提条件。
使用 Data Agent:
已创建并启动数据运维 Data Agent 实例。
如需在 IM 端使用,需完成对应平台的集成配置,请参见 Data Agent 集成钉钉、Data Agent 集成飞书 或 Data Agent 集成企业微信。
使用 AI 助理服务:
诊断流程
运维中心的 Data Agent 与 AI 助理服务都提供任务诊断能力,诊断逻辑与报告结构一致,两者均支持 Web 端和 IM 端对话。任何一种方式,使用流程和报告解读方式均类似。
发起诊断
诊断有对话式和页面版两条路径。页面版在运维中心实例列表单击 运行诊断,按固定步骤展示单个实例的结论,详见 任务运行诊断 与 智能诊断。对话式支持描述现象、跨上下游追溯和多实例归因,使用方式如下。
Web 端入口:
Data Agent:登录 DataWorks 控制台,选择目标地域后进入运维中心,在左侧导航栏单击 AI 工作台 > Data Agent,并在会话中选择目标工作空间。
AI 助理服务:登录DataWorks 控制台,选择目标地域,在左侧导航栏单击 AI助理服务,找到目标实例后单击操作列的 对话。
IM 端入口:在已配置的 IM 群聊中向对应机器人发送消息。IM 渠道与账号映射的配置方式请参见 AI 助理实战:配置 IM 端账号映射。
提问时提供任务实例 ID,并说明观察到的现象。现象决定诊断优先检查哪一层证据,例如“首次失败、重跑成功”“一直等待资源”或“今天明显变慢”。
必须使用任务实例 ID(数字)。任务 ID、节点 ID、DAG ID、补数据请求 ID 均无法定位到具体运行记录,ID 类型用错是诊断无法开展的最常见原因。
提问示例:
帮我诊断这个实例为什么失败:
实例 ID这个实例一直没有运行,帮我看看卡在哪里:
实例 ID这个实例等待资源很久,是否需要扩容:
实例 ID这个任务今天比平时慢很多,帮我分析一下:
实例 ID这批实例同时异常,帮我找共同原因:
实例 ID 列表
1~2 个实例逐个诊断;3 个及以上先做批量诊断识别共性问题,再对重点实例单独深入诊断。
提交后以对话形式返回诊断报告,内容构成与阅读方法参见下文「阅读诊断结果」
阅读诊断结果
报告固定包含四段内容:
诊断结论:任务名与括号中的当前状态,作为报告标题。
根因:一句话说明问题发生在哪一层,以及当前能够确认的原因。
关键证据:支持该结论的日志行号、错误码、原始报错、依赖状态、变更记录或指标数值,构成可复核的证据链。
建议:与根因直接对应、能够执行的动作,按优先级排列。
另有两段按需出现:与主根因相互独立的问题列在同时发现中,不并入根因;证据缺口与结论适用范围以灰色文字附在报告末尾,说明哪些信息未能采集以及是否影响当前判断。
根据报告内容,进行根因诊断:
阅读顺序:先查看根因,再核对关键证据,最后参考 处理建议。
根因原则:报告仅呈现能直接解释当前实例状态的主根因。当证据不足时,会明确指出当前已确认的范围,避免基于零散信息进行推测。常见的根因现象定位,可参见按现象定位根因。
修复操作
处置前,需区分报告中的三类内容:已确认的问题、可能原因与缺失信息。对依据已确认事实执行操作,并对可能原因和缺失信息进行进一步确认。
明确信息后,对失败的实例进行操作,常见的操作指令如下:
操作目标 | 指令示例 |
重跑实例 |
|
调整资源组并发 |
|
深入诊断DI实例 |
|
检查表是否存在 |
|
对于写操作指令(如重跑实例),系统在执行前会展示实例的基础信息,并等待用户确认。
报告的“处理建议”部分也可能主动询问是否需要代为执行相关操作。
按现象定位根因
报告未给出确定结论,或需要了解某类现象的归因逻辑时,按下表定位到对应小节。先判断问题所处阶段(等待时间、等待资源、执行中失败、执行完成但变慢),再查看对应层面的证据。各场景的重点回答与诊断证据如下:
现象 | 重点回答 | 诊断依据的证据 |
任务未运行 | 等待时间、暂停冻结,还是上游阻塞 | 实例状态与调度属性、上游实例状态、历史启动趋势、告警规则 |
等待资源 | 并发限制还是容量不足,是否需要扩容 | 资源组信息与水位趋势、历史平均等待资源时长、资源组 CU/Slot 指标 |
数据集成失败 | 读取端、写入端、字段、脏数据或网络问题 | 数据集成任务运行日志解析结果与作业详情入口 |
Spark 失败或变慢 | 运行过程中哪一环出现异常 | 任务执行日志、容器事件与容器详情、CPU/内存/网络/磁盘指标 |
数据质量(DQC)校验异常 | 规则未通过,还是校验没有执行成功 | 实例关联的数据质量规则配置与状态、失败分析中对规则配置的检查 |
MaxCompute 失败或变慢 | 调度侧根因与作业执行详情 | 调度状态、任务运行日志分析、执行链路证据 |
多实例同时异常 | 共性问题、影响范围和优先处理实例 | 工作空间维度的慢任务、失败任务、未运行任务和告警任务清单,按节点分组抽样后归纳共性 |
各场景的判断顺序、结论示例与易错点如下。
任务未运行
适用于分析处于未运行、等待定时、暂停或等待上游状态的实例。
诊断目标
准确识别实例未开始运行的原因,并将其与代码、资源等运行期失败区分开。诊断逻辑按以下顺序执行:
检查定时时间
检查冻结或暂停状态
检查上游依赖,若发现上游存在失败链,系统将向上追溯,直至定位到最早需要处理的异常节点。
诊断示例:定位上游失败链
当前实例未运行,直接阻塞来自上游实例A。进一步追溯发现,实例B是该依赖链中最早的失败节点。建议:优先处理实例B。待其成功后,下游实例将自动恢复调度。
常见诊断结论与处理方式
结论
含义
处理方式
等待定时
尚未到触发时间,不属于运行失败
核对业务日期与定时时间,无需重跑
暂停或冻结
实例未真正执行,不判断 SQL 或引擎根因
确认是否符合预期;需要恢复时先解除暂停或冻结
等待上游
指出直接阻塞对象;存在失败链时定位到最早的异常节点
先处理失败链最上游的根因实例,不逐个重跑下游
信息不足
仅能确认实例未运行
按报告说明补充缺失的判断依据后重新诊断
常见误区:未运行不等于运行失败,处于等待时间、暂停或冻结状态的实例并未真正执行,不应归因到代码、资源或引擎。上游存在失败链时,只需处理链路最上游的根因实例,不要逐个重跑下游。
等待资源
适用于实例长时间处于等待资源状态的场景。
诊断目标
准确区分实例排队的原因是并发限制还是资源容量不足,并判断是否需要扩容。诊断逻辑如下:
首先检查任务自身或其所属工作流的 最大实例数并发限制。
若未达到并发限制,则进一步分析资源组在实例等待期间的容量瓶颈,综合判断 资源组CU水位、调度并发、排队任务数 及配额。
诊断示例
结论:资源组的调度并发已达到上限,但在实例等待期间,计算单元(CU)平均水位较低。建议:瓶颈在于调度能力而非计算能力。应优先评估并适当调高资源组的调度并发上限,而不是直接扩容计算资源。
常见诊断结论
结论
含义
处理方式
最大实例数限制
瓶颈来自任务或工作流的并发配置,与资源组容量无关
调整任务或工作流的最大并发实例数
调度并发达到上限
调度并发满载,与 CU 水位高低无关
评估并放宽调度并发上限
持续容量不足
等待窗口内持续高水位并伴随排队
具备扩容依据,按业务时效要求决定是否扩容
证据不足
指标缺失或等待窗口过短
补充观测窗口后重新诊断,不据此扩容
扩容决策不应仅依赖单一指标(如单个时间点的资源水位或总等待时长)。
调高并发、扩容或迁移资源组均为变更操作,执行前必须充分评估其对线上任务的影响。
常见误区:
CU 水位低也可能排队,瓶颈可能在调度并发而非计算容量,不应仅凭“等待资源”状态判定需要扩容。
单个时间点的水位、单一计算资源指标或总等待时长,都不足以单独支撑扩容结论。只有等待窗口内持续高水位并伴有排队时,扩容才有较强依据。
是否扩容属于处置建议,需要结合业务时效要求由人工决定。诊断不会自动调整并发或资源规格。
数据集成失败
适用于分析离线同步任务的失败原因,包括当前失败或历史失败。诊断过程结合了DataWorks调度层与数据集成引擎层的信息,进行联合分析。
诊断逻辑
调度层分析:首先检查实例状态、上游依赖、运行历史和原始日志。
数据集成引擎层分析:若任务已进入引擎执行,则进一步分析Reader(读取端)、Writer(写入端)、字段映射类型、脏数据策略、数据量及性能证据。
对于重跑成功但需要分析历史失败的场景,诊断将优先定位并分析对应的历史失败日志。
典型失败场景及处理
失败模式
现象
处理方式
字段类型不兼容
Reader 已读取数据,Writer 写入时源端字符串无法转换为目标数值类型,记录全部成为脏数据,而允许的脏数据条数为 0
修正字段映射、目标字段类型或转换规则,再重新运行验证
源端连接超时
Reader 初始化阶段连续连接超时,多次重试后仍未读取到数据
检查资源组到数据源的连通性、白名单、安全组、地址和端口配置
常见误区:
不要把调高脏数据阈值作为默认修复手段,只有业务明确允许丢弃异常记录时才调整容忍策略。
传输记录为 0 可能由连接、读取或任务初始化等多种原因造成,需要结合原始报错判断。
若存在数据源连通性问题时,在连通性恢复前继续重跑通常无法自愈。
Spark 失败或变慢
适用于分析DataWorks中Spark任务的失败或性能问题。诊断过程会深入Spark应用内部,定位Driver、Stage或Executor的根因。
诊断逻辑
失败任务:优先定位Driver或Stage的根本性失败原因(如编译错误、资源溢出),而不是分析任务停止、清理等次要日志。
慢任务:重点分析长尾Task、数据倾斜、Executor丢失等性能问题。
诊断示例
任务已经进入 Spark 引擎,失败发生在 SQL 分析阶段。Driver 明确提示目标表不存在,因此尚未生成 Job 或 Stage。建议检查表名、项目空间和访问权限后重新运行。
或:
未发现 Driver 失败,但某个 Stage 中少量 Task 耗时明显高于其他 Task,存在长尾特征。建议检查数据分布、分区规模和并行度配置。
典型场景及分析
结论
含义
处理方式
Driver 明确失败
失败发生在 SQL 分析阶段,尚未生成 Job 或 Stage
按 Driver 报错检查表名、项目空间和访问权限
Stage 存在 Task 长尾
未发现 Driver 失败,但某个 Stage 中少量 Task 耗时明显高于其他 Task
检查数据分布、分区规模和并行度配置
常见误区:
Job 与 Stage 为空不代表没有证据。Driver 在 SQL 分析阶段失败时,尚未生成计算阶段本身就是阶段证据。
Driver、Executor 的规格表示配置,不等同于实时 CPU 或内存使用率。
变慢的判断需要和历史平均运行时长对照,单次运行时长本身不构成结论。
Spark 作业成功但调度实例失败时,继续检查调度后处理或数据质量环节。
数据质量(DQC)校验异常
适用于分析DataWorks数据质量(DQC)监控规则的执行结果。
诊断逻辑
诊断的首要目标是区分 “规则执行失败” 与 “规则校验未通过”。
首先,判断规则是否成功执行。
检查是否存在分区不存在、数据源无法访问、SQL无法生成等 执行失败 问题。若存在,诊断到此为止,结论为执行失败。
其次,若规则成功执行,则判断校验结果。
分析规则是否 未通过,即数据出现了重复、空值、波动等不符合预期的现象。
系统会优先输出已确认的事实。仅当证据不足或用户明确要求时,才会进一步分析“为什么”数据不符合规则(如追溯上下游、代码变更等)。
典型场景及分析
情况
含义
处理方式
规则正常执行但未通过
确认存在重复、空值或波动等异常现象
按规则指向的字段与分区核查数据
校验执行失败
分区不存在、数据源不可解析或查询 SQL 无法生成,不能解释为数据不符合规则
先排除执行障碍(如确认上游已产出分区),再重新运行校验
常见误区:
规则未通过首先说明「发生了什么」,不一定说明「为什么发生」。
只有日志明确证明 SQL 执行失败时,才把相应 SQL 标记为失败 SQL。
深入分析得到的可能原因会标明可信程度,并与已确认的规则结果或执行错误分开呈现。
「近期没有代码变更」只能排除变更引入问题,不能证明既有代码没有问题。
MaxCompute 失败或变慢
适用于分析MaxCompute(ODPS)任务的失败或性能问题。诊断过程结合了DataWorks调度层信息与MaxCompute引擎层LogView详情。
诊断逻辑
调度层分析:首先分析实例状态与运行日志,获取初步结论,如SQL错误、权限问题、变量替换失败等。
引擎层分析 (LogView):然后,通过匹配的LogView深入引擎层,补充失败阶段、执行时间线、任务分布等证据,用于验证或深化调度层结论。
原则:调度层已明确的结论(如权限、分区错误)优先级更高。LogView详情用于补充和验证,不会覆盖已有结论。
诊断示例
调度日志已经确认分区值非法,错误码为
ODPS-0130071,变量${bizdate}` 未替换为合法分区值。引擎信息进一步确认作业在完整计算阶段前失败。建议检查调度参数赋值和分区表达式后重新运行。典型场景及分析
结论
含义
处理方式
调度侧已确认的错误
SQL、变量替换、权限、表或分区错误,引擎侧证据仅用于补充失败阶段
按报错修正配置或代码后重新运行
数据倾斜、长尾、资源等待或热点算子
LogView 中存在明确的执行时间和任务分布证据
依据 LogView 的执行时间线与任务分布定位具体阶段
运行正常,无性能问题
各项性能指标均无异常特征
无需优化
关键原则与能力边界
无有效LogView:若无法获取匹配的LogView,报告将仅返回调度层结论,并说明分析的局限性。
多个Job:单次诊断聚焦于日志中最后一个作业。若存在更早的作业,报告会提示未分析的数量。
数据质量优先:若实例失败的直接原因是数据质量(DQC)校验不通过,诊断将优先展示DQC结论,避免信息冲突。
权限限制:LogView的访问受限于执行诊断的账号权限及作业自身的访问策略。
慢作业判断原则:
只有 LogView 中存在明确的执行时间和任务分布证据时,才判断数据倾斜、长尾、资源等待或热点算子。总耗时高、卡 99% 或失败错误码都不能单独证明性能根因。
多实例同时异常
适用于分析同一业务流程或时间窗口内出现的多个相关异常实例。
诊断目标
快速分析一批实例,将相似问题归类,并识别出需要优先处理的根因实例。诊断报告将汇总以下信息:
影响范围:受影响的实例状态与数量。
根因实例:建议优先处理的上游根因节点。
问题分组:按相似现象对实例进行分组。
诊断示例
某工作流中的 3 个下游实例同时未运行。批量诊断还原出连续依赖链:查询节点被汇总节点阻塞,汇总节点又被上游加工节点阻塞,最终收敛到最上游待处理实例。
本批次 3 个实例均未开始运行,共同现象是上游依赖链尚未完成。建议优先处理依赖链最上游的异常实例,无需分别重跑每个下游节点。
处理建议
优先使用批量诊断:当同一业务流程或时间窗口出现多个相关失败时,应首先使用批量诊断。
先处理共性根因:优先处理报告中识别出的根因实例,然后观察下游是否自动恢复。
区分现象与根因:被归入同一组仅表示 现象相似,不保证其 根因完全相同。
结合单实例深诊:对于关键实例,或在处理完共性问题后仍未解决的个例,应再进行单实例诊断以获取完整的运行证据。
常见误区:
被归入同一组只表示现象相似,不代表所有实例一定具有完全相同的原因,也不能把相似错误指纹直接等同于相同根因。批量诊断会聚焦具有代表性的任务,需要逐实例完整证据时,再对重点实例单独深入诊断。
能力边界
任务诊断是只读分析,不会自动修改任务代码或调度配置。重跑实例、置成功等写操作属于独立能力,执行前会先展示任务实例的基础信息,并在收到明确确认后才执行。任务代码和数据质量规则配置需要到对应的 DataWorks 页面修改。
诊断结果的完整程度受可获取证据的限制:
上游追溯最多向上 3 层,超出后报告会说明追溯已达上限。
日志较长时,结构化诊断证据可能进行采样。发生采样时,报告会说明证据范围;需要进一步确认时,可结合完整日志继续分析。
部分任务可以进一步获取计算引擎信息;暂时无法获取时,仍会正常返回已经确认的调度诊断结果。
引擎侧异步诊断未在预期时间内完成时,报告会说明诊断尚未返回,可稍后凭诊断标识再次查询。
MaxCompute 执行详情依赖运行日志中可访问且与当前作业匹配的 LogView;无法获取时,报告仍返回调度侧结论并说明信息范围。
日志数据源或访问凭证不可用时,报告不会声称已分析过这些日志,而是标明该部分证据缺失。
诊断结果用于定位和决策,不替代变更审批以及修复后的重新运行验证。重跑、置成功、调高并发、扩容或迁移等动作在确认根因后再执行,避免掩盖问题。
常见问题
Q:提示无法定位到任务实例,怎么处理?
A:最常见的原因是 ID 类型用错。诊断只接受任务实例 ID,任务 ID、节点 ID、DAG ID、补数据请求 ID 都无法定位到具体运行记录。任务实例 ID 可在运维中心的实例列表或实例详情页获取。ID 确认无误时,再检查会话中选择的工作空间是否为该实例所属工作空间。
Q:报告说引擎侧信息无法获取,是权限问题吗?
A:不一定。可能是任务类型不在支持获取引擎详情的范围内,也可能是引擎侧异步诊断未在预期时间内返回,或日志数据源与访问凭证不可用。报告会说明属于哪一种,并保留已经确认的调度侧结论。属于异步未返回时,凭报告中的诊断标识稍后再次查询即可。
Q:同一个实例两次诊断的结论不一致,为什么?
A:诊断基于提问时可获取的证据得出结论,而上游状态、资源组水位、引擎侧详情等证据会随时间变化。例如上游完成后重新诊断,原先的“等待上游”结论就不再成立。建议以最新一次诊断为准,并关注报告中的结论边界部分。
Q:报告提示上游追溯已达上限,下一步怎么做?
A:上游追溯最多向上 3 层。达到上限说明阻塞链路较长,报告会给出当前已定位到的最上游实例。可以以该实例为新的起点再发起一次诊断,继续向上收敛。
Q:日志很长时,中间部分的报错会被遗漏吗?
A:有可能。日志超过 500 行时只分析首末各 200 行。已知关键报错位于日志中段时,在提问时直接补充该报错信息,作为现象描述的一部分。
Q:任务诊断能否直接重跑实例或修改代码?
A:不能。诊断只做只读分析。重跑实例与置成功属于独立能力,执行前会展示任务实例的基础信息并等待明确确认。任务代码和数据质量规则配置需要到对应的 DataWorks 页面修改。