目录
- 背景
- 第一部分
- 第二部分
- 第三部分
- 第四部分
- 参考文献及资料
背景
信息系统在运行过程中会产生海量的日志数据。按照系统类型分,主要有操作系统日志和应用日志,其中应用日志有:基础设施类平台日志(例如:vmware日志、openstack日志、K8s日志等)、应用服务进程日志。
程序中日志原生作用就是记录程序运行过程中关键步骤的状态数据和参数信息,当信息系统出现故障或异常的时候,运维和开发人员能通过查看系统日志,回溯甚至复现问题,并定位原因。这是传统运维的经典维护场景。
随着信息系统云化和分布式化,系统越加复杂和庞大,产生的日志更是海量级别的。如果仍然通过人工查看日志,没有任何自动化辅助机制,这个工作是繁杂和低效的。所以急需将这个过程抽象成自动化过程,利用人工智能方式进行智能辅助,甚至完全自动化分析定位。这个工作对于信息系统维护是极具价值的。
第一部分 日志模板挖掘
日志通常是运行程序产生,当前各类语言通常有自己的日志框架包实现,例如下面Spark源码:
1 | // core\src\main\scala\org\apache\spark\storage\memory\MemoryStore.scala |
运行中生成日志如下:
1 | 17/06/09 20:10:41 INFO storage.MemoryStore: MemoryStore started with capacity 17.7 GB |
通常日志中有相应的日志模板,运行中补充模板中参数数据。但是在实际日志数据分析中,通常没有这些模板信息,就需要通过通过海量日志数据进行分析,提炼有用的数据信息。
1.1 频繁项方法
日志数据本质是文本数据,均是由日志模板填充数据生成的。最朴素的想法就是对日志数据进行分词形成词向量,然后统计单词出现的频率,找出频繁集合其实就是日志模板。例如下面的HDFS服务日志案例:
1 | 081109 203615 148 INFO dfs.DataNode$PacketResponder: PacketResponder 1 for block blk_38865049064139660 terminating |
提取出两个日志模板:
1 | * INFO dfs.DataNode$PacketResponder: PacketResponder * for block * terminating |
其中最具代表性的算法是FPTree
(Frequent Pattern Tree)算法。该算法从Apriori算法
算法论文:清华/南开/腾讯的 FT-tree 开源实现:https://github.com/WeibinMeng/ft-tree
自然语言处理方法
深度学习方法
DeepLog 论文(包含模式检测、参数检测、工作流检测三部分):
https://acmccs.github.io/papers/p1285-duA.pdf
- 开源实现:https://github.com/wuyifan18/DeepLog
- 另一个开源实现,还实现了另外两种算法LogAnomaly和RobustLog,可切换:https://github.com/donglee-afar/logdeep
开源数据集收集
日志
国防科大的日志领域研究综述(日志监测部分比我前面列的老,但还提了基于源码的静态分析和基于虚拟机增强的日志内容改进两个方向,基本都是袁丁教授团队做的):
http://www.jos.org.cn/1000-9825/4936.htm
- morningpaper 博客关于静态分析的 lprof 论文解析:https://blog.acolyer.org/2015/10/08/lprof-a-non-intrusive-request-flow-profiler-for-distributed-systems/
- morningpaper 博客关于日志增强的 log20 论文解析:https://blog.acolyer.org/2017/11/03/log20-fully-automated-optimal-placement-of-log-printing-statements-under-specified-overhead-threshold/
香港中文大学的日志领域研究综述(比国防科大的新,加入了关于日志压缩、人机交互、语义等新方向):https://arxiv.org/pdf/2009.07237.pdf
荷兰代尔夫特理工大学的日志领域研究综述(2021 年,统计了不同方向的研究趋势):https://pdfs.semanticscholar.org/b3c1/e91f3f73ff1d63504fb8d522558baa7334d4.pdf?_ga=2.256964171.1591127296.1641452870-511869175.1640757218
加拿大滑铁卢大学的日志领域研究综述(2022 年,总结了各方向各算法的优劣):https://arxiv.org/pdf/2110.12489.pdf
香港中文大学团队收集的多篇日志异常检测相关论文和数据集(共87GB):
https://github.com/logpai/loghub
- 他们也做了各种现有算法的开源实现和自己的 Drain 算法进行横向测试对比,报告见:https://arxiv.org/pdf/1811.03509.pdf
- 华为开源的 NuLog 项目(采用MLM掩码语言模型,并复现了上一篇论文一样的对比):https://github.com/nulog/nulog
- IBM云数据中心团队改进和开源的 Drain3 包,加强了持久化,自定义参数替换等:https://github.com/IBM/Drain3
一个开源流式日志模板挖掘器。
- IBM 在 Drain3 基础上,通过公开文档爬虫获取事件 ID 的关键字描述,然后走语义分析相似度,来提取复杂变量类型(即除了常量、变量以外,新定义了sequential、optional 和 single-select 类型):https://arxiv.org/pdf/2202.07169.pdf
- 上海交通大学采用日志中的 punct 部分作为日志模式学习的来源,实现了一个 logpunk 系统,在 loghub 下对比,效果居然也好过其他算法:https://www.mdpi.com/2076-3417/11/24/11974/pdf
- 微软的 UniParser 论文,通过语义分析,识别训练集中某些常量为变量:https://arxiv.org/pdf/2202.06569.pdf
斯里兰卡莫拉图瓦大学/WSO2 公司的 vue4logs-parser 开源实现,直接利用倒排索引搜索相关性来完成模式过滤:https://github.com/IsuruBoyagane15/vue4logs-parser
IBM 研究院基于语言模型做的日志异常检测模型,对比了 fasttext 和 BERT 的效果:https://www.researchgate.net/publication/344693315_Using_Language_Models_to_Pre-train_Features_for_Optimizing_Information_Technology_Operations_Management_Tasks
香港中文大学的 LogZip 开源实现:
https://github.com/logpai/logzip
- 清华/阿里的 LogReducer 系统(用 C/C++ 重写了 logzip,并加上对特定数值型参数值的差分、关联和变长压缩优化),论文:https://www.usenix.org/system/files/fast21-wei.pdf
香港中文大学的 SemParser 论文,尝试用语义分析来命名模式中的参数位:https://arxiv.org/pdf/2112.12636.pdf
中山大学的 SwissLog 论文,和 RobustLog 一样关注模型的鲁棒性问题:https://www.researchgate.net/publication/346867203_SwissLog_Robust_and_Unified_Deep_Learning_Based_Log_Anomaly_Detection_for_Diverse_Faults
清华/南开/百度的 LogClass 开源实现:https://github.com/NetManAIOps/LogClass
北卡顾晓晖团队做日志异常检测的 ELT 系统(拆分为粗粒度的 MAV 和细粒度的 MFG 两层):http://dance.csc.ncsu.edu/papers/srds11.pdf
NEC 美国实验室/北卡做云系统工作流监控的 CloudSeer 系统:https://people.engr.ncsu.edu/gjin2/Classes/591/Spring2017/case-cloudseer.pdf
NEC 美国实验室 LogMine 系统:
NEC 美国实验室/蚂蚁金服做的 LogLens 系统(在 LogMine 基础上,和 ELK 的 Grok 设计结合;并加上了对 traceid 的判断处理,支持序列异常检测),论文:http://120.52.51.14/www.cs.ucsb.edu/~bzong/doc/icdcs-18.pdf
香港中文大学/华为的 POP 系统(和 LogMine 思路比较类似,在 Spark 上运行):http://www.cse.cuhk.edu.hk/lyu/_media/journal/pjhe_tdsc18.pdf
康考迪亚大学发表的 logram 论文(用 n-gram 来做日志解析):https://petertsehsun.github.io/papers/HetongTSE2020.pdf
加拿大麦克马斯特大学的日志序列异常检测开源实现,加上序列每一步 duration 子序列做神经网络特征:https://github.com/hfyxin/Ts-models-log-data-analysis
RedHat公司CTO办公室开源的Log Anomaly Detector项目(基于word2vec和SOM算法):https://github.com/AICoE/log-anomaly-detector
其他商业公司:
- Loomsystems(已被 serviceNow 收购,其对参数类型的 meter/gauge/timeless-gauge/histogram/invalid/root-cause 分类值得借鉴):https://www.loomsystems.com/hubfs/SophieTechnicalOverview.pdf
- coralogix(有基础的无关顺序的关联模式检测,对 XML/JSON 类型进行对象参数检测):https://coralogix.com/tutorials/what-is-coralogix-pattern-anomaly/
- zebrium(存 newsql,参数名称的自动识别值得借鉴,最后用 GPT-3 生成告警描述也很有趣):https://www.zebrium.com/blog/using-ml-to-auto-learn-changing-log-structures
参考文献及资料
1、CloudRCA: A Root Cause Analysis Framework
for Cloud Computing Platforms,链接:https://arxiv.org/pdf/2111.03753
2、logparser项目,链接:https://github.com/logpai/logparser
3、Syslog Processing for Switch Failure Diagnosis and Prediction in Datacenter Networks,链接:https://netman.aiops.org/wp-content/uploads/2015/12/IWQOS_2017_zsl.pdf