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-modelNodeStatus 类):

  • 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 命令记录和服务端记录的分析,暂时只做简单介绍。

参考

nwpc-oper/nwpc-workflow-log-model

nwpc-oper/nwpc-workflow-model