2. 中国科学院大学, 北京 100049;
3. 中国科学院射电天文重点实验室, 江苏 南京 210008
2. University of Chinese Academy of Sciences, Beijing 100049, China;
3. Key Laboratory of Radio Astronomy, Chinese Academy of Sciences, Nanjing 210008, China
由于天文观测的特殊性,望远镜观测台站与天文数据存储中心往往相距遥远,观测产生的科学数据需要通过专线传输到数据中心永久存储,传输的数据专线长期暴露在外会产生多种问题,导致数据传输中断。数据传输过程中需要控制系统与详细的日志系统以便及时发现问题,并在故障修复后重新传输数据,若有直观的展示和可视化管理界面,将极大地方便数据管理员进行数据统计与分析。数据传输过程中的日志记录和之后对日志的分析查询是天文数据传输系统的重要组成部分,也是本文的主要内容。本文以新疆天文台观测数据在传输过程中遇到的问题为基础,设计并开发了一套数据传输日志系统,实现数据查询、统计、分析等功能。
文[1-2]研发了下一代归档系统①(Next Generation Archive System, NGAS),主要目标是处理来自望远镜的大数据流,该系统很好地满足了不断增长的数据传输与管理需要。NGAS提供用户基于URL命令的接口,支持包括归档、检索在内的几十个命令。目前,NGAS已经应用在多个数据中心的数据传输中,ALMA,MWA,FAST产生的数据已经使用NGAS进行传输,目前上海天文台也计划使用NGAS进行数据传输。
① https://github.com/ICRAR/ngas
rsync是一款数据镜像备份工具,可实现本地主机与远程主机上的文件同步,rsync仅传送本地与远程两个位置的数据差异部分,数据传输效率较高[3]。rsync执行日志默认输出到syslog,支持指定同步日志文件位置和定制日志文件的具体字段。rsync存在记录日志信息单一的问题,无法满足海量天文数据传输过程中状态判断和问题发现,真实的天文数据传输过程需要更为详尽的日志内容。
日志审计跟踪发生在对象上的活动,在软件系统中起辅助作用,在满足需求的情况下应尽量简单高效。已经存在成熟、优秀的日志系统,如Glog②等,由于框架庞大导致开销也大[4]。NGAS与rsync都不支持日志多目的地输出,rsync也不提供日志轮转功能。日志文件轮转配置、多目的地输出、存储数据按天或按文件夹的统计结果写入日志文件与数据库表中等需求都是已有日志系统无法满足的。
② https://github.com/google/glog
1 天文数据传输日志系统设计新疆天文台在南山建有26 m射电望远镜,其本部位于南山观测站以北约100 km。望远镜观测到的原始数据经专线传输到新疆天文台本部进行异地备份[5],本日志系统以rsync软件工具为基础。
1.1 日志系统的整体架构如图 1,日志系统包括日志收集、存储、检索3部分。通过日志收集器进行日志的收集,收集器对本机上观测数据存储目录定时扫描并进行处理,根据配置文件中的数值选择扫描的间隔时间。存储服务进程接收到收集器的输出信息后存储为数据库表内容,同时存入日志文件。日志检索系统根据管理员检索条件显示日志信息,控制后台服务程序(服务的启动、关闭、重启等),修改配置文件。
1.2 关键点图 2为日志系统后台程序实现细节图。
监控脚本:执行监控任务的脚本,共有两个监控脚本,彼此监控。
控制脚本:根据配置文件内容,控制各个脚本的输入参数,如脚本内容的循环间隔等。
监控对象:由检查更新和数据写入两部分组成。检查更新脚本通过检测发送接收两端数据对比来确定是否需要同步数据备份,该脚本只存在接收端日志系统中。数据写入由文件信息数据和统计信息数据组成。文件信息写入脚本记录最新一次存储目录扫描后新增的文件信息,统计信息脚本负责统计存储根目录与其下的各个文件夹以及每日的增量信息。
1.2.1 互相监控体系shell脚本在Linux系统运行中可能会非正常退出或异常结束,日志系统必须随时监测保证整套系统正常运行。监控脚本1、监控脚本2、监控对象组成了一个牢固的互相监控体系。监控脚本1与监控脚本2彼此互相监控,监控对象同时被两个监控脚本监控。监控脚本主要任务是检查脚本进程的运行状态,脚本一旦不在进程列表中会被立刻唤醒。这样的监控体系可以保证监控对象一直处在运行状态,保证日志系统在无人值守的情况下能够长时间稳定运行。
1.2.2 Linux实现控制脚本需要同时运行多个脚本,就需要启动多个后台进程,系统采用在执行脚本命令后加 & 操作符实现多线程,即:
./script_name.sh &
加 & 操作符会对SIGINT信号免疫,表示该条命令将在子shell中执行,但该条命令所在终端被关闭,进程也被关闭。实现真正后台执行应在语句前面加上nohup,对SIGHUP信号免疫,即:
nohup./script_name.sh &
监控对象包含多个脚本,通过shell的多线程技术实现一个控制脚本启动多个脚本。监控对象内脚本若停止运行将被控制脚本唤醒。
2 系统实现 2.1 开发语言简介新疆天文台数据传输日志系统的后台程序由shell脚本组成,日志检索系统由Qt语言在集成环境Qt Creator内完成。
shell是用户使用Linux系统的桥梁,接收用户键入的命令并送入内核执行。shell脚本是用shell命令组成的程序,shell作为一种编程语言,也有分支控制结构和循环结构等普通编程语言具有的特点,在Linux上统计信息使用命令组合可以方便得到统计结果。
Qt是一个跨平台C++图形用户界面应用程序开发框架,Qt语言模块化程度高且可重用性较好,Qt简化了开发和维护图形用户应用程序的任务[6],内部的组件通过Qt特有的信号槽机制通信[7]。
2.2 日志文件结构数据传输日志系统的日志包括两部分:(1)记录数据存储在本地机器上的处理后的统计日志,称为普通日志,这种日志以文件形式存储在以日期命名的log文件中,有数据存入就会产生新日志文件;(2)使用日志检索系统产生的如登录、退出系统记录,界面操作的相关日志,记录用户行为轨迹,称为系统日志,这类日志的命名规则由配置文件决定,配置文件中日志文件轮转提供大小和时间两个选项。另外普通日志中的某些信息需要写入数据库表中。
(1) 普通日志
普通日志写入文本文件,同时也将某些字段写入数据库表中,其输出格式如下:
[<Timestamp>] [<log type>]<folder path> <file number> <data volume> <last modify time >
-e.g.:
[2018-06-04 19:28:22][INFO]/data/2014/2014011871493.342018-04-13 13:30:25
字段意义对应如下:
< timestamp>表示日志记录日期和时间;<log type>代表日志等级,可取“INFO” “WARNING”“ERROR”“NOTICE”;<folder path>表示数据存储路径下的各文件夹的绝对路径;<file number>表示该文件夹下文件个数;<data volume>表示该文件夹下文件总量(单位为MB);<last modify time>表示该文件夹最后的修改时间。
(2) 系统日志
系统日志以文本形式写入文件,其输出格式如下:
< type>|<timestamp>|<user>|<operation>|<source file>|<log type>=<log message>,<status >
e.g.:
SYSTEM_LOGIN|2018-06-20 18:23:21|sam|logon|logindialog.cpp|INFO=log into system, SUCCEED
字段含义如下:
< type>表示日志类型,登陆日志或者是操作日志;<timestamp>表示日志记录时间;<user>表示管理员姓名;<operation>表示操作;<source file>表示源文件;<log type>表示日志等级;<log message>表示日志说明字符串;<status>表示操作状态。
2.3 数据库表(1) 文件表(files):记录每个文件的文件名、文件大小、文件存储时间、文件最后修改时间、文件的md5值。
(2) 天文数据表(data):记录设备上天文数据的存储信息,包括数据总量(单位MB)、存储路径内数据总个数、存储时间与最后修改时间(用户可以设置记录数据的间隔时间,如2 min)。
(3) 文件夹表(folder):记录存储路径根目录下的各文件夹的数据信息,包括自增字段、文件夹遍历次数、文件夹名称、该文件夹下存储的总数据量、该文件夹包括的数据文件总个数、文件夹记录时间、文件夹最后修改时间、根目录下文件夹总个数。
(4) 每日数据增量表(dayData):记录每日天文数据存储路径下数据的变化信息,包括自增字段、当日日期、当日增加的数据总量、当日增加的文件总个数、备用字段。
(5) 每日文件夹数据增量表(dayFolderData):记录天文数据存储路径根目录下各文件夹每天数据变化信息,包括自增编号字段、当日日期、文件夹名称、该文件夹存储数据总量、该文件夹下存储文件总个数、该文件夹当日增加的数据总量、该文件夹下当日增加的文件总个数、根目录下文件夹总个数。
(6) 脚本程序监控表(proc_status):记录后台脚本程序的运行状态、4个脚本(分别为写数据脚本、控制脚本、每日数据统计脚本、rsync数据传输脚本)、更新时间。
上述6张表的字段信息如表 1。
表名 | 字段名 | 字段类型 | 字段描述 |
File_name | char | 文件名 | |
File_size | int | 文件大小 | |
files | storeDBtime | timestamp | 文件存储时间 |
File_time_last | timestamp | 文件最后修改时间 | |
Md5value | char | 文件md5校验值 | |
data_no | int | 自增字段 | |
data_volume | double | 存储数据总量 | |
data | data_number | int | 存储文件总个数 |
data_time | timestamp | 写入数据库时间 | |
data_time_last | timestamp | 最后修改时间 | |
data_add | char | 备用字段 | |
auto_no | int | 自增字段 | |
folder_no | int | 文件夹编号 | |
foldet_cycle_no | int | 文件夹被访问次数 | |
folder_name | char | 文件夹名 | |
folder | folder_volume | double | 文件夹数据量 |
folder_number | int | 文件夹下文件总个数 | |
folder_time | timestamp | 写入数据库时间 | |
folder_time_last | timestamp | 文件夹最后修改时间 | |
folder_add | char | 备用字段 | |
auto_no | int | 自增字段 | |
dayDate | date | 当日日期 | |
data_volume | double | 历史数据总量 | |
dayData | data_number | int | 历史文件总个数 |
incre_volume | double | 当日数据增加量 | |
incre_number | int | 当日文件个数增加量 | |
dayData_add | char | 备用字段 | |
auto_no | int | 自增字段 | |
dayDate | date | 当日日期 | |
folder_name | char | 文件夹名 | |
dayFolderData | folder_volume | double | 文件夹下数据总量 |
folder_number | int | 文件夹下文件个数 | |
incre_volume | double | 文件夹下当日数据增加量 | |
incre_number | int | 文件夹下当日文件个数增加量 | |
dayFolderData_add | char | 备用字段 | |
auto_no | int | 自增字段 | |
writeData | tinyint | 脚本writeData | |
proc_status | control | tinyint | 脚本control |
oneDayStat | tinyint | 脚本oneDayStat | |
rsync | tinyint | 脚本rsync | |
update_time | timestamp | 更新时间 |
日志检索系统主要为系统管理员服务,通过一个友好的操作界面让使用者更加方便地查询和操作日志,为了便于控制整套天文数据传输日志系统,通过界面控制后台运行程序开启、停止或重启,更改配置文件参数达到控制日志输出行为的目的。
3.1 功能结构如图 3,日志检索系统由4部分组成,分别为普通日志检索、分类日志查询、日志备份、参数管理控制。
3.2 各功能子模块描述如图 4,用户成功登录后页面显示发送端和接收端存储数据情况,包括两端的系统状态和各自存储的总文件量、总文件数。系统状态列出磁盘设备已占用空间大小、占用比例、可用空间等信息。
3.2.1 普通日志检索(Log Retrievel)如图 5,普通日志检索界面展示详细的文件记录,包括文件名、文件大小、文件生成时间。支持检索某一段存储时间内的记录,时间可精确到某一天的某一秒,支持关键字检索。关键字是文件名或者文件名的一部分,顶部可选择sender或者receiver按钮检索发送端或接收端的数据。底部的backup按钮支持备份当前检索的数据到本地默认目录, 备份目录在Configure页中修改。
3.2.2 分类日志查询(System Log)此界面分类显示系统日志内容,系统日志是指用户使用日志检索系统所产生的一系列日志信息。系统日志可查看系统登录日志与系统操作日志两类。
图 6展示了系统日志概览,包括日志分类和各自的数量。如图 7,系统登录日志记录每个用户登入或登出系统的时间、登录状态、动作(登入或登出)以及相关描述。如图 8,系统的操作日志详细记录了用户使用本系统的行为轨迹,给出了用户操作的时间、操作的内容(如查询操作、备份操作等)、操作的状态(成功或失败)和操作的详细描述。
3.2.3 参数管理控制(Configure)此界面可以控制后台服务的启动、关闭、重启,对参数进行设置。
图 9系统配置界面,自动显示已有的参数及参数内容:
OrdinaryLogBackupDir:普通日志远程备份到本地的默认路径
SystemLogBackupDir:系统日志备份默认路径
OrdinaryLogMaxSize:普通日志单个文件最大值,默认值为5 MB,若单个日志文件超过设定的最大值,则将日志写入另一个新文件中。
OrdinaryLogInterval:写入日志文件的间隔时间,也就是后台程序扫描根目录的间隔时间,默认间隔2 min。
MonitorInterval:后台程序监控的时间间隔,即检测后台各shell程序的运行状态的间隔时间,默认间隔5 min。
界面中3个checkbox的设置分别对应OrdinaryLogMaxSize,OrdinaryLogInterval和MonitorInterval,更改设置后需点击restart(重启)按钮重启后台服务程序。Start与stop按钮表示后台服务的开启和停止。
3.2.4 日志备份(Backup)此界面分为普通日志备份和系统日志备份两种,普通日志备份支持数据发送服务器或接收服务器上的日志备份,系统日志备份支持软件界面的日志备份。
如图 10,系统日志文件备份可备份今天以前、半年前、一年前的本地日志,默认配置页面的备份路径;普通日志备份支持用户选择的起始日期内的日志文件,包括按每个文件、每个文件夹、存储路径根目录每日变化的所有日志的压缩打包下载,默认配置页面中的备份路径。
4 数据传输可视化在日志系统的基础上,通过html5,AJAX,PHP等相关技术建立了数据传输可视化页面,如图 11。可视化页面上可显示传输系统的工作情况,便于系统管理员及相关人员了解数据的传输情况。可视化页面分为6部分:(1)通过柱状统计图显示当日的数据存入和发送情况;(2)通过柱状统计图显示过去一周的数据情况;(3)通过调用后台服务器的状态监控数据,显示发送服务器与接收服务器的状态,一旦出现异常会通过警报程序自动发送提醒;(4)通过饼状图显示服务器的存储情况,管理人员可通过直观的显示判断是否需要增加存储设备;(5)通过调用日志记录显示正在进行的传输情况;(6)通过曲线图显示过去一小时的数据传输速率。
可视化系统将数据传输的日志内容较为直观地显示出来,为系统管理员提供了极大的便捷,可辅助判断系统的运行情况,及时发现系统存在的问题。可视化页面采用模块化开发技术,将来可以嵌入到大型观测装置的中控系统。
5 总结根据新疆天文台数据传输的实际需求,构建了日志收集-存储服务-日志检索的日志系统架构,在数据发送服务器与接收服务器上搭建了日志系统的后台服务程序。提出了脚本程序间互监控系统,完成了数据传输中对文件信息、文件md5校验值记录的普通日志,与按天、按存储数据文件夹记录的统计日志。另外,在数据接收服务器端的系统具有自动检测数据更新的功能。
日志检索系统作为客户端软件安装在第三方设备上,软件读取配置文件信息,自动连接数据发送服务器端与数据接收服务器端数据库。实现了按时间、关键字检索两端远程服务器日志信息,备份由检索结果组成的日志信息。查看软件本地产生的登录、操作等不同类别日志,压缩备份本地日志。实现了对服务器两端配置文件参数修改,提供用户对服务器两端系统的启动、停止、重启功能。实现了数据传输的可视化,通过WEB形式显示日志内容,可以辅助系统管理员了解传输系统的运行状态,采用模块化开发技术,便于后期的移植和复用。
[1] | WICENEC A, KNUDSTRUP J, JOHNSTON S. ESO's Next Generation Archive System[J]. The Messenger, 2001, 106: 11–13. |
[2] | WICENEC A, KNUDSTRUP J. ESO's Next Generation Archive System in full operation[J]. The Messenger, 2007, 129: 27–31. |
[3] | 左珍德.基于Rsync的结构化数据库实时高速备份研究及工具开发[D].广州: 华南理工大学, 2017. http://cdmd.cnki.com.cn/Article/CDMD-10561-1017856393.htm |
[4] | 杨善宁. 一个轻量高效跨平台日志系统的设计与实现[J]. 电脑知识与技术, 2017, 13(28): 77–78, 115 |
[5] | 张海龙, 朱艳, 聂俊, 等. 新疆天文台NSRT观测数据存储系统[J]. 天文研究与技术, 2018, 15(2): 181–187 |
[6] | RISCHPATER R. Application development with Qt creator a fast-paced guide for building cross-platform applications using Qt and Qt Quick[M]. Birmingham: Packt Publishing Ltd, 2013. |
[7] | BLANCHETTE J C, SUMMERFIELD M. C++ GUI programming with Qt 4[M]. Upper Saddle River: Prentice Hall Press, 2008: 747-749. |