适用于NMC监控平台的数值预报产品消息

目录

本文属于介绍 NWPC 消息平台 系列文章。

NMC 建立了统一的业务监控平台,基于消息中间件 Kafka 实现消息系统,同时制定了统一的日志数据格式。

本文介绍在该标准下设计的数值预报产品消息格式。

日志消息格式

日志消息格式参见《气象服务产品统一监控平台日志消息格式说明》。

消息使用 JSON 格式。

{
  "source": "string",
  "type": "string",
  "datetime": 123456,
  "fileName": "string",
  "absoluteDataName": "string",
  "status": "string",
  "desc": "string"
}

各个字段的说明如下表所示。

字段名含义可选说明
source消息来源系统必选字典表1(省略)
type消息类型,用于区分不同功能必选字典表2(省略)
datetime操作时间可选1970年1月1日后的毫秒数(北京时间)
fileName文件名可选
absoluteDataName文件绝对路径可选
status处理状态必选字典表3(省略)
desc自定义描述可选

对于数值预报产品来说,我们一般只更关心某个时次某个时效的产品在何时生成。 尽管文件名fileName中可以体现产品的起报时间和预报时效,但不够直观,所以在设计数值预报产品消息时,使用了自定义的 desc 段。

数值预报产品消息

首先看一个实际发送的消息,表示 GRAPES GFS 系统 2020 年 3 月 23 日 00 时次的 021 时效 GRIB2 产品在 2020/3/23 12:27:02 生成。

{
  "source": "nwpc_grapes_gfs",
  "type": "prod_grib",
  "status": "0",
  "datetime": 1584937622605,
  "fileName": "gmf.gra.2020032300021.grb2",
  "absoluteDataName": "/g2/nwp_pd/NWP_PST_DATA/GMF_GRAPES_GFS_POST/togrib2/output_togrib2/2020032300/gmf.gra.2020032300021.grb2",
  "desc": "{\"startTime\":\"2020032300\",\"forecastTime\":\"021\"}"
}

desc 字段保存一个 json 字符串,包含 startTimeforecastTime 两个字段,分别代表起报时间和预报时效。

数值预报产品消息格式如下图所示:

数值预报产品消息格式

下面详细说明各个字段。

source

数值预报业务系统名称,以 nwpc_ 开头。

系统含义
nwpc_grapes_gfs全球 GRAPES 系统
nwpc_grapes_meso_10km区域 GRAPES 10KM 系统
nwpc_grapes_meso_3km区域 GRAPES 3KM 系统
(以下名称尚未启用)
nwpc_grapes_tym区域 GRAPES 台风系统
nwpc_grapes_geps全球 GRAPES 集合预报系统
nwpc_grapes_meps区域 GRAPES 集合预报系统

因为 NMC 监控平台使用单一主题接收不同类型的监控日志消息,所以从 Kakfa 接收消息时可以使用 source 字段过滤,只处理与数值预报相关的消息。

type

消息类型

消息类型含义
prod_gribGRIB2 数据产品生成
…(后续添加)…

status

状态,与消息格式文档一致

状态含义
0成功
1处理中
2失败

目前只发送 成功 的消息,即当 GRIB 2 产品生成后会发送一条消息。

fileName

文件名。对 prod_grib 消息来说,是 GRIB2 的文件名。

gmf.gra.2020032300021.grb2

absoluteDataName

文件绝对路径。对于 prod_grib 类型的消息来说,是 CMA-PI 上 GRIB2 文件的绝对路径。 例如下面是 GRAPES GFS 预报系统 GRIB 2 产品的临时归档路径 (runtime archive)。

/g2/nwp_pd/NWP_PST_DATA/GMF_GRAPES_GFS_POST/togrib2/output_togrib2/2020032300/gmf.gra.2020032300021.grb2

datetime

消息发送时的时间戳,单位是毫秒。

desc

自定义描述字段。 对于 prod_grib 类型的消息来说,是 json 字符串,包含下面的字段:

字段名格式含义示例
start_timeYYYYMMDDHH起报时间2020032300
forecast_timeFFF预报时效021

desc字符串如下:

