朱 艳,张海龙,冶鑫晨,王 杰,王万琼,托乎提努尔,李 嘉,张 萌
(1. 中国科学院新疆天文台,新疆 乌鲁木齐 830011;2. 中国科学院大学,北京 100049;3. 中国科学院射电天文重点实验室,江苏 南京 210008)
由于天文观测的特殊性,望远镜观测台站与天文数据存储中心往往相距遥远,观测产生的科学数据需要通过专线传输到数据中心永久存储,传输的数据专线长期暴露在外会产生多种问题,导致数据传输中断。数据传输过程中需要控制系统与详细的日志系统以便及时发现问题,并在故障修复后重新传输数据,若有直观的展示和可视化管理界面,将极大地方便数据管理员进行数据统计与分析。数据传输过程中的日志记录和之后对日志的分析查询是天文数据传输系统的重要组成部分,也是本文的主要内容。本文以新疆天文台观测数据在传输过程中遇到的问题为基础,设计并开发了一套数据传输日志系统,实现数据查询、统计、分析等功能。
文[1-2]研发了下一代归档系统[注]https://github.com/ICRAR/ngas(Next Generation Archive System, NGAS),主要目标是处理来自望远镜的大数据流,该系统很好地满足了不断增长的数据传输与管理需要。NGAS提供用户基于URL命令的接口,支持包括归档、检索在内的几十个命令。目前,NGAS已经应用在多个数据中心的数据传输中,ALMA,MWA,FAST产生的数据已经使用NGAS进行传输,目前上海天文台也计划使用NGAS进行数据传输。
rsync是一款数据镜像备份工具,可实现本地主机与远程主机上的文件同步, rsync仅传送本地与远程两个位置的数据差异部分,数据传输效率较高[3]。rsync执行日志默认输出到syslog,支持指定同步日志文件位置和定制日志文件的具体字段。rsync存在记录日志信息单一的问题,无法满足海量天文数据传输过程中状态判断和问题发现,真实的天文数据传输过程需要更为详尽的日志内容。
日志审计跟踪发生在对象上的活动,在软件系统中起辅助作用,在满足需求的情况下应尽量简单高效。已经存在成熟、优秀的日志系统,如Glog[注]https://github.com/google/glog等,由于框架庞大导致开销也大[4]。NGAS与rsync都不支持日志多目的地输出,rsync也不提供日志轮转功能。日志文件轮转配置、多目的地输出、存储数据按天或按文件夹的统计结果写入日志文件与数据库表中等需求都是已有日志系统无法满足的。
新疆天文台在南山建有26 m射电望远镜,其本部位于南山观测站以北约100 km。望远镜观测到的原始数据经专线传输到新疆天文台本部进行异地备份[5],本日志系统以rsync软件工具为基础。
如图1,日志系统包括日志收集、存储、检索3部分。通过日志收集器进行日志的收集,收集器对本机上观测数据存储目录定时扫描并进行处理,根据配置文件中的数值选择扫描的间隔时间。存储服务进程接收到收集器的输出信息后存储为数据库表内容,同时存入日志文件。日志检索系统根据管理员检索条件显示日志信息,控制后台服务程序(服务的启动、关闭、重启等),修改配置文件。
图1 日志系统结构图
Fig.1 Log system structure
图2为日志系统后台程序实现细节图。
监控脚本:执行监控任务的脚本,共有两个监控脚本,彼此监控。
控制脚本:根据配置文件内容,控制各个脚本的输入参数,如脚本内容的循环间隔等。
监控对象:由检查更新和数据写入两部分组成。检查更新脚本通过检测发送接收两端数据对比来确定是否需要同步数据备份,该脚本只存在接收端日志系统中。数据写入由文件信息数据和统计信息数据组成。文件信息写入脚本记录最新一次存储目录扫描后新增的文件信息,统计信息脚本负责统计存储根目录与其下的各个文件夹以及每日的增量信息。
图2 实现细节图
Fig.2 Implementation details
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的多线程技术实现一个控制脚本启动多个脚本。监控对象内脚本若停止运行将被控制脚本唤醒。
新疆天文台数据传输日志系统的后台程序由shell脚本组成,日志检索系统由Qt语言在集成环境Qt Creator内完成。
shell是用户使用Linux系统的桥梁,接收用户键入的命令并送入内核执行。shell脚本是用shell命令组成的程序,shell作为一种编程语言,也有分支控制结构和循环结构等普通编程语言具有的特点,在Linux上统计信息使用命令组合可以方便得到统计结果。
Qt是一个跨平台C++图形用户界面应用程序开发框架,Qt语言模块化程度高且可重用性较好,Qt简化了开发和维护图形用户应用程序的任务[6],内部的组件通过Qt特有的信号槽机制通信[7]。
数据传输日志系统的日志包括两部分:(1)记录数据存储在本地机器上的处理后的统计日志,称为普通日志,这种日志以文件形式存储在以日期命名的log文件中,有数据存入就会产生新日志文件;(2)使用日志检索系统产生的如登录、退出系统记录,界面操作的相关日志,记录用户行为轨迹,称为系统日志,这类日志的命名规则由配置文件决定,配置文件中日志文件轮转提供大小和时间两个选项。另外普通日志中的某些信息需要写入数据库表中。
(1)普通日志
普通日志写入文本文件,同时也将某些字段写入数据库表中,其输出格式如下:
[
-e.g.:
[2018-06-04 19:28:22][INFO]/data/2014/2014011871493.342018-04-13 13:30:25
字段意义对应如下:
(2)系统日志
系统日志以文本形式写入文件,其输出格式如下:
e.g.:
SYSTEM_LOGIN|2018-06-20 18:23:21|sam|logon|logindialog.cpp|INFO=log into system,SUCCEED
字段含义如下:
(1)文件表(files):记录每个文件的文件名、文件大小、文件存储时间、文件最后修改时间、文件的md5值。
(2)天文数据表(data):记录设备上天文数据的存储信息,包括数据总量(单位MB)、存储路径内数据总个数、存储时间与最后修改时间(用户可以设置记录数据的间隔时间,如2 min)。
(3)文件夹表(folder):记录存储路径根目录下的各文件夹的数据信息,包括自增字段、文件夹遍历次数、文件夹名称、该文件夹下存储的总数据量、该文件夹包括的数据文件总个数、文件夹记录时间、文件夹最后修改时间、根目录下文件夹总个数。
(4)每日数据增量表(dayData):记录每日天文数据存储路径下数据的变化信息,包括自增字段、当日日期、当日增加的数据总量、当日增加的文件总个数、备用字段。
(5)每日文件夹数据增量表(dayFolderData):记录天文数据存储路径根目录下各文件夹每天数据变化信息,包括自增编号字段、当日日期、文件夹名称、该文件夹存储数据总量、该文件夹下存储文件总个数、该文件夹当日增加的数据总量、该文件夹下当日增加的文件总个数、根目录下文件夹总个数。
(6)脚本程序监控表(proc_status):记录后台脚本程序的运行状态、4个脚本(分别为写数据脚本、控制脚本、每日数据统计脚本、rsync数据传输脚本)、更新时间。
上述6张表的字段信息如表1。
表1 数据库表结构Table 1 Database table structure
(续表1)
日志检索系统主要为系统管理员服务,通过一个友好的操作界面让使用者更加方便地查询和操作日志,为了便于控制整套天文数据传输日志系统,通过界面控制后台运行程序开启、停止或重启,更改配置文件参数达到控制日志输出行为的目的。
如图3,日志检索系统由4部分组成,分别为普通日志检索、分类日志查询、日志备份、参数管理控制。
如图4,用户成功登录后页面显示发送端和接收端存储数据情况,包括两端的系统状态和各自存储的总文件量、总文件数。系统状态列出磁盘设备已占用空间大小、占用比例、可用空间等信息。
图3 日志检索系统结构
Fig.3 Structure of log retrieval system
3.2.1 普通日志检索(Log Retrievel)
如图5,普通日志检索界面展示详细的文件记录,包括文件名、文件大小、文件生成时间。支持检索某一段存储时间内的记录,时间可精确到某一天的某一秒,支持关键字检索。关键字是文件名或者文件名的一部分,顶部可选择sender或者receiver按钮检索发送端或接收端的数据。底部的backup按钮支持备份当前检索的数据到本地默认目录,备份目录在Configure页中修改。
图4 发送端与接收端数据存储情况一览
Fig.4 Summary of data storage at the sender and receiver
图5 普通日志文件检索
Fig.5 Ordinary Log file retrieval
3.2.2 分类日志查询(System Log)
此界面分类显示系统日志内容,系统日志是指用户使用日志检索系统所产生的一系列日志信息。系统日志可查看系统登录日志与系统操作日志两类。
图6展示了系统日志概览,包括日志分类和各自的数量。如图7,系统登录日志记录每个用户登入或登出系统的时间、登录状态、动作(登入或登出)以及相关描述。如图8,系统的操作日志详细记录了用户使用本系统的行为轨迹,给出了用户操作的时间、操作的内容(如查询操作、备份操作等)、操作的状态(成功或失败)和操作的详细描述。
图6 日志概览Fig.6 Log overview
图7 不同类型日志查询(登录日志)
Fig.7 Different types of log queries (logging log)
图8 不同类型日志查询(操作日志)
Fig.8 Different types of log queries (operation log)
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,系统日志文件备份可备份今天以前、半年前、一年前的本地日志,默认配置页面的备份路径;普通日志备份支持用户选择的起始日期内的日志文件,包括按每个文件、每个文件夹、存储路径根目录每日变化的所有日志的压缩打包下载,默认配置页面中的备份路径。
图9 系统配置
Fig.9 System configuration
图10 日志备份
Fig.10 Log backup
在日志系统的基础上,通过html5,AJAX,PHP等相关技术建立了数据传输可视化页面,如图11。可视化页面上可显示传输系统的工作情况,便于系统管理员及相关人员了解数据的传输情况。可视化页面分为6部分:(1)通过柱状统计图显示当日的数据存入和发送情况;(2)通过柱状统计图显示过去一周的数据情况;(3)通过调用后台服务器的状态监控数据,显示发送服务器与接收服务器的状态,一旦出现异常会通过警报程序自动发送提醒;(4)通过饼状图显示服务器的存储情况,管理人员可通过直观的显示判断是否需要增加存储设备;(5)通过调用日志记录显示正在进行的传输情况;(6)通过曲线图显示过去一小时的数据传输速率。
图11 可视化界面
Fig.11 Visualization page
可视化系统将数据传输的日志内容较为直观地显示出来,为系统管理员提供了极大的便捷,可辅助判断系统的运行情况,及时发现系统存在的问题。可视化页面采用模块化开发技术,将来可以嵌入到大型观测装置的中控系统。
根据新疆天文台数据传输的实际需求,构建了日志收集-存储服务-日志检索的日志系统架构,在数据发送服务器与接收服务器上搭建了日志系统的后台服务程序。提出了脚本程序间互监控系统,完成了数据传输中对文件信息、文件md5校验值记录的普通日志,与按天、按存储数据文件夹记录的统计日志。另外,在数据接收服务器端的系统具有自动检测数据更新的功能。
日志检索系统作为客户端软件安装在第三方设备上,软件读取配置文件信息,自动连接数据发送服务器端与数据接收服务器端数据库。实现了按时间、关键字检索两端远程服务器日志信息,备份由检索结果组成的日志信息。查看软件本地产生的登录、操作等不同类别日志,压缩备份本地日志。实现了对服务器两端配置文件参数修改,提供用户对服务器两端系统的启动、停止、重启功能。实现了数据传输的可视化,通过WEB形式显示日志内容,可以辅助系统管理员了解传输系统的运行状态,采用模块化开发技术,便于后期的移植和复用。