TDengine在地震自动监测系统中的应用实践

背景介绍

作为地震监测的核心业务单位,中国地震台网中心承担着全国乃至全球地震监测任务。在地震发生后,台网中心的科学家会第一时间进行震源定位并为公众提供地震速报信息。地震波形数据就是各地震台站的直接观测数据。通过对地震波的到时分析地震学家们可以来分析地震发生时间、定位震源、计算震级等。台网中心地震科学技术开放实验室一直密切跟踪地震学方法与减灾技术的发展动态,研发新一代地震业务处理平台; 承担新业务系统上线前的测试评估工作。最近也在大数据领域尝新新技术,本文介绍一种用时序数据库TDengine来存储归档地震波形数据的新思路。

实际应用场景

业务背景介绍

地震监测业务可简化成数据采集、数据传输和数据处理三部分。其中数据采集使用的设备一般为地震计(可视为特殊的物联网采集设备),其由多个国家布设在全球各地(如图1),并7x24小时不间断测量和记录当地的地面运动数据供各国使用。采集的数据通过有线或无线网络传输至台网中心,台网中心的数据处理软件采用人工交互处理或自动处理方式对数据进行处理,监测全国和全球的地震活动情况。


图1 SeisFLINK2全球地震监测台站分布图

近几年,随着国家对防震减灾要求不断提高,我国先后实施了多个大型地震监测工程项目,优化和加密观测台网和观测仪器(如地震计),预计未来几年,用于数据采集的地震计数量将会呈数量级增长,并且随着物联网的发展,将会有更多数据接入用于地震监测。因此,原有在单台机器上运行的地震数据处理软件(如地震自动测定软件)的数据处理压力会越来越大。同时海量数据的汇入,对数据存储、管理、回溯等都提出了新的要求。

为了解决海量数据处理和存储的问题,中国地震台网中心地震科学开放实验室研发团队开发了SeisFLINK2地震自动监测系统(如图2)。SeisFLINK2系统是基于大数据技术构建系统框架,并集成地震专业处理模块的地震实时流处理平台。其使用Kafka作为分布式消息交换子系统,实现海量地震数据的接入和交换;使用Ignite作为分布式数据缓存子系统,方便各地震数据处理模块获取近线数据用于地震数据处理;使用Flink对海量地震数据流进行实时处理(主要用于震相检测);正逐步使用TDengine替代Hbase实现地震数据的存储和检索(图2左下)。


图2 SeisFLINK2系统示意图(图:黄兴辉)

TDengine存储地震波形数据

我国的地震计一般1秒钟采集100次地面运动数据(100Hz),并定期(零点几秒至几秒)打包后向后方数据服务器传输数据,数据一般为国际通用的MiniSeed格式,一个数据包均包含头文件和数据文件,头文件包含数据元信息,如地震计所属台网、台站、通道、位置号、采样率、包数据起始时间和结束时间等。数据文件包括时间段内采样值。

按照业务需要,我们将MiniSeed数据分两部分存储。第一部分我们设计了一张超级表Seismometer,设有两个字段以及4个标签,ts为采样时间,value为采样值,四个tags分别为地震计对应的台网、台站、通道和位置号。我们为每个地震计创建了两张表(通过超级表创建),一张用于存储该地震计传输回来的数据,地震计的数据包经过解包后把采样点数据按照时间顺序存入该表中(如图5右侧所示)。另一张表记录每一个数据包的数据起始时间和结束时间。第二部分对于长期保持不变的元数据信息如某个地震计的采样率,存储在固定文件中。这样做目的是虽然只需利用存储的采样值数据就可进行波形显示,但地震专业分析软件大多支持MiniSeed格式,因此考虑后续通过读取上述两部分数据,将元数据和采样数据还原成MiniSeed包,供地震专业分析软件使用。


图3 超级表Seismometer
图4 解包后存入TDengine的IU_ANMO台站BHZ分量的数据

