本文是对 2020 年 1 月文章《ecFlow学习笔记:服务检查系统》的更新。
本文介绍如何使用 ecFlow 定时检查后台程序运行情况,实现对 HPC 登录节点上后台服务的监控,并在程序退出时实现自动重启。
背景
前两年笔者开发的监控程序通常部署在 HPC 外的 Linux 服务器上,使用 SSH 协议或者 TCP 端口远程连接 HPC 获取监控数据。但这类程序存在不少问题。
比如下面两个近期没有更新的项目:
nwpc-hpc-exporter
https://github.com/nwpc-oper/nwpc-hpc-exporter
nwpc-oper/nwpc-hpc-exporter 项目为 Prometheus 提供 HPC 监控指标。该项目运行在 Linux 服务器上,通过 SSH 协议使用账户名和密码远程连接到 HPC 执行命令行程序,定时获取 HPC 的运行状态。
保持与高性能计算的 SSH 长时间连接并不是百分之百可靠的。所以,需要设置重新连接机制。
nwpc-ecflow-collector
https://github.com/nwpc-oper/nwpc-ecflow-collector
nwpc-oper/nwpc-ecflow-collector 项目使用 ecFlow 的 Python API 获取系统的运行状态。
该项目在 NWPC 监控平台 (NWPC Monitor Platform, NMP) 中应用时,从 Linux 服务器远程连接 ecFlow 服务绑定的 TCP 端口,获取节点运行状态。
但 ecFlow 的 API 没有对数据进行压缩,对于挂载任务数比较多的服务(例如集合预报和产品后处理系统等),整个获取过程速度很慢。
为此,笔者开发 nwpc-oper/ecflow-client-cpp 项目,将 ecFlow 的采集程序放到高性能计算机的登陆节点上,使用 gRPC 向外提供服务。
https://github.com/nwpc-oper/ecflow-client-cpp
详情请参看以下文章:
《ecflow学习笔记:节点状态监控工具V2》
但上述程序缺乏像 ecflow 程序一样稳定性,可能会因为不明原因退出。笔者已对工具进行了优化,详情请参看以下文章:
《ecFlow笔记:优化节点状态监控工具》
但仍不能保