ecFlow笔记:ecFlow日志分类
本文属于介绍 NWPC 工作流日志工具的系列文章。
上一篇文章《ecFlow笔记:ecFlow日志简介》介绍 ecFlow 日志条目的格式和含义,并提到日志条目中的 command 字段用于区分不同类型的日志。
本文介绍 ecFlow 日志中常见的条目类型。
概述
下面 4 行日志条目分别代表 4 种常见的日志类型。
MSG:[12:20:30 15.6.2020] svr:check_pt in 0 seconds
MSG:[12:20:32 15.6.2020] --sync_full=0 :monitor
MSG:[12:20:39 15.6.2020] chd:init /grapes_meso_3km_post/06/upload/tograph/meso_area_radar/radar_reflectivity/plot_hour_021
LOG:[12:20:39 15.6.2020] active: /grapes_meso_3km_post/06/upload/tograph/meso_area_radar/radar_reflectivity/plot_hour_021
- 第 1 行:服务端记录,表示 ecFlow 在进行 checkpoint 归档
- 第 2 行:client 命令记录,表示 monitor 用户与 ecFlow 服务进行同步
- 第 3 行:child 命令记录:表示任务节点执行
ecflow_client --init
命令 - 第 4 行:状态变化记录:表示任务节点运行状态变为 active
下面分别介绍这几种日志类型。
状态变化记录
状态变化记录(StatusLogRecord
)是最常用的日志条目,记录 ecFlow 中每个节点的状态变化。
节点状态主要包括(请参考 nwpc-workflow-model 的 NodeStatus 类):
queued
:排队submitted
:提交active
:运行complete
:完成aborted
:出错suspended
:挂起
状态变化记录的 command 字段就是上面的状态
LOG:[13:34:07 8.1.2020] complete: /grapes_reps_v3_2/06/control/pre_data/psi
LOG:[13:34:07 8.1.2020] queued: /grapes_reps_v3_2/06/control
LOG:[17:38:08 28.1.2020] submitted: /grapes_geps_v1_2/12/members/pair_06/mem02/geps2tigge/geps2tigge_054 job_size:31866
状态变化通常由任务节点(Task)的变化引起,容器节点(Family 和 Suite)的状态根据所有子节点的状态计算得到。 所以,单个任务节点的状态变化往往会改变一系列父节点的状态。例如:
LOG:[12:19:55 15.6.2020] active: /grapes_meso_3km_post/06/upload/tograph/meso_area_radar/radar_reflectivity/plot_hour_018
LOG:[12:19:55 15.6.2020] active: /grapes_meso_3km_post/06/upload/tograph/meso_area_radar/radar_reflectivity
LOG:[12:19:55 15.6.2020] active: /grapes_meso_3km_post/06/upload/tograph/meso_area_radar
LOG:[12:19:55 15.6.2020] active: /grapes_meso_3km_post/06/upload/tograph
LOG:[12:19:55 15.6.2020] active: /grapes_meso_3km_post/06/upload
状态变化记录是分析系统运行状态最核心的数据,NWPC 工作流日志工具提供的分析工具大多仅使用状态变化记录。
child 命令记录
ecFlow 提供 ecflow_client
命令用于与 ecFlow 服务进行通讯。
child 命令是 ecflow_client
提供的一组子命令,用于 ecFlow 任务将运行状态告知 ecFlow 服务。
child 命令包含两种类型:
- 修改节点状态:init,complete,abort
- 修改节点属性:event,meter,label
下面分别介绍上述 child 命令生成的日志记录(ChildLogRecord
)。
init
init
用于告知 ecFlow 服务任务已经开始运行。
命令行调用如下:
ecflow_client --init=$RID
其中 $RID
是 slurm 作业号或任务进程号。
init
日志如下所示:
MSG:[13:23:47 14.5.2020] chd:init /obs_rafs/09/pre_data/radar/SASB/9751/search
LOG:[13:23:47 14.5.2020] active: /obs_rafs/09/pre_data/radar/SASB/9751/search
complete
complete
用于告知 ecFlow 服务任务正常结束。
命令调用如下:
ecflow_client --complete
complete
日志如下所示:
MSG:[05:03:31 9.6.2020] chd:complete /grapes_tym/grapes_d01/00/prods/grib2/grib2_083
LOG:[05:03:31 9.6.2020] complete: /grapes_tym/grapes_d01/00/prods/grib2/grib2_083
abort
abort
用于告知 ecFlow 服务任务运行出错。
命令调用如下:
ecflow_client --abort=trap
abort
日志如下所示:
MSG:[04:32:04 12.6.2020] chd:abort /grapes_meso_3km_v4_4/00/pre_data/obs_get/sat_get trap
LOG:[04:32:04 12.6.2020] aborted: /grapes_meso_3km_v4_4/00/pre_data/obs_get/sat_get try-no: 1 reason: trap
event
event
用于设置节点的 event。
命令调用如下:
ecflow_client --event unavailable
event
日志如下所示:
MSG:[13:23:49 14.5.2020] chd:event unavailable /obs_rafs/09/pre_data/radar/SASB/9311/read
meter
meter
用于设置节点某个 meter 的值。
命令调用如下:
ecflow_client --meter=forecastHours 10
meter
日志如下所示:
MSG:[04:32:30 12.6.2020] chd:meter forecastHours 10 /grapes_tym/grapes_d01/00/model/grapes_monitor
label
label
用于设置节点某个 label 的值。
命令调用如下:
ecflow_client --label info 'checking for 066...'
label
日志如下所示:
MSG:[13:56:02 14.5.2020] chd:label info 'checking for 066...' /gmf_grapes_gfs_post/06/initial_togrib2
client 命令记录
client 命令记录(ClientLogRecord
)用于记录非 child 命令的 ecflow_client
操作。
例如下面几个示例:
强制设为完成
MSG:[06:35:57 12.1.2020] --force=complete /grapes_geps_v1_2/00/members/pair_05/mem02/model/forecast :nwp
重新排队
MSG:[07:50:49 31.1.2020] --requeue force /grapes_reps_v3_2/00/control/model/fcst_monitor :nwp_qu
杀掉作业
MSG:[16:52:50 8.2.2020] --kill /meso_post/12/uploadAll/upload_togrib2/027/upload_togrib2_027 :nwp
加载系统定义
MSG:[03:14:32 19.1.2020] --load=gmf_grapes_gfs_post.def :nwp_pd
替换系统定义
MSG:[02:54:48 13.1.2020] --replace=/gmf_grapes_gfs_post gmf_grapes_gfs_post.def parent :nwp_pd
还有更多的命令,请查看 ecflow_client --help
说明。
client 命令记录中最后一个字段是执行命令的用户。
服务端记录
服务端记录(ServerLogRecord
)主要是由 ecFlow 服务自身执行的操作。
最常见的记录是服务执行 checkpoint 归档。
MSG:[05:31:22 19.5.2020] svr:check_pt in 0 seconds
笔者尚未研究对 client 命令记录和服务端记录的分析,暂时只做简单介绍。