赵一宁,肖海力
中国科学院计算机网络信息中心,北京 100083
中国国家高性能计算环境(中国国家网格,CNGrid)[1-2]是由国内众多国家级和地区级计算中心、高校、科研单位的计算资源汇聚而成的大规模超级计算环境,长期为国内科研用户提供优质的高性能计算资源。目前国家高性能计算环境已经拥有22 个结点,聚合计算资源超过800PFlops、存储资源超过500PB,支持了物理、化学、生物医药、工业设计、教育等众多领域的专业社区和业务平台,对推动我国科学技术水平的发展起到了重要作用。
中国科学院计算机网络信息中心是国家高性能计算环境的运管中心和北方主结点,并通过中心自主研发的高性能计算环境核心软件SCE[3]实现了环境资源汇聚、作业调度和运行支持等服务。在环境运行维护工作中,建设安全运行机制以支持环境稳定运行是一项十分关键的任务。我们研发部署了包括环境资源监控、环境信息采集、环境数据分析等一系列相关机制,并通过对日志等环境数据进行分析来获取环境状态侧写并发现异常来辅助环境运行维护工作。然而这种数据分析的结果通常是文本和数字形式,对运维人员来说缺乏直观印象,不利于快速理解。
为此我们建设了高性能计算环境运行状态诊断系统,它是一种对于目标计算环境的运行状态进行量化和可视化评判的系统,通过对于目标环境的信息收集、整理,进行不同角度的分项分析,并最终将各分析结果集成为统一的环境运行状态分值,采用可视化方法将各类分析结果立体的表现出来,以便相关运维人员能够直观的获取环境信息和快速定位问题。由于整个环节绝大部分处理分析工作是由程序自动完成,环境运行状态诊断系统极大减少了人工操作量,为运维工作起到有效的支撑作用。
环境运行状态诊断系统主要通过量化和可视化的方法对单项分析方法的结果进行转化和集成。针对目前环境中已经存在的日志流量异常检测、日志关联性异常分析和用户行为特征判别等分析方法,我们根据其分析结果种类分别转化为数值,再进行标准化和归一化等转换,形成单项分析分值,之后将单项分值合成为环境总体状态分值。总体分值的合成原则包括:(1)合成后的总体分值要保持在取值区间[0, 100]以内;(2)总体分值需要能够比较明显的感知单项分值的变化,即当某一单项发生较明显的升高或降低时,总体分值也会相应表现出可观测的升高或降低。同时,根据分析结果的实际含义,环境运行状态诊断系统采用可视化图表的形式将结果表现出来,利用色彩和空间来辅助运维人员更好的理解环境运行状态。我们使用了包括热力图、关系图、散点图、雷达图等形式对分析结果进行表述,并采用网页形式将各图表集成成为诊断系统。
环境运行状态诊断系统已经在国家高性能计算环境中实际部署,并有效的支持了环境的稳定运行。该系统采用了框架式结构,可以方便的集成更多分析方法以实现更多角度的状态信息获取。此外该运行状态诊断系统可以适用于各种分布式系统,具有比较好的普适性。
本文第1 节简单介绍本领域的其他相关研究工作;第2节将介绍国家高性能计算环境相关背景需求以及运行状态诊断系统总体设计;第3节主要阐述了分析结果转换为分值的量化方法;第4 节介绍了分析结果的可视化展示方法及集成;第5 节给出了一些实际工作中发现的异常案例。
环境数据的获取与分析是一种常见的环境状态感知和问题发现与处理的方法。环境数据主要来源于系统监控等性能指标和日志等应用程序产生的数据。系统监控是一种用途极其广泛的信息获取手段,典型的应用领域包括自然环境检测、硬件设备状态、广域信息收集、智慧城市等等。系统监控主要由采集监控目标的数据、实现数据格式整理和预处理、进行所需要的统计分析和结果最终呈现等步骤组成。自然环境数据的采集主要通过传感器等特种设备实现,而计算机相关的系统监控数据主要通过数据采集工具实现,例如Flume、Scribe、Chukwa[4]等。也有相对成型的完整系统及数据监控软件工具,如Nagios、Ossec 等。监控系统往往需要引入可视化技术,来实现更易读的监控效果。
基于日志的处理分析是对于环境数据的进一步应用,可以通过数据挖掘、机器学习等方法得到潜藏在表象之下的一些信息要素,常用于发现和预测异常、系统及用户行为分析等目的。贾统等[5]系统性整理了基于日志数据的系统故障诊断技术;Du 提出了基于深度学习的系统日志异常检测与诊断工具DeepLog[6];Das通过一系列工作[7-9]深入研究了基于日志的节点故障预测方法;Peng 提出的自动挖掘日志种类关联性的方法[10]还使用了可视化技术来辅助对于结果的表现。
数据可视化是一种常用的数据展示和分析的方式,可以达成增强数据表现力、发现平板数据中难以察觉的信息等目的。目前已经有非常多的可视化编程图表库和工具软件,包括Echarts、G6、Plotly、ggvis、ggplot2、R、D3、Easycharts、Tableau、Raw 等等,功能上也可分为侧重展示的静态图表和侧重分析的交互图表等。除了传统的数据可视化、科学可视化以外,近年来叙事可视化逐渐成为一种重要的可视化应用方向[11-13],其主要通过可视化来进行时间线梳理、空间位置展现、人物关系表达以及关键场景还原等,相比原本简单的故事描述具有更有效的信息传达效果。也有相关工作利用可视化工具实现艺术创作和艺术表现。可以看到可视化方法具有越来越广阔的应用前景。
在数据处理分析展示领域,Elastic 公司的ELK 框架[14]是一种使用非常广泛的工具。ELK框架包括ElasticSearch、Logstash、Kibana 以及后续增加的Beats 等一系列软件组成,分别用于覆盖数据的采集、整理、存储搜索以及可视化展示等各个环节。由于这一系列软件是由同一公司开发的,软件相互之间啮合效果很优秀、数据接口一致,使得ELK框架的组合使用非常便捷,可以满足很多场景的基本需求。然而作为通用框架,ELK只包含了比较常用的数据整理分析和展示方法,当目标系统有特定的数据处理方法和展示需求时,仍需要人工变更添加相应方法内容。
环境异常状态诊断系统主要应用和服务对象即为国家高性能计算环境,这是一种大规模分布式的高性能计算环境,通过中国科学院计算机网络信息中心自主研发的SCE 核心软件将来自全国范围的高性能计算资源聚合起来,屏蔽异构性,为用户提供包括命令行、portal页面等统一的访问方式,极大简化了用户的使用难度,同时也为大规模计算任务和大科学装置研究提供有力的支撑条件。为确保运管中心与环境各结点间的协调运作,SCE在每个环境结点集群设有前端服务器,在提交计算作业的同时收集所在集群的队列和作业信息,与中心服务器进行信息交互,此外还有访问服务器负责与用户及社区进行交互和接受计算作业。因此环境核心服务是一个分布在众多服务器上的复杂系统。
针对高性能计算环境的安全数据分析工作,我们在过往的工作中设计了网格环境日志分析框架LARGE(Log Analyzing fRamework in Grid Environment)[15],定义了环境数据采集、数据处理分析、结果反馈等关键步骤,并陆续研发了环境事件流处理与分发系统[16]、日志模式提炼算法[17-18]、多种环境日志分析方法、实时日志监控警报等系统和工具去填充LARGE 框架,初步形成了环境数据处理分析工作流程。然而这些方法大多用于解决特定问题或从特定角度进行信息整理,所生成结果比较零散,在增加运维人员工作量的同时也不利于把握环境整体状况。
图1 网格环境日志分析框架LARGE系统结构Fig.1 System architecture of LARGE
对此,我们需要设计一个专门用于整合各环境数据分析结果的系统,将分析结果转换为统一的格式,最终合成为少量的环境总体状态信息,以便运维人员可以通过观察该信息即可获得对环境状态的大体了解。我们将该系统称为环境运行状态诊断系统。系统的工作流程示意图如图2所示。
图3 分析结果量化与合成工作流程Fig.3 Quantifying and integrating workflow of the analyzed results
环境运行状态诊断系统的主要目标为帮助运维人员直观了解环境运行状态,以及当环境出现异常时能够快速定位问题发生的位置和种类,因此在设计时既需要考虑如何将分析结果整合成为一个易于观察又能反映环境状态变化的信息,又需要考虑如何将环境状态信息还原到具体的服务器系统上。面对这两个考量,我们采用了量化和可视化的方法作为解决方案。首先我们采用状态分值作为环境状态分析结果的整合接口,将各个单项分析结果根据其涵义转换成为单项状态分值,再将各单项状态分值合成成为总体状态分值。然后我们需要针对每个单项分析结果建立一个可视化图表,通过形状、色彩和空间位置等元素将分析结果更直观的表现出来,同时加入关键信息的具体区分,例如异常信息种类、程度和所在服务器等。
在实际应用时,运维人员可以先观察总体状态分值来获知当前环境总体运行状态,当该分值发生明显变动时,则通过分项分值了解异常所属的分析结果,再转到相应的可视化图表中观察异常的种类程度和发生位置等信息。通过这种方法,系统达到了状态认知直观和问题定位快速的效果。
值得注意的是,环境运行状态诊断系统也是一种框架式的结构,它并不限定能接入的分析方法的数量。当目标环境需要加入一种新的分析方法时,只需要定义好该分析方法的分值计算方法以及可视化图表表现方式,就可以很方便地加入到环境运行状态诊断系统,因此系统具有较好的灵活性。
在过往的研究工作中,我们已经开发了包括日志流量异常分析、用户行为特征分析等多种环境数据分析方法。这些分析方法可以是灵活的、定制的,能够从不同的角度获知环境状态,给出各自的环境侧写,但由于分析目标的不同,其结果形式也是多种多样,缺乏一种通用的格式将各个结果整合起来。为了实现集成各项分析结果形成统一的环境运行状态诊断结果的目标,我们采用量化转换的方式,首先为各单项分析结果转换为单项结果分值,再将各个单项分值合成成为环境总体状态分值。
分项状态分值和总体状态分值的取值范围皆为0~100,其中分值越高代表环境状态越趋向于好或正常,分值低则代表环境状态趋向于差或异常。在实际计算时,为便于各种函数转换,我们将会把计算值标准化映射到0 到1 的范围内(称为结果分值),再在最终显示时将计算值乘以100转换成百分制分值(状态分值)。
单项分析方法的结果虽然形式多样,但大体上可以分为两个种类:连续型结果和离散型结果。连续型结果通常是由数值表示的,其分析结果是分布在一个区间内的某种数值,例如给定一个时间点和一个位置点,通过分析得到了该位置在该时间点的温度,这种结果就是连续型。离散型结果表示分析结果可以由类型来表达,且类型的数量是可数的,例如给定一个时间点,通过查询分析可以得知这个时间点是星期几,这个结果就是离散型(仅有星期一到星期日这7 种类型)。在处理这两种类型的结果并将其转化为分项分值时,也需要采用不同的转化方法。在本节将逐一介绍不同类型结果的分值转化方法以及最终合成总体状态分值的方法。