Fork me on GitHub

智能运维综述系列(日志处理)

目录

  • 背景
  • 第一部分
  • 第二部分
  • 第三部分
  • 第四部分
  • 参考文献及资料

背景

信息系统在运行过程中会产生海量的日志数据。按照系统类型分,主要有操作系统日志和应用日志,其中应用日志有:基础设施类平台日志(例如:vmware日志、openstack日志、K8s日志等)、应用服务进程日志。

程序中日志原生作用就是记录程序运行过程中关键步骤的状态数据和参数信息,当信息系统出现故障或异常的时候,运维和开发人员能通过查看系统日志,回溯甚至复现问题,并定位原因。这是传统运维的经典维护场景。

随着信息系统云化和分布式化,系统越加复杂和庞大,产生的日志更是海量级别的。如果仍然通过人工查看日志,没有任何自动化辅助机制,这个工作是繁杂和低效的。所以急需将这个过程抽象成自动化过程,利用人工智能方式进行智能辅助,甚至完全自动化分析定位。这个工作对于信息系统维护是极具价值的。

第一部分 日志模板挖掘

日志通常是运行程序产生,当前各类语言通常有自己的日志框架包实现,例如下面Spark源码:

1
2
// core\src\main\scala\org\apache\spark\storage\memory\MemoryStore.scala
logInfo("MemoryStore started with capacity %s".format(Utils.bytesToString(maxMemory)))

运行中生成日志如下:

1
17/06/09 20:10:41 INFO storage.MemoryStore: MemoryStore started with capacity 17.7 GB

通常日志中有相应的日志模板,运行中补充模板中参数数据。但是在实际日志数据分析中,通常没有这些模板信息,就需要通过通过海量日志数据进行分析,提炼有用的数据信息。

1.1 频繁项方法

日志数据本质是文本数据,均是由日志模板填充数据生成的。最朴素的想法就是对日志数据进行分词形成词向量,然后统计单词出现的频率,找出频繁集合其实就是日志模板。例如下面的HDFS服务日志案例:

1
2
3
4
5
6
7
8
081109 203615 148 INFO dfs.DataNode$PacketResponder: PacketResponder 1 for block blk_38865049064139660 terminating
081109 203807 222 INFO dfs.DataNode$PacketResponder: PacketResponder 0 for block blk_-6952295868487656571 terminating
081109 204005 35 INFO dfs.FSNamesystem: BLOCK* NameSystem.addStoredBlock: blockMap updated: 10.251.73.220:50010 is added to blk_7128370237687728475 size 67108864
081109 204015 308 INFO dfs.DataNode$PacketResponder: PacketResponder 2 for block blk_8229193803249955061 terminating
081109 204106 329 INFO dfs.DataNode$PacketResponder: PacketResponder 2 for block blk_-6670958622368987959 terminating
081109 204132 26 INFO dfs.FSNamesystem: BLOCK* NameSystem.addStoredBlock: blockMap updated: 10.251.43.115:50010 is added to blk_3050920587428079149 size 67108864
081109 204324 34 INFO dfs.FSNamesystem: BLOCK* NameSystem.addStoredBlock: blockMap updated: 10.251.203.80:50010 is added to blk_7888946331804732825 size 67108864
081109 204453 34 INFO dfs.FSNamesystem: BLOCK* NameSystem.addStoredBlock: blockMap updated: 10.250.11.85:50010 is added to blk_2377150260128098806 size 67108864

提取出两个日志模板:

1
2
* INFO dfs.DataNode$PacketResponder: PacketResponder * for block * terminating
* INFO dfs.FSNamesystem: BLOCK* NameSystem.addStoredBlock: blockMap updated: * is added to * size *

其中最具代表性的算法是FPTree(Frequent Pattern Tree)算法。该算法从Apriori算法

算法论文:清华/南开/腾讯的 FT-tree 开源实现:https://github.com/WeibinMeng/ft-tree

自然语言处理方法

深度学习方法

DeepLog 论文(包含模式检测、参数检测、工作流检测三部分):

https://acmccs.github.io/papers/p1285-duA.pdf

开源数据集收集

日志

一个开源流式日志模板挖掘器。

  • 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

参考文献及资料

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

本文标题:智能运维综述系列(日志处理)

文章作者:rong xiang

发布时间:2022年03月28日 - 13:03

最后更新:2022年10月25日 - 23:10

原始链接:https://zjrongxiang.github.io/posts/5b6d428b/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%