1. 概述
1.1 版本
FineDataLink 版本 | 功能变动 |
---|---|
1.9 | 日志新增:写入数据行数、更新数据行数 |
3.4 | 显示的具体日志中,将「中止」改为「终止」 |
4.0.1 | 任务运行日志优化,提供更准确的日志信息,降低用户排查问题的成本 |
4.1.1 | 4.1.1 及之后版本,支持调整业务日志输出级别,因此日志内容也做了优化:
|
4.2.9.1 | 日志中:
|
1.2 功能简介
定时任务运行后,将会产生运行日志,便于用户查看任务运行情况。如下图所示:
本文介绍在「日志」这个 Tab 页下,具体显示内容。
1.3 注意事项
一个定时任务中有多个流程,在执行后如果有一个流程执行失败,其他流程执行成功的话,整个定时任务的状态是失败的,但是其中的部分流程是执行成功的。
2. 用户需知
1)4.1.1 及之后版本,支持调整业务日志输出级别,因此日志内容也做了优化:
增加:实例等待运行日志的打印。
增加:INFO级别,打印更加详细的日志,包括参数值、执行脚本、API请求、API分页取数
优化:明确各条日志的等级,将日志级别打印到日志中。
读数类节点,统一增加删除数据的统计。
2)设置日志级别后(任务级别日志配置、全局日志配置),打印的日志说明如下表所示:
设置的日志级别 | 打印的日志级别 |
---|---|
INFO级别 | BASIC INFO ERROR WARN INFO |
WARN级别 | BASIC INFO ERROR WARN |
ERROR级别 | BASIC INFO ERROR |
3. 示例
定时任务的日志均采用下面的格式:
yyyy-mm-dd hh:mm:ss 任务状态\节点状态 [日志等级] 日志内容 [日志等级] 日志内容 yyyy-mm-dd hh:mm:ss 任务状态\节点状态 [日志等级] 日志内容 [日志等级] 日志内容 运行总览:执行成功 x,执行失败 y,终止执行 z,跳过执行 w 执行完毕,总计耗时:nms |
3.1 基础日志打印
基础日志展示的内容为任务运行/节点执行的状态,不受任务日志级别控制,不管哪个日志级别,都需要进行打印。
各级别的日志,都是套在基础日志的框架里的,比如 ERROR 级别的日志,是对应失败状态的日志补充。
3.1.1 常规基础日志打印
状态 | 打印日志 | 说明 |
---|---|---|
实例开始构建 | yyyy-mm-dd hh:min:ss 实例开始构建 | |
实例构建结果 | yyyy-mm-dd hh:min:ss 实例构建成功 yyyy-mm-dd hh:min:ss 实例构建失败 | 日志互斥,只能出现其中一条 |
实例等待运行 | yyyy-mm-dd hh:min:ss 实例正在排队 | |
实例开始运行 | yyyy-mm-dd hh:min:ss 实例开始运行 | |
节点开始执行 | yyyy-mm-dd hh:min:ss 开始执行:【节点Name】 yyyy-mm-dd hh:min:ss 跳过执行:【节点Name】 | 日志互斥,只能出现其中一条 |
节点执行结果 | yyyy-mm-dd hh:min:ss 执行成功:【节点Name】 yyyy-mm-dd hh:min:ss 执行失败:【节点Name】 yyyy-mm-dd hh:min:ss 终止执行:【节点Name】 | 日志互斥,只能出现其中一条 |
实例运行结果 | yyyy-mm-dd hh:min:ss 实例运行成功 yyyy-mm-dd hh:min:ss 实例运行失败 yyyy-mm-dd hh:min:ss 实例运行中断 |
3.1.2 循环容器基础日志打印
循环容器 的日志打印是整体逻辑,并非某条日志输出,因此无法定义日志等级。
对应的基础日志 | 日志格式 | 日志示例 |
---|---|---|
开始执行:【节点Name】 | 执行n次循环 (仅展示最近5次循环信息) 第1次执行: yyyy-mm-dd hh:mm:ss 描述 详情 第2次执行: yyyy-mm-dd hh:mm:ss 描述 详情 ...... 第n次执行: yyyy-mm-dd hh:mm:ss 描述 详情 执行完毕,总计耗时:ns | 2023-08-31 21:26:55 开始执行【循环容器】 执行20次循环 (仅展示最近5次循环信息) 第16次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[16] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[16] 第17次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[17] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[17] 第18次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[18] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[18] 第19次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[19] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[19] 第20次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[20] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[20] 执行完毕,总计耗时:5.0s |
3.1.3 失败重试基础日志打印
失败重试 的日志打印是整体逻辑,并非某条日志输出,因此无法定义日志等级。
对应的基础日志 | 日志格式 | 日志示例 |
---|---|---|
执行失败:【节点Name】 | 重新执行 (仅展示最近5次重试信息) 第1次重试: yyyy-mm-dd hh:mm:ss [日志等级] 描述 详情 yyyy-mm-dd hh:mm:ss [日志等级] 描述 ...... 第n次重试: yyyy-mm-dd hh:mm:ss [日志等级] 描述 详情 yyyy-mm-dd hh:mm:ss [日志等级] 描述 详情 等待第n+1次重试... | 等待首次重试: 等待第2次重试: |
3.1.4 集群环境下基础日志打印
对应的基础日志 | 日志格式 | 说明 | 日志示例 |
---|---|---|---|
实例开始构建 | yyyy-mm-dd hh:min:ss 实例开始构建 所在节点:节点的项目名称 | 2024-04-23 15:51:13 实例开始构建 所在节点:fanruan1 | |
节点开始执行 | yyyy-mm-dd hh:min:ss 开始执行:【节点Name】所在集群节点:节点的项目名称 yyyy-mm-dd hh:min:ss 跳过执行:【节点Name】 | 日志互斥,只能出现其中一条 | 2024-04-23 15:51:14 开始执行【SQL脚本】所在节点:fanruan1 |
4. BASIC INFO 日志
对应的基础日志 | 日志格式 | 日志示例 | 说明 |
---|---|---|---|
实例运行中断 | [BASIC INFO] 任务超时,中断运行 | 2023-08-31 19:14:09 实例运行中断 [BASIC INFO] 任务超时,中断运行 | |
开始执行:【节点Name】 | [BASIC INFO] - 启动时刻:yyyy-mm-dd hh:mm:ss - 实时读取速度: nB/s, n行/s - 实时写入速度: nB/s, n行/s - 累计写入行数: n行 - 累计更新行数: n行 - 累计删除行数: n行 - 写入脏数据行数: n行 正在执行【节点名称】... | 2023-08-31 19:45:26 开始执行【数据同步】 [BASIC INFO] - 启动时刻:2023-08-3119:45:26 - 实时读取速度:0B/s,0行/s - 实时写入速度:0B/s,0行/s - 累计写入行数:0行 - 累计更新行数:0行 - 累计删除行数:0行 - 写入脏数据行数:0行 正在执行【数据同步】.. | 仅在节点执行过程中打印,节点执行完毕时清除此日志 适用节点:
|
开始执行:【节点Name】 | [BASIC INFO] - 启动时刻:yyyy-mm-dd hh:mm:ss - 实时下载速度:nB/s - 实时上传速度:nB/s - 上传成功文件数:n个 正在执行【文件传输】... | 2023-08-31 19:45:26 开始执行【文件传输】 [BASIC INFO] - 启动时刻:2023-08-3119:45:26 - 实时下载速度:0B/s - 实时上传速度:0B/s - 上传成功文件数:0个 正在执行【文件传输】.. | 适用节点:文件传输 |
开始执行:【节点Name】 | [BASIC INFO] - SQL条数:x - 影响行数:y - 总耗时:zs | 2024-04-23 16:36:53 开始执行【SQL脚本】 [BASIC INFO] - SQL条数:4 - 影响行数:4 - 总耗时:0.016s 2024-04-23 17:17:23 执行成功【SQL脚本】 | 1)仅在执行成功后展示(信息由数据库返回给我们)如果未返回数据则显示信息未返回) 2)总耗时:指建立连接到获取返回数据的总时间,主要是数据库执行SQL的时间 3)适用节点:SQL脚本 |
执行成功:【节点Name】 | [BASIC INFO] - 启动时刻:yyyy-mm-dd hh:mm:ss - 结束时刻:yyyy-mm-dd hh:mm:ss - 平均流量:nB/s - 平均写入速度:n行/s - 读取数据行数:n行 - 写入数据行数:n行 - 更新数据行数:n行 - 删除数据行数:n行 - 写入脏数据行数:n行 - 耗时:ns 注:「写入数据行数」为直接写入的数据行数,不同数据库统计时有一定差异;比如有的数据库写入时覆盖写入的数据也会归到「写入数据行数」中 | 2023-08-31 20:03:33 节点执行成功【参数赋值】 [BASIC INFO] - 启动时刻:2023-08-31 20:03:32 - 结束时刻:2023-08-31 20:03:33 - 平均流量:871B/s - 平均写入速度:1行/s - 读取数据行数:20行 - 写入数据行数:1行 - 更新数据行数:0行 - 删除数据行数:0行 - 写入脏数据行数:0行 - 耗时:1.0s | 适用节点:
|
执行成功:【节点Name】 | [BASIC INFO] - 启动时刻:yyyy-mm-dd hh:mm:ss - 结束时刻:yyyy-mm-dd hh:mm:ss - 平均流量:nB/s - 下载文件个数:n个 - 上传文件个数:n个 - 耗时:ns | 2023-08-31 20:03:33 节点执行成功【文件传输】 [BASIC INFO] - 启动时刻:2023-08-31 20:03:32 - 结束时刻:2023-08-31 20:03:33 - 平均流量:871B/s - 下载文件个数:20个 - 上传文件个数:1个 - 耗时:1.0s | 适用节点: 文件传输 |
跳过执行:【节点Name】 | [BASIC INFO] 节点连线条件不满足 [BASIC INFO] 条件分支条件不满足 | 2023-08-31 22:07:48 跳过执行【虚拟节点】 [BASIC INFO] 条件分支条件不满足 |
5. ERROR 日志
日志级别设置为 ERROR、INFO、WARN 时,日志说明如下:
对应的基础日志 | 日志格式 | 日志示例 | 说明 |
---|---|---|---|
实例构建失败 | [ERROR] 异常节点:【节点Name】 具体错误信息 .... 异常节点:【节点Name】 具体错误信息 | 2023-08-31 19:09:44 任务构建失败 [ERROR] 异常节点:【数据转换】 [DB表输出]: 目标表为空 字段映射表为空 | ALL |
执行失败:【节点Name】 | [ERROR] [错误对象]:错误标题 - 描述 | 2023-08-31 19:19:27 执行失败【数据同步】 [ERROR] [数据来源]:数据连接异常 - DataBase[FRDemo] get column failed - [SQLITE_ERROR] SQL error or missing database (near "1": syntax error) | 通用错误 |
执行失败:【节点Name】 | [ERROR] 脏数据条数检查不通过,限制是[x]条,但实际上捕获了[y]条. 错误定位:写入目的表[Table_name]时遇到了脏数据,数据无法正常写入,请检查并作出修改. 异常情况:具体错误信息 建议排查的目标字段: {字段序号:1,字段名:a1,数据类型:INT} {字段序号:2,字段名:a2,数据类型:VARCHAR} 错误记录: {字节数:1,字段序号:1,字段值:value1,数据类型:STRING} {字节数:1,字段序号:2,字段值:value2,数据类型:STRING} | 2023-08-31 19:19:27 执行失败【数据同步】 [ERROR] 脏数据条数检查不通过, 限制是[20]条, 但实际上捕获了[700]条 错误定位: 写入[SALE_BSEG]目的表时遇到了脏数据,数据无法正第写入,请做出检查井修改 异常情况: ORA-01653:表 BLLODS_TEST.SALE_BSEG 无法通过 8192(在表空间 BI_ODS_TEST 中)扩展 建议排查的目标字段: {字段序号:295, 字段名: PENDAYS, 数据类型: NUMBER} {字段序号:333, 字段名: CURRENT_TIMESTAMP, 数据类型:TIMESTAMP} 错误记录: {字节数:3, 字段序号:1, 字段值:"800",数据类型:STRING} {字节数:4, 字段序号:2, 字段值:"1001”,数据类型:STRING | 仅在出现脏数据时打印 仅打印最近一条脏数据,脏数据明细可以在统计里导出或去fanruan.log中查看 |
开始执行:【节点Name】 | [ERROR] [错误对象]:错误标题 - 描述 报错循环及参数: 第x次执行-参数[para]:xxx 第y次执行-参数[para]:yyy | 2023-08-31 21:26:55 开始执行【循环容器】 执行20次循环 (仅展示最近5次循环信息) 第16次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[16] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[16] 第17次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[17] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[17] 第18次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[18] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[18] 第19次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[19] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[19] 第20次执行: 2023-08-31 21:26:56 [BASIC INFO] 开始执行【SQL脚本1】[20] 2023-08-31 21:26:56 [BASIC INFO] 执行成功【SQL脚本1】[20] [ERROR] [DB表输出2]: DB配置异常-The field mapping [ctr_id] on the writer side was not found in the source field 报错循环及参数: 第5次执行-参数[para]:5 第6次执行-参数[para]:6 执行完毕,总计耗时:5.0s 2023-08-31 21:26:56 执行失败【循环容器】 | 针对循环容器中的报错进行汇总展示,在执行失败之前进行打印 涉及节点:循环容器 |
6. WARN 日志
日志级别设置为 WARN、INFO 时,日志说明如下:
对应的基础日志 | 日志格式 | 日志示例 | 说明 |
---|---|---|---|
执行成功:【节点Name】 | [WARN] 检查发现[y]条脏数据 | 2023-08-31 20:03:33 节点执行成功【参数赋值】 [BASIC INFO] - 启动时刻:2023-08-31 20:03:32 - 结束时刻:2023-08-31 20:03:33 - 平均流量:871B/s - 平均写入速度:18行/s - 读取数据行数:20行 - 写入数据行数:18行 - 更新数据行数:0行 - 删除数据行数:0行 - 写入脏数据行数:2行 - 耗时:1.0s [WARN] 检查发现[2]条脏数据 建议排查的目标字段: {字段序号:1,字段名:a1,数据类型:INT} {字段序号:2,字段名:a2,数据类型:VARCHAR} 错误记录: {字节数:1,字段序号:1,字段值:value1,数据类型:STRING} {字节数:1,字段序号:2,字段值:value2,数据类型:STRING} | 适用节点:
仅打印最近一条脏数据,脏数据明细可以在统计里导出或去fanruan.log中查看 |
开始执行:【节点Name】 | - | [WARN] [数据去向]: 检测到源表[XXX]结构变化 - 新增字段:COL1 - 删除字段:COL2 - 修改字段:COL3,旧类型:varchar(100),新类型:varchar(200) | 适用节点:数据同步 |
开始执行:【节点Name】 | [WARN] [算子名称]: 语句执行时间过长,请查看 正在执行语句:TRUNCATE XXX | 仅在执行时间超过30s时打印 适用节点:
|
7. INFO 日志
任务日志等级为 INFO 时,打印 INFO 级别的日志。
对应的基础日志 | 日志格式 | 说明 |
---|---|---|
开始执行:【节点Name】 | [INFO] [算子Name]: --若不包含算子,则不打印算子Name 使用参数: - 参数[参数名1]:值1 - 参数[参数名2]:值2 |
|
开始执行:【节点Name】 | [INFO] [算子Name]: --若不包含算子,则不打印算子Name 执行脚本: 「实际执行的命令语句」 输出信息:--若无内容,则不打印,shell脚本、Bat脚本、Python脚本可能会有输出 「脚本执行后输出的信息」 |
注:以上涉及到的节点和算子中,「选表数据过滤语句」为 4.2.9.1 及之后版本新增内容 |
开始执行:【节点Name】 | [INFO] [算子Name]: --若不包含算子,则不打印算子Name 响应时长:xx 秒 请求信息: - 证书地址:/xx/xx/test.CRT --若未配置自签名证书,则不打印 - Request: POST http://www.fanruan.com/testapi/ - Headers: Content-Type: application/json - Body: {"key":"Im a JSON"} 服务端响应: - HttpStatusCode:200 - Headers: Content-Type: application/json |
|
开始执行:【节点Name】 | [INFO] 调用结果: 作业项编号 : 24 错误 : 0 读取行 : 0 写入行 : 0 输入 : 0 输出行 : 0 更新行 : 0 Lines rejected : 0 Script exist status : 0 结果 : true | 涉及节点:kettle调用 |
开始执行:【节点Name】 | [INFO] [算子Name]:--若不包含算子,则不打印算子Name 响应时长:xx 秒 请求信息: | 打印 SAP 请求的详细内容至日志
|
8. 排查信息日志
针对排查问题的场景,为了提升排查效率,新增「Job」信息,排查信息以节点为单位,内容范围是固定节点定位后端日志的信息。
对应的基础日志 | 日志格式 | 日志示例 | 备注 |
---|---|---|---|
开始执行:【节点Name】 | Job[xxx] | Job[12] | 定义:这里的Job[xx]不是任务配置的JobId,而是调度赋予这个节点的一个编号,在工程不重启的情况下,一个节点每次运行都使用同一个编号。目前 日志 中不会记录 Job 信息,仅在 画布节点中的 Tooltip 进行展示。 适用节点:
|