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 将日志保存到文本文件中,日志文件的名称和位置在变量 ECF_LOG
中指定,可以在 ecFlow 服务启动前通过环境变量设置。
如果使用 ecFlow 自带的 ecflow_start.sh
脚本运行 ecFlow 服务,日志会保存到下面的文件中
${ECF_HOME}/${ECF_HOST}.${ECF_PORT}.ecf.log
例如,NWPC 产品后处理系统使用的 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
)经常同时生成 MSG
和 LOG
两个级别的消息。
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