APP下载

基于机器学习的日志异常检测综述①

2022-09-20力,

计算机系统应用 2022年9期
关键词:日志向量模板

闫 力, 夏 伟

(江南计算技术研究所, 无锡 214084)

1 引言

日志是各类软硬件记录系统运行状态的一类重要数据, 它描述了系统的历史运行状态和详情. 运维工程师在进行故障排除、安全性检查等工作场景下, 经常需要对日志数据进行检查和分析. 而大数据技术的迅猛发展使得现代数据中心规模日益扩大, 复杂的系统每天都会产生数以千万计的日志记录, 一个运行在中等规模网络中的系统每天的日志量也能轻松超过TB级[1]. 体量巨大且种类繁多的日志数据使得运维工程师难以再依赖简单的关键词搜索或者正则匹配等方式来进行手工分析. 这不仅会带来繁重而枯燥工作量,同时也是对运维人员领域专业知识的极大考验——只有对某类日志特征具有丰富的处理经验才能设定出合理的过滤规则. 因此, 应用机器学习技术为机器自身赋能, 实时或准实时捕获系统运行状态异常以实现日志分析自动化, 是未来数据中心实现智能自主运维的重要途径之一.

日志、指标、链路追踪数据是运维工作中最为核心的监控和分析对象[2], 相较于指标和链路追踪数据,日志是内容最为丰富且来源充足的一类数据, 系统的异常或者性能下降一般会在日志中优先体现出来. 文章阐述了实现在线自动日志异常检测的主要步骤、关键技术、方法分类等内容, 分析了日志分析的技术难点, 并介绍了近期领域内的最新研究成果. 最后, 提出今后的一些研究重点和思路.

2 日志异常检测任务简介

2.1 日志异常检测流程

日志异常检测任务一般分为日志采集、日志解析、特征表示、异常判别4个步骤.

日志采集: 日志作为一种信息系统中广泛存在的数据, 往往散落于系统各处, 特别是对于分布式软件、大型软件等, 不同节点、不同组件都在持续生成和积累日志, 所以日志采集是日志异常检测任务的第一步.较为常见的日志采集工具包括Logstash、Flume、Fluentd、Kafka等, 通过持续、实时的数据采集, 可以将数据集中入库或者通过“发布-订阅”的模式推送给消费端进行后续处理.

日志解析: 日志属于半结构化数据, 需要分析其一般构成, 并利用解析技术将其中的常量和变量分离出来, 为后续特征表示提供良好基础. 一条日志数据可以分解为正则消息部分和特征消息部分[3]. 正则消息包括时间戳、日志等级、产生日志的类名称等日志基本组成, 这部分是可以用正则表达式进行提取和分解的, 属于日志数据的基础信息. 特征消息部分则是描述了日志内容的核心部分, 由文本、数字及特殊符号等组成.一条日志数据是由程序开发者在代码中预先埋点编写的各种输出语句在满足特定条件下产生的, 例如printf、log.info、log.warn等. 它包括了字符串常量和参数变量, 其中字符串常量被称为日志模板(或事件、键值),表明了该条日志数据的类属, 是日志消息的语义描述;参数变量则表明了系统状态关键变量的取值, 例如对象ID、内存消耗、执行时间等. 其中日志模板由于是开发者对系统状态的语义描述, 蕴含丰富的信息, 往往作为重要的分析对象输入后续检测模型进行异常判别.表1展示了截取自多个系统的日志片段, 并标识了各个组成部分, 需要注意的是由于应用软件开发规范和开发者的编程习惯各异, 日志格式上也存在千差万别.

表1 典型日志样例解析