{\"startTime\":\"2020032300\",\"forecastTime\":\"021\"}

目前只有确定性模式系统发送产品消息,未来会增加集合预报系统。 为了区分各个集合成员,考虑在 desc 中增加新的字段,例如 number

实现

下面介绍 nwpc-oper/nmc-message-client 项目中对数值预报产品消息的实现。

日志消息

MonitorMessage 是通用的日志消息。

type MonitorMessage struct {
	Source           string `json:"source"`
	MessageType      string `json:"type"`
	Status           string `json:"status"`
	DateTime         int64  `json:"datetime,omitempty"`
	FileName         string `json:"fileName"`
	AbsoluteDataName string `json:"absoluteDataName,omitempty"`
	Description      string `json:"desc,omitempty"`
}

数值预报产品消息

数值预报产品消息使用通用的 MonitorMessage 表示。

其中描述字段使用 ProbGribMessageDescription 表示。

type ProbGribMessageDescription struct {
	StartTime    string `json:"startTime,omitempty"`
	ForecastTime string `json:"forecastTime,omitempty"`
}

构造消息时,会将 ProbGribMessageDescription 对象转为 JSON 字符串,保存到 MonitorMessageDescription 成员中。

消息发送

目前,数值预报中心的数值预报业务系统使用 nwpc-oper/nmc-message-client 项目中的 nmc_monitor_client 命令发送消息。

nmc_monitor_client send
  --target host1:9092,host2:9092,host3:9092 \
  --source nwpc_grapes_gfs \
  --type prod_grib \
  --status 0 \
  --file-name gmf.gra.2020032300021.grb2 \
  --absolute-data-name /g2/nwp_pd/NWP_PST_DATA/GMF_GRAPES_GFS_POST/togrib2/output_togrib2/2020032300/gmf.gra.2020032300021.grb2 \
  --start-time 2020032300 \
  --forecast-time 021 \
  --ignore-error \
  --debug

其中 target 是 Kafka 服务器地址列表,使用逗号分隔。

命令会自动生成时间,添加到 datetime 字段。

为了保证命令不影响整个业务系统的正常运行,使用 --ignore-error 参数,保证程序的返回值永远是 0。

启用 --debug 参数后,程序运行的输出如下所示:

brokers: [10.20.67.183:9092 10.20.67.216:9092 10.20.67.217:9092]
Version 0.1.2 (be49656)
Build at 2019-11-04T00:36:30.149579167+00:00
message:
{
  "source": "nwpc_grapes_gfs",
  "type": "prod_grib",
  "status": "0",
  "datetime": 1584937622605,
  "fileName": "gmf.gra.2020032300021.grb2",
  "absoluteDataName": "/g2/nwp_pd/NWP_PST_DATA/GMF_GRAPES_GFS_POST/togrib2/output_togrib2/2020032300/gmf.gra.2020032300021.grb2",
  "desc": "{\"startTime\":\"2020032300\",\"forecastTime\":\"021\"}"
}
create writer...
create writer...done
send message...
send message successful
close writer...
close writer...done

后续文章会继续介绍该命令如何实现,以及与 NMC 消息平台相关的更多项目。

消息展示

气象中心已开发监控网站展示各类系统的运行情况。

下图截取自 http://10.20.90.35:8080/monitor/alarmGrapes/getGrapes

NMC 综合业务感知平台中展示接收到的 GRAPES GFS 产品消息

下图截取自 http://10.20.90.35:8080/monitor/index/nmcMonitor

NMC 关键业务信息监视会显示 GRAPES 模式产品的完成情况

当数据没有按时生成时,NMC 运控平台会发送报警短信。 下图是 2020 年 11 月 12 日中午发送的报警短信,提醒 GRAPES GFS 00 时的产品没有按时生成。

NMC 运控平台发送的报警短信,GRAPES GFS 00 时产品生成时间阈值是 13:30

参考

nwpc-oper/nmc-message-client

NMC 消息平台客户端,包括消息发送和接收。

nwpc-oepr/nwpc-message-tool

正在开发中的消息分析工具,支持 NMC 消息平台。

NMC 监控平台:请在气象局内网访问。