在数据量方面,一个地震计一般1秒采样100次,在数据没有缺失的情况下,一天一张表约存储8,640,000条记录,共约5000张表。在这种数据量情况下,经简单测试,数据检索效率仍然很快。

在数据写入方面,采用C接口单线程批量的写入方式,一条波形一天的数据(17000个数据包)大概20秒就可以写完。按照接入1000多个台站计算,每秒就有1000多个包,大概消费时间在1.2秒,通过多线程消费入库,可比较轻松满足实时性要求。用Python接口会更方便,我也将从www.iris.edu拉取的地震数据并写入TDengine的Python程序开源,操作很简单(https://github.com/schenton/seedlink2taos_py)。

在数据压缩率方面,由于原有MiniSeed包内数据已进行过压缩,故原有数据与TDengine数据占用磁盘空间比例约为1:1。TDengine压缩后的数据文件与未压缩的原始数据相比,压缩比大概在9.5%,还是相当优秀的。

集成Grafana做地震数据展示

为了将存入TDengine的地震数据利用起来,我们尝试利用grafana辅以简单的消息转发程序,成功将地震波形数据在grafana上进行显示。应用场景为在某个地震发生后,在grafana web页面上自动显示距震中最近6个台站(可理解为地震计)的波形数据。


图5 使用TDengine进行地震数据存储与展示的业务逻辑图

如图5所示,首先我们利用一个简单的python消息转发程序,在接收到新的地震事件后,计算得出距震中最近的6个台站,并将台站名写入MySql的waveform_station表中。然后在grafana上配置6个变量用于动态表示6个台站,变量可定时从Mysql数据库中读取台站名(如图6)。这样我们就实现了在grafana中实时地显示最新地震的最近6个台站的波形变化,即不仅波形实时变化,各个面板中显示的台站也会随着地震事件而更新(如图8)。

图6 配置grafana中的变量

最后,在grafana input sql中,用变量代表需要在TDengine中查询的表名,tbname1动态的表示为seisflink.IU_RAO_00_BHZ(图7)。

图7 Grafana Input SQl中用变量动态表示表名
图8 2020年5月25日,台湾宜兰县海域4.8级地震后,Grafana动态显示最近6个台站的地震波形。

采用TDengine的原因

我们接触TDengine时间不长,使用它的初衷是通用的大数据软件(如HBase等)的维护对人员的技术要求较高,不利于我们专业软件的推广和使用。同时,使用HBase存储MiniSeed数据后,按时间、按台站检索地震数据的效率并没有想象中的快。

相比之下,开源版TDengine的安装包只有不到5MB,对硬件资源也没有什么硬性要求,安装部署只需运行一个脚本,十分简单。对应用而言,TDengine没有区分历史和实时数据库,支持Ad Hoc查询,并且是SQL语法。这个就大大降低了开发的难度,不需要我们做分库分表的操作,并且可以做到大量地震波形数据的实时显示。TDengine的超级表设计也非常适合对各个台站数据的分片,每个台站的数据独立存放在各自的表中,但可以通过超级表统一过滤、查询,高效方便。

总结与展望

毫无疑问,TDengine是一款非常好的时序数据库产品,轻量、高效、简单。经过前期的开发,它可以方便的将地震数据高速入库并快速地检索出来。但如果想要在地震业务中更好的得到应用,我们认为还需要在如何更方便的使用TDengine存储的地震数据上做文章:如何无缝的将地震专业分析软件与TDengine集成使用?

例如地震行业通用的python工具包obspy,它可通过webservice按时间,按台站方便的请求MiniSeed数据并实时进行滤波、仿真等数据处理。就像前面提到的,我们后续可能尝试在obspy的上层做一个数据接口,同样实现按台站、按时间从TDengine中获取采样点数据并打包成MiniSeed数据,供obspy、sac等地震专业软件使用。

同时TDengine的许多高级部分我们尚未完全挖掘应用,如流计算,某个时间段的最大值最小值等对我们量取地震波形数据峰值,计算震级等应该会有帮助,简化我们的开发,以后有机会继续深入研究和使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355