数据解析的精度将显著影响检测模型的性能表现,有研究试验表明数据解析阶段4%的错误可能会在异常检测阶段导致性能下降扩大一个数量级[4]. 日志解析从分析对象来源上区分, 可分为基于源代码的模板抽取和基于日志文本的模板抽取. 有研究工作使用了基于源代码中类似printf等语句来抽取模板[5,6], 但这种方式在多数情况下并不可行——因为源代码分析难度大且难以获得. 目前, 就基于日志文本来抽取模板的方式, 领域内已经提出了大量算法, 典型的有SLCT[7]、IPLoM[8]、LKE[9]、Spell[10]、Drain[11]、LPV[12]等.SLCT是最早提出的日志解析算法, 通过2次遍历日志消息分别构造日志词汇表和候选簇, 再从簇中进行模板抽取; IPLoM在模板生成前采用3步式分层划分方法对日志消息进行处理; LKE是由微软提出的一种离线日志解析算法, 主要利用了分层聚类和启发式规则;Spell基于最长公共序列来以在线方式解析日志模板;Drain使用一棵固定深度解析树, 通过持续更新解析树来在线获得日志模板; LPV是最近提出的一种日志解析算法, 它使用Word2Vec词嵌入技术[13]对日志消息向量化, 基于向量相似度来聚类, 日志模板从所聚类的簇中提取出来.

特征表示: 这部分工作的主要目的在于构造机器学习模型可以处理的特征数据, 借此来学习日志的正常或者异常模式. 所提取特征的质量决定了后续模型检测效果所能达到的精度. 日志分析领域, 前一阶段提取的日志模板一般被称为事件或者键值. 在进行特征提取前, 需要对连续的日志进行切分, 通常有时间窗口、会话ID等方式: (1) 日志是一种具有时间属性的连续文本, 一条日志数据是否提示异常不仅取决于自身所蕴含的信息, 还受到其上下文的影响, 因此可采用固定或者滑动时间窗口将日志切分成数据片段, 便于输入模型进行处理. 最优时间窗口的大小可根据数据的特点进行多次尝试得到, 过小或过大的窗口都会对检测精度带来不利影响——过小的窗口会使得上下文信息不足, 而过大的窗口又会带来冗余信息; (2) 某些日志的变量参数标记了某一特定会话的执行路径, 例如HDFS日志中的block_id, OpenStack日志中的instance_id等, 可以根据会话ID将并行进程产生的日志进行剥离, 但这种方法仅限于具有此类变量参数的日志.

日志异常检测通过采用的主要特征包括: 事件计数、事件序列、文本语义、时间间隔、变量取值、变量分布等[14], 这些特征的变化往往反映出系统状态的异常. 事件计数表示日志中某一类别的事件数量大幅增加或者减少, 如Web应用日志中某一时间段内突然出现大量“Login failed”事件, 可能是系统出现安全事件的标志; 由于具有时序属性, 正常日志事件出现的顺序也会遵循一定的规律, 如OpenStack管理日志中, 一台虚拟机的生命周期是从“VM Created”开始, 中间可能经过若干次“Pause/Unpause”和“Suspend/Resume”的事件组合, 最终以“VM deleted”结束; 文本语义是通过自然语言处理技术解析日志文本自身携带的语义来判别日志是否出现异常; 时间间隔则是两条日志消息相继出现所经过的时长, 由于绝大多数日志都带有时间戳,时间间隔很容易计算, 如果特定两条日志消息的时间间隔过大, 可能预示着服务性能的下降; 变量取值指的是模板抽取后分离出的参数变量如果取值超过正常阈值范围, 则提示了系统的状态异常, 例如某进程消耗的内存过大, 可能是出现了内存泄漏. 变量分布则是对于某些参数变量的取值进行分布统计, 典型的如Web服务器日志中某一时间段同一源IP地址分布密度远大于其他地址, 则提示潜在威胁的出现. 现有的研究成果提出的算法往往用到其中一种或者多种的组合, 这些特征表示从不同维度反映出系统的当前状态.

