适用于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 字符串,包含 startTime
和 forecastTime
两个字段,分别代表起报时间和预报时效。
数值预报产品消息格式如下图所示:
下面详细说明各个字段。
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_grib | GRIB2 数据产品生成 |
…(后续添加)… | … |
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_time | YYYYMMDDHH | 起报时间 | 2020032300 |
forecast_time | FFF | 预报时效 | 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 字符串,保存到 MonitorMessage
的 Description
成员中。
消息发送
目前,数值预报中心的数值预报业务系统使用 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
下图截取自 http://10.20.90.35:8080/monitor/index/nmcMonitor
当数据没有按时生成时,NMC 运控平台会发送报警短信。 下图是 2020 年 11 月 12 日中午发送的报警短信,提醒 GRAPES GFS 00 时的产品没有按时生成。
参考
NMC 消息平台客户端,包括消息发送和接收。
正在开发中的消息分析工具,支持 NMC 消息平台。
NMC 监控平台:请在气象局内网访问。