ecFlow笔记:ecFlow日志简介

目录

本文属于介绍 NWPC 工作流日志工具的系列文章。

本文主要对 ecFlow 的日志进行简要介绍。

背景

NWPC/CMA 在 2018 年将数值预报业务系统从 IBM 迁移到 CMA-PI 的同时,将原有的工作流软件 SMS 升级为 ecFlow。 笔者在使用 SMS 的期间就已经开发 SMS 日志分析工具,并完成单位的青年基金课题。在切换到 ecFlow 后持续升级该工具,形成一系列正在开发中的 ecFlow 日志工具:

nwpc-oper/nwpc-workflow-log-model

ecFlow 日志模型

nwpc-oper/nwpc-workflow-log-collector

ecFlow 日志收集工具

nwpc-oper/nwpc-workflow-log-tool

ecFlow 日志分析工具

nwpc-oper/nwpc-workflow-log-processor

ecFlow 日志批量处理工具

NWPC 工作流日志工具正在升级开发中,笔者会持续修改历史代码。

介绍

ecFlow 的日志文件包含 ecFlow 服务的所有操作,并显示诸如 halt,shutdown 等信息。 如下所示:

MSG:[13:09:20 14.5.2020] chd:init /gmf_grapes_gfs_v2.4/06/dasrefresh
LOG:[13:09:20 14.5.2020]  active: /gmf_grapes_gfs_v2.4/06/dasrefresh
LOG:[13:09:20 14.5.2020]  active: /gmf_grapes_gfs_v2.4/06
LOG:[13:09:20 14.5.2020]  active: /gmf_grapes_gfs_v2.4
LOG:[13:09:20 14.5.2020]  active: /

日志文件是一个纯文本文件,可以被其他程序处理。

例如,ecflow_ui 在 timeline 窗口中读取日志文件并显示统计信息。

ecflow_ui 中的 timeline 窗口(ecFlow v4.15.0)

ecflow_ui 中的 timeline details 窗口(ecFlow v4.15.0)

日志位置

ecFlow 将日志保存到文本文件中,日志文件的名称和位置在变量 ECF_LOG 中指定,可以在 ecFlow 服务启动前通过环境变量设置。

如果使用 ecFlow 自带的 ecflow_start.sh 脚本运行 ecFlow 服务,日志会保存到下面的文件中

${ECF_HOME}/${ECF_HOST}.${ECF_PORT}.ecf.log

例如,NWPC 产品后处理系统使用的 ecFlow 服务 nwpc_pd 的变量如下

ecFlow 服务 nwpc_pd 信息

在上面的 ecFlow 服务中,ECF_LOG 被设置为

/g2/nwp_pd/ecflow/login_b01.31071.ecf.log

所以日志就保存在该文件中。

日志内容

ecFlow 日志文件的语法比较简单。ecFlow 中绝大部分的操作都生成单行的日志记录,格式如下所示:

XXX:[HH:MM:SS D.M.YYYY] command:fullname [+additional information]

其中各字段含义如下:

  • XXX:日志级别
  • HH:MM:SS D.M.YYYY:日志时间戳,记录 系统 时间,不是 suite 时间。
  • command:与操作相关的命令,例如 chd:init 表示 ecflow_client 执行 init 命令。
  • fullname:节点路径,大部分操作都针对某个节点。
  • +additional information:可选的附加信息,与具体的操作有关。

下面简要介绍各个字段。

日志级别

ecFlow 的日志级别与标准日志级别类似,但略有不同。

MSG

用户操作生成的信息消息,正常操作。

MSG:[13:09:20 14.5.2020] chd:init /gmf_grapes_gfs_v2.4/06/dasrefresh

LOG

由任务或 ECF 生成的信息消息,正常操作。 通常是节点在经历状态变化时生成的消息。

MSG:[13:09:20 14.5.2020] chd:init /gmf_grapes_gfs_v2.4/06/dasrefresh
LOG:[13:09:20 14.5.2020]  active: /gmf_grapes_gfs_v2.4/06/dasrefresh
LOG:[13:09:20 14.5.2020]  active: /gmf_grapes_gfs_v2.4/06
LOG:[13:09:20 14.5.2020]  active: /gmf_grapes_gfs_v2.4
LOG:[13:09:20 14.5.2020]  active: /

如上所示,用户命令(例如 ecflow_client --init)经常同时生成 MSGLOG 两个级别的消息。 MSG 记录命令执行,LOG 记录该命令对节点(们)的效果。

ERR

错误消息,无法执行的异常操作。 某些错误在客户端被忽略,例如,尝试发送 ecFlow 中不存在的 label 或 event 是 ecFlow 服务端的错误,但在客户端上则不是。

ERR:[16:25:42 14.5.2020] Event request failed as event 'outdatedfilesdeleted' does not exist on task /swfdp/12/upload/ftp_deterministic/ftp_base_SEA/upload_tograph_base_SEA_006

WAR

警告消息,不是错误但已采取纠正措施。 例如,使用旧版本的客户端可能会导致打印警告消息,生成作业超时也会有警告信息。

WAR:[14:42:25 14.5.2020] Job generation for task /grapes_meso_3km_post/06/upload/tograph/meso_10mwind/cn_10m_wind/plot_hour_023 took 4282ms, Exceeds ECF_TASK_THRESHOLD(4000ms)

DBG

调试消息,默认情况下不可见,必须由有权限的用户打开。

业务系统的 ecFlow 服务暂未打开调试功能,尚无具体示例。

others

处理日志文件的程序应忽略其他情况。 例如,如果 ecFlow 以交互方式运行,则日志文件中可能会有键盘回显。

时间戳

[HH:MM:SS D.M.YYYY]

时间戳中日期和月份没有前导 0,所以解析时间需要寻找 [] 字符。

命令

ecFlow 的日志条目会记录多种信息,命令字段用于区分日志条目的种类。

例如下面的日志包含两种类型:第一行是 child 命令记录,第二行是节点状态变化记录。

MSG:[13:09:20 14.5.2020] chd:init /gmf_grapes_gfs_v2.4/06/dasrefresh
LOG:[13:09:20 14.5.2020]  active: /gmf_grapes_gfs_v2.4/06/dasrefresh

后续文章将介绍 ecFlow 日志条目的不同分类。

节点路径

ecFlow 的大部分操作,都有与之对应的节点路径。

例如下面的日志中,操作节点是 /gmf_grapes_gfs_v2.4/06/dasrefresh

MSG:[13:09:20 14.5.2020] chd:init /gmf_grapes_gfs_v2.4/06/dasrefresh

另外,本节开头给出的格式仅是通用示例,不同操作的记录可能有细微的差别。

例如下面的日志记录修改节点的 label 值。

MSG:[13:23:21 14.5.2020] chd:label info 'checking for 000...' /grapes_tym_post/06/initial

附加信息

上面的例子可以看到,chd:label 操作记录了 label 的名称、值和对应的节点路径。

某些操作可能需要一些附加的信息,通常附加到日志条目的最后。 例如 submitted 记录了作业脚本文件的大小。

LOG:[13:24:01 14.5.2020]  submitted: /env_grib_pi_v1_0/env_grib_pi/GMF_ENV/gmf/00/upload/upload_168 job_size:3928

参考

ecFlow官网:ecFlow log file

nwpc-oper/nwpc-workflow-log-model