异常判别: 经过特征提取, 原始日志数据已经转换为模型可以处理的特征数据, 可以输入判别模型进行异常检测. 在检测模型的设计上, 包括传统机器学习方法和深度学习方法. 传统机器学习方法具有硬件依赖性低、可解释性好等特点, 典型的有基于主成分分析的算法[5]、基于支持向量机的算法[15]、基于隐马尔科夫模型的算法[16]、基于K最近邻算法[17,18]、各种聚类算法[3,19]等. 传统机器学习算法提取高级特征或者全局特征的能力相对有限, 特别是日志文本的语义识别、长距离依赖等问题上表现不如深度学习, 所以有大量研究将深度学习引入日志异常检测任务. 基于深度模型的日志分析算法中包括基于长短期记忆网络的算法[20-24]、基于双向长短期记忆网络的算法[25]、基于变分自编码器的算法[6,26]、基于生成对抗网络的算法[27]、基于Transformer网络的算法[28,29]等. 但深度学习方法也并非“完美”: 首先, 深度学习作为一种端到端的解决方案, 属于黑盒模型, 可解释性较差; 其次, 为了获得满意的模型容量, 深度模型包含数层神经网络, 参数量往往十分庞大, 训练时间长且消耗资源多. 本质上, 异常判别模型是一个二分类器, 通过对新到达的日志消息进行分析, 来推断其属于正常或异常.

2.2 评价标准

关于日志异常检测的研究普遍采用分类任务中的常用评价准则, 即精确率(precision)、召回率(recall)和F1-score. 精确率表示在所有判别为异常的结果中正确判别结果所占比例, 精确率过低表示算法的误检率较高, 会带来大量的系统误警; 召回率表示在所有实际为异常的结果中正确判别结果所占比例, 召回率过低表示算法的漏检率较高, 系统将不能识别大部分的日志异常; F1-score为精确率和召回率的调和平均数, 兼顾了精确率和召回率对算法整体检测效果的影响, 过低的精确率或召回率都会导致F1-score性能下降. 准确率(Accuracy)表示所有判别正确的结果占总结果数的比例, 少部分文献采用了准确率作为评价指标, 但在正常和异常样本数据比例严重失衡的日志异常检测任务中, 占比大的样本(正常日志)对准确率的影响更大,一般不能很好反映算法的性能. 正式地, 有:

其中, TP (true positive)代表实际为真(异常日志)且判别也为正的结果数; FP (false positive)代表实际为假(正常日志)但判别为正的结果数; TN (true negative)代表实际为假且判别也为负的结果数; FN (false negative)代表实际为真但判别为负的结果数.

3 日志分析技术难点分析

3.1 技术分类及其特点

根据是否需要对特征数据打标签来进行模型训练,可分为有监督方法、半监督方法和无监督方法. 有监督方法利用预先打过标签的特征数据对模型进行训练,同时学习正常数据与异常数据的特征, 训练完成的模型即可对测试数据进行判别(分类). 然而, 有监督方法在日志分析中的热度不如半监督方法和无监督方法,原因有以下几点: (1) 日志中的异常数据是相较稀少的,导致训练数据集失衡现象严重, 影响模型训练效果;(2) 为每条日志打上标签是非常耗时耗力的, 且需要对该类日志有较深的领域认知, 才能做出正确判断;(3) 有监督方法得到的模型只能识别已知的异常日志,对于未见过的异常无法判断. 相比于有监督方法, 无监督方法避免了上述问题, 主要通过聚类、降维等方法寻找具有相同或相近特征的数据, 进而识别出数据异常点, 但也面临着准确率较低、容易受噪声影响等问题. 半监督方法介于二者之间, 通常只需要系统正常样本即可完成训练过程, 实现前两者的优势互补.

3.2 日志分析难点

指标类数据属于单变量或者多变量的时序数据,链路追踪数据属于结构化数据, 输出格式也相对固定且有限, 依据采用的收集工具(如谷歌的Dapper、推特的Zipkin等)即可确定. 但是, 因日志具有非结构化特点, 且没有统一标准, 使得日志输出格式上自由度非常大, 这就使日志分析难度更大.

3.2.1 日志的不稳定性

