目录
- 术语说明
- 背景
- 第一部分 机器学习日志分析的挑战
- 第二部分
- 第三部分
- 第五部分 总结
- 参考文献及资料
背景
当线上生产系统出现问题时,运维人员(SRE
)通常会第一时间查看分析系统的历史日志,然后对问题原因进行定位。这是一个繁杂且耗时的工作,所以自然会想到能否通过机器学习实现对日志的自动分析。
机器学习分析日志主要优点:
- 快速。缩短定位异常原因的时间,远大于手动效率;特别是面对云基础设施海量设备,自动化和智能化意义重大;
- 主动学习。会主动的发现异常模式,这些模式通常是人为分析的盲点;
- 提前发现隐患。可提前检测异常发生前兆日志模式,提前预警;
第一部分 机器学习日志分析的挑战
1.1 监督vs无监督vs半监督
机器学习按照是否需要标签数据,通常分为监督和无监督两种学习模式。对于海量日志数据,如果靠人工进行梳理、打标签,这个工作量是庞大的。另外信息系统的架构和代码也在不停演进更新,原来的标签会逐渐失效,即历史标签保鲜性。人工标签是长期持续的工作,成本较大。所以监督模式更适合用于通用软件产品的日志分析,例如Mysql
、Elasticsearch
、Redis
等开源组件。通常线上产品升级周期较长,所以历史标签的时效性较长。
工业界的实践更建议采用无监督方式。特别是迭代较快的自研应用系统。当然可以适当配合小规模的人工标签数据,采用半监督方式进行落地。
1.2 传统机器学习vs深度学习
近年来学界和工业界逐步有相关研究和落地案例。按照是否是神经类算法,分为传统机器学习和深度学习两个方向。
传统机器学习,对于日志数据的单词或语句模式进行概率统计,提取和人为构造统计特征。然后使用相关分类算法检测异常模式。但是通常传统机器学习分类算法都是监督模式,例如随机森林、Xgboost
、SVM
等,工业落地需要持续投入人力,成本较高。
深度学习方向,近年来最具影响力的论文是Min Du
、李飞飞发表的论文:《DeepLog: Anomaly Detection and Diagnosis from System Logs through Deep Learning
》。深度学习的特点就是模型需要看大量的日志数据,模型训练收敛需要较长的时间,整个训练需要提供海量日志数据的输入。工业界落地需要企业具备较大规模的分布式机器学习平台用来支撑模型参数的训练。
1.3 非结构化&噪声
信息系统的日志数据通常是非结构化的文本信息。这些日志都是源码中对系统运行状态进行文本记录,通常日志文本使用日志处理包进行处理,会具备一定的结构的。
例如下面Java程序的输出日志,每条日志由日志产生时间、日志级别(INFO
)、业务类别、日志内容、设计Java程序的Class类名和源码函数。
1 | 2021-05-14 22:20:12,083 | INFO | ResourceManager Event Processor | container_e67_1620959157525_31531_01_000001 Container Transitioned from ACQUIRED to RUNNING | RMContainerImpl.java:420 |
其中非结构化文本内容主要是指日志内容。既然是文本类数据,自然会想到使用NLP
技术进行处理。
通常日志文件由多个进程写入,这就涉及日志的分类。对于规范类日志数据可以在日志内容中标识进程名。而对于非规范的日志,通常使用算法来完成,例如最长公共子串(Longest common substring
)和最长公共子序列。
日志分析中正常日志远远大于异常日志,很容易被一些噪声日志所影响。
1.4 性能容量数据&日志&Aiops
近些年使用人工智能辅助运维的应用落地较多,通常称为AIOps (Artificial intelligence for IT operations)
。企业级Aiops
平台建设中,日志分析系统应当属于子系统。
当信息系统发生或即将发生异常时候,性能指标数据通常也会出现相应异常。所以对于系统异常检测可以结合性能容量异常检测子系统,进行综合考虑。
第二部分 DeepLog
实现原理分析
油管视频地址:https://www.youtube.com/watch?v=At19CBGpbMI
第三部分 代码实现
第四部分 总结
参考文献及资料
1、DeepLog: Anomaly detection and diagnosis from system logs through deep learning
,链接:https://www.cs.utah.edu/~lifeifei/papers/deeplog.pdf