由于系统升级、应用更新等原因, 源代码的日志输出语句会持续变化, 包括添加、删除和修改等操作,致使前期模型训练数据当中未发生变化的内容越来越少, 进而使异常检测模型性能急剧下降甚至失效. 举例来说, 一款来自微软的软件经过数次版本迭代, 生成的日志中未发生变化的日志事件只占总数的30%左右[25].

3.2.2 易受噪声干扰

噪声并非日志消息自身携带, 而是在输入模型处理前的各个环节引入的. 例如, 采集日志消息时由传输网络不稳定、系统断电、软件bug等引起的日志消息整体缺失或部分缺失; 又如, 解析过程中出现的日志模板抽取不准确, 导致特征数据质量降低. 日志解析错误主要来自于两种: (1) 语义理解偏差, 将参数变量解析为模板组成, 或反之. 如图1所示, 在日志解析时将“hadoop”误判为模板组成. (2) 词表外词汇(out of vocabulary)引入的解析错误, 由于日志不稳定性或者训练数据划分等问题, 测试数据中出现训练过程中从未出现的词汇, 致使日志解析出未知模板(事件), 影响模型性能. 文献[28]就日志解析对模型性能的影响做了详细的量化分析.

图1 日志模板解析错误示例

3.2.3 计算和存储要求高

如前文所述, 日志种类多样且规模日益增大, 涵盖了从底层硬件、服务中间件、数据库和上层应用等多种来源. 海量的日志需要足够大的存储资源来承载数据, 和快速实时处理能力来满足时效性要求, 并且基于深度学习的算法还需昂贵的GPU资源来训练模型. 因此, 在做相关研究设计时, 应当考虑尽量降低算法的存储要求, 同时可利用大数据分布式处理工具(如Spark Streaming, Storm等)来实现并行处理, 这样有利于算法更好地应用于实际生产中. 文献[1]提出的ADA算法通过在线训练的方式解决了深度模型需要大量数据来训练的问题, 进而极大减少了对于存储空间的需求.文献[3]提出分布式日志处理框架, 通过Spark Streaming完成日志解析、特征提取、数据归一化等步骤, 增强了算法面对海量实时日志的分析能力. 文献[30]针对经典日志解析算法面对海量日志解析能力不足的问题,基于Spark分布式计算框架提出了POP算法. 文献[31]则基于GPU的并行能力改进了LKE算法.

3.2.4 算法和模型可移植性差

由于日志格式自由度大, 因此不同的系统日志呈现出的特征模式不同, 同时根据应用目的的不同, 即使同一类型日志关注的特征也可能有所差异. 现有研究多数基于有限的公开日志数据集[32]来开展算法和模型设计, 所以其可移植性差, 难以实现成果复用. 文献[14]详细分析了日志异常模式的复杂性, 并提出一种组合式算法LogAD来针对不同异常模式来选择合适的算法来处理.

4 相关研究

该领域已经有大量研究工作就如何实现自动化的日志异常检测提出了诸多算法和框架模型. 根据前述分类, 将现有成果进行简要说明, 并在附录中以表格形式(表A1)对比了各个算法特点.

4.1 基于传统机器学习的方法

文献[5]使用PCA的方法来实现对日志的离线异常检测. 其主要步骤是在完成对整个日志文件的解析后, 构建状态变量比率向量和消息计数向量2种特征,再应用PCA来识别出异常数据. 文献[15]同样构造了以会话ID为行、以日志模板为列的特征矩阵, 只是通过专家知识对语义相近的模板进行了合并, 减少了噪声干扰. 最后, 应用SVM对日志数据是否异常进行判别. 文献[16]针对Web日志提出二级机器学习算法实现异常检测. 首先, 利用带有标签的训练数据训练一颗决策树, 用来对测试数据分类, 生成正常数据集和异常数据集, 最后将正常数据分解参数后用于隐马尔科夫模型的训练, 提取出所有训练数据中的正常状态用以识别异常. 文献[17]利用TF-IDF技术对日志模板向量化, 并使用meanshift聚类等方法为样本打上标签, 最后利用标签化后的数据训练KNN模型来进行新样本的异常判别. 文献[18]提出由K-prototype聚类和KNN分类组合的日志异常检测算法, 先利用K-prototype来筛选出疑似异常对象, 再基于KNN给出最终判别结果. 文献[19]基于字符串度量和数值度量设计了一种对日志消息进行实时在线聚类的算法, 用于检测信息与通信网络中的攻击. 文献[3]构建并基于Spark Streaming持续更新日志消息计数向量(message count vector),利用K-means聚类算法将这些向量分为正常和异常两类.

上述算法在相应的各类数据集上取得了最高约0.99的F1-score性能表现.

4.2 基于深度学习的方法

日志数据的内在复杂模式和长距离依赖等特点,使得不少研究工作将深度学习引入日志异常检测领域.

长短期记忆网络 (long short-term memory, LSTM)[33]作为一种特殊的循环神经网络, 最早应用于机器翻译领域, 由于LSTM擅于保存序列中的长距离依赖关系,使其也适合应用于日志分析当中——捕捉日志消息中的远距离依赖关系. DeepLog[20]作为最经典的基于深度学习的日志分析算法之一, 利用2层叠加的LSTM网络实现了日志模板序列和参数变量的异常检测.nLSALOG[21]同样使用2层LSTM网络, 并在其中引入自注意力机制, 使得模型能更好地捕获序列内部的依赖关系, 提高异常检测性能. LogAnomaly[22]在日志模板语义表达上做了改进, 利用dLCE自然语言处理模型通过词嵌入技术生成模板向量, 再输入LSTM进行模型训练, 最终用于预测推断. 这种方法可通过计算模板向量间的近似度将系统新产生的陌生日志模板匹配到模型已经学习到的模板向量. LogNL[23]借鉴了DeepLog和LogAnomaly的优势, 通过2层LSTM完成日志模板和参数变量的异常判断, 改善了有模型性能. LogMerge[24]对提取的日志模板基于词向量加权求和后得到模板向量, 通过对2种类型日志的模板向量进行聚类操作获取簇中心向量, 实现了跨日志类型的异常检测. 模型方面采用了CNN+LSTM的组合. LogRobust[25]利用一个双向LSTM捕获来自日志模板序列前向和后向两个方向的依赖关系, 并应用注意力机制识别出那些对判别结果更重要的日志模板. 同时, 由于也使用了日志模板的语义表达, 对于噪声干扰有一定的鲁棒性. NoTIL[34]是一种用于检测日志消息时间间隔异常的算法, 通过滑动时间窗口对日志序列进行切分,并计数时间窗口内的每类事件生成该窗口的表示向量,输入LSTM来预测未来的时间窗口, 并基于实际结果与预测值间的误差判别异常. ADA[1]引入在线深度学习技术[35], 基于LSTM提出了一种自适应式的异常检测算法, 具备在线学习能力的同时, 还能够根据当前异常检测结果自动调整模型层数.

门控循环单元 (gated recurrent unit, GRU)[36]是另一种重要的循环神经网络, 基本原理和LSTM十分相似. PLELog[37]结合了有监督方法和无监督方法的优势, 通过对日志模板向量化后进行聚类, 然后基于概率标签估计的方法为训练集中没有标签的数据打上概率化的标签. 再以此输入带有注意力机制的GRU网络中训练.

采用LSTM或者GRU搭建日志异常检测模型是一个较普遍的做法, 但RNN类的模型需要顺序输入数据, 致使其无法实现数据的并行化处理, 也就限制了其在大流量日志数据条件下的性能表现. 近年来, 谷歌的Transformer模型[38]因其强大的快速并行能力在自然语言处理领域获得了广泛应用, Transformer在处理大流量输入数据方面的优势使有些学者将其引入日志分析任务中. HitAnomaly 算法[29]基于分层式的Transformer结构分别将日志序列中的模板(事件)序列和参数(变量)序列转化为两个向量表示, 再利用注意力机制对二者加权求和, 最后通过Softmax层得到异常概率分布. NeuralLog算法[28]采用了BERT模型[39]对日志消息所有单词进行词嵌入, 并对日志消息中所有的词向量求均值得到日志消息的特征向量, 最后输入基于Transformer的模型进行训练及预测. 值得注意的是,NeuralLog并未使用日志解析技术, 避免了日志解析错误给异常检测模型结果带来的影响.

变分自编码器 (variational auto-encoder, VAE)[40]是深度学习领域重要的生成模型之一, 广泛用于图像生成任务. VAE通过编码器将训练数据映射为隐空间内的低维变量, 再由解码器从隐空间中随机采样来生成训练数据的重构. 基于VAE的日志异常检测算法一般是以重构误差来判断异常或者直接给出异常概率.VeLog[6]以会话ID切分日志数据, 并构造日志执行计数矩阵和日志执行顺序矩阵, 输入VAE进行训练, 以此来识别日志模板在数量和执行路径上的异常. 该方法对于训练集中未出现的日志模板会判断为异常, 需将新出现的模板加入训练集对模型重新训练. 文献[26]提出的hybrid CAE and VAE framework将日志模板序列进行独热编码(one-hot encoding)后, 使用卷积自编码器 (convolutional auto-encoder, CAE)将其压缩以提取序列高层特征, 再输入VAE进行训练, 学习日志模板序列的正常模式.

生成对抗网络 (generative adversarial network,GAN)[41]作为另一种重要的深度生成模型, 也有研究人员将其用于日志分析任务. 文献[27]为解决日志数据不平衡的问题基于生成对抗机制设计了生成器和判别器, 通过二者博弈来相互提高性能, 直至收敛. 最后, 利用生成器可产生出逼近真实异常样本的模拟数据, 进而在检测时输出当前日志模板序列模式下后续可能事件正常或异常的概率分布.

上述算法在相应的各类数据集上取得了最高约0.99的F1-score性能表现.

5 研究重点及方向

5.1 日志消息的语义表征

日志属于软件开发者对系统实时状态的描述文本,这种特点令自然语言处理中的诸多词嵌入技术可以应用于日志分析当中并变得越来越重要. 独热编码属于最简单的编码方式, DeepLog、ADA、hybrid CAE and VAE framework等都采用了这种方式, 但独热编码存在维度灾难和语义鸿沟(即编码向量由于词汇表庞大而变得非常稀疏, 且所有向量均正交, 不能体现语义相似性), 使其应用受限. 相比之下, Word2Vec、FastText[42]、Glove[43]等词向量相关技术能更好地表现日志语义关系, 也被大量研究工作所采用, 如LogRobust、PLELog、LogMerge等, 但这几种技术并不能很好地解决一词多义的现象. 词表外词汇的出现在日志中十分普遍, 据文献[28]研究, 某些数据集(如BGL)中即使训练集达到80%时, 仍有超过80%的词汇在训练集中从未出现. 能否处理好词表外词汇是日志语义表征能力的重要体现. 有研究专门为日志分析提出了一种语义表征框架Log2Vec[44], 通过MIMICK算法[45]解决词表外词汇的向量表示, 但其字符级推算的方式难以获得有实际意义的词向量. NeuralLog算法采用BERT模型来表征日志语义, 不仅能够解决一词多义问题, 也可以在子词级别推算词表外词汇的含义, 获得相对更有意义的词向量. 总之, 语义表征是日志分析中的重要一环, 能够提高算法的鲁棒性, 在一定程度上抵抗日志不稳定性带来的影响.

5.2 模型在线更新机制

如前文所述, 现代软件产品多采用Dev Ops敏捷开发模式, 产品的持续集成、持续部署加速了其迭代更新, 从而也使得日志模式持续演进, 产生不稳定性. 而日志不稳定性会导致持续出现新的日志模板和更多的词表外词汇. 所以在设计有关算法时, 不得不考虑模型的持续更新能力, 以适应新出现的日志模式. 过往研究中, 主要有3种方法来进行模型更新: 一是定期对模型重新训练以适应新的日志模式; 二是基于运维人员对检测结果的反馈, 对模型就行及时修正, 如DeepLog、VeLog等; 三是引入在线学习机制, 如ADA等. 模型定期重新训练的方式不仅在实时性上满足不了生产要求,也会带来较大的计算和时间开销(特别是深度学习模型). 应该说运维人员参与到日志异常检测任务当中来是必要的, 特别是通过人工反馈的方式可以引入领域专家知识, 而这些是无法单纯凭借算法获得的. 但应考虑模型的在线更新机制的设计, 尽量减少重复训练带来的开销. 文献[46]提出了终身学习的日志异常检测方法, 通过反馈结果来对模型进行更新(而不是重新训练). 在线学习是一种重要的研究思路, 可以将数据以流的方式输入模型进行逐步优化的动态训练和预测,令模型更具扩展性.

5.3 算法的并行度和通用性

日志大体量和多类型的特点对检测算法提出了并行度和通用性要求. 首先, 不论是基于传统机器学习算法还是深度学习算法, 均需考虑算法部署于生产环境下的并行化能力, 以满足海量日志处理的需求, 例如文献[3]利用大数据相关技术实现日志的全流程并行处理, 使其具有实际应用能力. 同时, 在某些计算、存储资源不充沛的条件下, 还应当尽量减少日志分析处理过程中的计算和存储开销, 如ADA算法通过在线深度学习减少了在空间存储上的需求. 其次, 结合日志数据的异常模式和应用场景的多样化, 算法设计应尽可能具有一定的通用性, 或者只需要根据数据特征或场景需求进行微调即可快速应用, 如LogAD即是一种典型的组合式方法, 其应对复杂场景下多种日志模式的异常检测综合能力明显提高.

5.4 结果的可解释性和辅助决策

为了在智能运维场景下更好地进行故障预警和辅助运维人员进行事件处理, 日志异常检测任务不应停留在只检测当前日志是否出现异常, 也应注重检测结果的可解释性. 例如, 当前异常由何种特征提示、如何以运维人员能够看得懂的方式呈现、异常的相互关联问题、异常可能的影响范围如何等问题. 即在更高层次赋予检测结果良好的可解释性和辅助决策能力, 是该项技术的深化和延展. DeepLog、LogAD中都试图构建任务执行的工作流, 很好地印证了填补机器算法输出与人之间理解鸿沟的重要性. 特别地, 由于深度学习一般被认为是端到端的黑盒模型, 基于深度模型的算法可解释性较差, 目前已经有相关研究致力于获得检测结果的可解释性[47].

6 结束语

日志异常检测任务是智能运维发展的重要落地场景, 是机器学习和运维管理结合的重要一环. 大量研究已经表明, 将机器学习应用于日志分析当中, 可以有效应对当下数据中心日志体量急速膨胀导致分析难、管理难的问题. 文章对日志异常检测任务的典型流程、技术难点、相关研究工作和后续研究重点都做了详细阐述和分析, 对于该领域研究具有一定的参考价值.

附录

为了更清晰直观地比较各个算法的技术路径和优劣势, 文章给出了算法对比表, 如表A1所示.

表A1 各算法对比详情表

表 A1 (续) 各算法对比详情表

表 A1 (续) 各算法对比详情表

表 A1 (续) 各算法对比详情表

猜你喜欢

日志向量模板
高层建筑中铝模板系统组成与应用
铝模板在高层建筑施工中的应用
向量的分解
一名老党员的工作日志
特高大模板支撑方案的优选研究
读扶贫日志
Inventors and Inventions
雅皮的心情日志
雅皮的心情日志
向量垂直在解析几何中的应用