AIOps应用:日志数据的应用

 

AIOps中的日志数据应用

背景

随着科技的不断发展,日志数据在软件系统的各个领域中扮演着越来越重要的角色。它记录了系统中的事件、活动和状态,为我们了解系统提供了宝贵的信息。

在运维领域,日志数据对于监控和维护系统的正常运行至关重要。通过收集和分析日志数据,运维团队可以追踪系统运行状况、检测问题和异常情况,并迅速采取行动。在发生故障时,日志数据也有助于帮助人员确定故障根本原因,加速故障排除,提高系统可用性。通过对其有效的管理和分析,可以为组织提供更高的可靠性、效率和安全性。

总之,日志数据在运维领域扮演着不可或缺的组成部分。那么在智能运维(AIOps)方面,日志又能发挥出哪些重要价值呢?本文将会围绕这一点进行阐述,并拓展介绍一些相关知识。

在具体展开叙述之前,这里先通过下面几个方面对日志数据本身做一些介绍。

 

 

什么是日志

日志(Log)是软件系统在运行过程中产生的一类重要数据,它记录了有关应用程序、服务器或 IT 系统的操作、活动和状态的信息。通常日志中还会包含一些描述性数据(如时间戳,等级等),以便为日志内容提供更丰富的关联(如日志上下文,日志分组)。

为什么日志很重要

日志提供了详细且易于访问的系统信息记录,通过这些记录,人们可以深入的洞察系统整体和细节的运行状况(取决于Log的打法)。如果不访问这些日志,就不可能了解程序运行过程中的状态,自然也就没法在系统出现问题时排查故障。因此,日志在软件系统领域中具有重要作用。下面对日志的用途进行一些列举:

1. 问题排查和故障排除:日志记录了系统、应用程序或设备的运行情况,有助于识别问题和故障。当出现错误或异常情况时,日志可以提供有关问题发生的时间、原因和位置的信息,帮助迅速解决问题。

2. 性能分析: 日志记录了应用程序或系统的性能指标,如响应时间、吞吐量、资源利用率等。这些信息可用于性能优化和容量规划。

3. 安全监测: 安全日志记录了系统的安全事件,有助于检测潜在的安全威胁和入侵尝试。日志可以提供关于异常活动的信息,以便进行安全审核和响应。

4. 合规性和审计: 许多行业和法规要求组织记录和保留特定类型的日志,以便进行审计和合规性检查。日志有助于证明组织的合规性,并提供了历史操作的记录。

5. 数据分析: 日志中的数据可以用于分析用户行为、趋势和模式。这对于改进产品、服务和业务策略非常有帮助。

6. 事件描述和决策支持: 日志可以用于讲述事件的故事,帮助人们理解发生了什么事情。这有助于做出决策、规划未来和学习过去的经验。

7. 持续改进: 通过分析日志,可以发现问题和改进机会,从而不断提高系统、应用程序和业务流程的效率和质量。

8. 追溯历史记录: 日志记录了操作的历史,可以用于追溯过去的事件和活动。这对于法律调查、纠纷解决和问题溯源非常重要。

总的来说,日志是一种重要的信息资源,可用于监控、分析、管理和改进各种活动和系统。在不同软件系统中,日志的具体应用和好处可能有所不同,但它们通常都有助于提高透明度、决策支持和问题解决。

 

日志文件有哪些类型

日志文件通常可以根据其内容和用途分为不同类型。以下是一些常见的日志文件类型:

1. 系统日志(System Logs): 这些日志记录了操作系统的运行和性能信息。它们包括启动和关机信息、硬件故障信息、系统错误和警告,以及系统资源的使用情况。在不同操作系统中,这些日志可能有不同的名称,如在Linux系统中通常为/var/log下的文件,Windows系统中为事件查看器(Event Viewer)中的系统日志。

2. 应用程序日志(Application Logs): 这些日志记录了特定应用程序的活动和事件。应用程序日志可以包括应用程序错误、警告、信息性消息和调试信息。开发人员和支持团队经常使用这些日志来排查和解决应用程序问题。

3. 安全日志(Security Logs): 安全日志记录了与系统和网络安全相关的事件。这包括登录和注销信息、安全策略违规、恶意软件检测、入侵检测和其他安全事件。这些日志对于监控和响应潜在的安全威胁至关重要。

4. 访问日志(Access Logs): 这些日志通常由网络服务器、网站和应用程序生成,记录了用户或客户端对资源的访问请求。访问日志包括访问时间、访问的资源、请求方法、用户代理信息和响应代码。它们对于分析网站流量、用户行为和性能优化非常有用。

5. 数据库日志(Database Logs): 数据库日志记录了数据库管理系统(DBMS)的活动,包括数据库的事务、查询、备份和还原操作。这对于数据库管理员来说是重要的,因为它们可以用于维护和故障排除数据库。

6. 应用程序性能日志(Application Performance Logs): 这些日志用于记录应用程序的性能指标,如响应时间、吞吐量、资源利用率等。它们通常用于性能监控和优化。

7. 自定义日志: 组织和开发人员可以创建自定义日志文件,以记录特定应用程序、服务或系统的定制信息。这些日志可以根据特定需求来设计,用于解决特定问题或支持特定用例。

8. 其他日志: 除上述类型外,还有许多其他特定领域的日志,如网络设备日志、应用程序服务器日志、虚拟化环境日志等,都根据其特定需求和用途而存在。

 

日志管理面临哪些挑战

日志管理面临许多挑战,特别是在大规模系统和复杂网络环境中。以下是一些日志管理中常见的问题:

1. 大数据量: 大规模系统和应用程序生成大量日志数据,这可能导致存储和处理压力。处理大数据量的日志需要有效的存储和分析策略。

2. 日志格式多样性: 不同应用程序和系统可能以不同的格式生成日志,包括文本、JSON、XML等。处理各种格式的日志可能需要适应性很强的工具和技术。

3. 日志碎片化: 日志数据通常分散在多个服务器、设备和应用程序中,导致碎片化的日志数据。集中管理和分析这些碎片化的日志可能具有挑战性。

4. 日志滚动和保留策略: 确定何时滚动(轮替)和保留日志数据,以避免过度存储和满盘,同时又保留足够的历史数据以进行审计和故障排除,是一个重要的挑战。

5. 性能开销: 日志记录对系统性能有开销。过多的日志记录可能影响应用程序和系统的性能,需要权衡记录详细信息和性能开销之间的关系。

6. 隐私和合规性: 一些日志可能包含敏感信息,如用户数据或隐私信息。处理这些日志时需要遵守数据隐私法规和合规性要求,同时确保数据的安全性。

7. 实时监控: 在实时监控和分析日志数据时,需要能够迅速检测问题和异常情况。建立实时监控系统可能需要高效的工具和流程。

8. 数据存储和备份: 长期存储和备份大量日志数据可能需要大量的存储资源和成本。有效的数据存储和备份策略是必要的。

9. 分布式环境: 在分布式系统和云环境中,日志数据可能分布在多个地理位置和服务器之间,需要跨网络进行管理和收集。

10. 自动化和分析: 有效地分析和挖掘日志数据以发现有用的信息和模式需要自动化工具和技术,这也是一个挑战。

 

 

在AIOps中的应用

日志、指标、链路追踪数据是运维工作中最为核心的监控和分析对象,相较于指标和链路追踪数据,日志是内容最为丰富且来源充足的一类数据, 系统的异常或者性能下降一般会在日志中优先体现出来。因此, 应用AI技术为Ops赋能,实时或准实时捕获系统运行状态异常以实现日志分析自动化,是未来实现全面智能运维的重要途径之一。

日志数据的应用很广泛, 主要包括异常检测、故障预测、行为分析和性能诊断等。日志的异常检测是指在数据中发现与预期行为不符的模式的问题,这些不合格的模式通常被称为不同应用领域中的异常情况、不一致的观察结果、意外情况等。本文会主要对日志异常检测方面做较为详细的阐述。

 

日志异常检测的一般流程

由于现有系统的规模和复杂性不断增加,手动检查日志以发现异常变得愈发不可行。因此,针对日志信息进行自动异常检测的需求越来越迫切。一般而言,现有的日志异常检测技术通常分为四个阶段:1.日志采集与预处理;2.日志解析;3.特征提取;4.异常检测;且不同的日志不同的系统在对应阶段可采用的方法种类不一。

日志采集与预处理

日志采集和预处理是日志异常检测的第一步。日志数据广泛散布于系统各个节点和组件,特别是在分布式和大型软件环境下,不同源头持续生成和积累着这些关键信息。利用如Logstash、Filebeat、Fluentd、Kafka等工具,能够以持续且实时的方式采集数据,实现数据的集中存储或通过发布-订阅机制传递给消费者,以供后续处理。而在日志数据被采集后,预处理的主要任务是根据具体需求替换日志数据(如日期、IP等),剔除重复或无效信息(重复日志,缺失日志等),确保后续的分析工作更加准确和高效。

日志解析

 

 

在采集到日志数据并做了一定的预处理后,就可以对这些数据进行解析了。日志解析是对半结构化的日志数据进行深入分析的关键步骤,旨在从日志中提取事件模板以供后续特征提取和分析。

 

一条典型的日志数据可以分解为两部分:日志头和日志内容。日志头包括时间戳、日志级别等基本组成。而日志内容部分则包含了日志的核心信息,是非结构化的自由文本(记录事件发生的细节),通常由程序开发者在代码中预先埋点编写的输出语句生成。这部分消息包括字符串常量和参数变量,其中字符串常量被称为日志模板,它表明了该条日志的类别和语义描述,而参数变量则反映了系统状态的关键变量的取值,如对象ID、内存消耗、执行时间等。

 

日志解析的目的就是提取并保留原始日志消息内容中的常量部分,然后用通配符替换变量,从而使原始的非结构化日志解析结构化日志,其意义在于:

1. 统一结构:它将不同结构的日志标准化成两部分,即日志模板和参数,确保了事件的唯一性,并提供了详细信息。

2. 压缩日志:多条日志可能共享相同的日志模板,从而将大量日志消息压缩成少数几个模板,减少了日志数量。

3. 便于处理:解析后的日志可以更轻松地进行大规模处理,转化为对模板和参数的分析,避免对原始无结构化日志进行复杂的分析,可方便供下游日志异常检测使用。

 

传统方式下会采用正则匹配的方式去解析日志,但随着日志的量级和复杂度的提升,正则匹配的缺点也逐渐暴露出来:

1. 耗时且效率低:手动编写正则表达式规则耗时,且效率较低。

2. 依赖特定领域知识:正则表达式规则需要针对特定系统的日志格式,不具备通用性。

3. 难以应对大规模和多样化数据:对于大规模和不同风格的日志数据,正则表达式效率较低且难以应对。

4. 对运维人员要求高:需要运维人员具备深入的领域知识和经验。

 

日志解析面临的问题

日志数据的以下特点使得日志解析在实践落地的过程中需要考虑更多的因素:

1. 非/半结构化的特征:日志数据不像指标和调用链数据,具备统一的格式,日志数据是非结构化(或半结构化)的,且没有统一标准,这就使得日志的格式自由度非常大

2. 模式持续变化:由于系统升级和应用更新,日志输出格式会持续变化,导致先前训练数据生成的模型效果下降,甚至使过去的异常检测模型失效

3. 解析的不稳定性:解析错误可能导致日志消息产生不准确的特征数据

4. 需要高计算和存储要求:由于日志种类繁多且规模庞大,需要大量的存储计算资源和实时处理能力,特别是对于深度学习算法,还需要昂贵的GPU资源来训练和预测模型

5. 算法和模型可移植性差:不同系统的日志具有不同的特征模式,基于不同领域数据集研究而得的模型难以实现算法可移植性。需要采用组合式算法来处理不同异常模式以提高可移植性。

 

 

日志解析常用算法

目前,自动化日志解析的工具有很多,按照技术实现的方式可以归纳为以下几种:

1. 基于源代码的日志解析:从源代码中搜索日志打印语句,然后根据这些日志打印语句解析日志模板。

1. 优点:算法思想简单易懂,只需要根据源代码设置对应的规则,然后根据规则匹配日志模板即可;直接从源码下手,获取的日志模板准确率高;

2. 缺点:需要有能访问到系统的源代码权限;无可移植性;无法应对动态的日志模式变化;耗时耗力;

2. 基于频繁模式挖掘的日志解析算法:在不同日志消息中,假设频繁出现的词为日志模板的常量,通过挖掘频繁出现的词,组成日志的模板。如SLCT,LogCluster,FT-tree等算法

3. 基于聚类的日志解析算法:通过计算日志文本之间的相似度对日志进行聚类,从而解析出日志模板。如LKE,LogSig,LogMine等算法

4. 基于启发式的日志解析算法:利用各种启发式规则对日志进行解析,如POP、Drain等算法

6. 其他日志解析算法:如Spell利用LCS(最长公共子序列)进行在线流式解析日志;LogStamp利用Bert先对日志进行向量化,再利用DBSCAN进行聚类,最后生成一个分类器分别模板的变量和常量

PS. 基于大模型的日志解析算法:最近火热的大模型也可被用于日志解析,一般做法如下:默认用大模型解析的是最准的模板(不存在聚类精度),后续日志先匹配已有模板(相似度比较),低于阈值的认为是新类日志,再由大模型生成新模板。此种做法的好处是避免所有日志都喂给大模型,造成过高的成本损耗

嘉为鲸眼日志聚类,结合启发式算法和聚类算法,助力可观测性更上一层楼

 

 

 

 

 

特征提取

一般提取的特征包括日志模板计数(转换为指标)、模板序列(需要划分时间窗口/会话窗口)、文本语义、时间间隔、变量取值和变量分布。这些特征的变化反映出系统状态的异常情况。

事件计数用于检测某一类型事件数量的显著增加或减少,例如登录失败日志数据的突然增多可能表示安全问题。日志序列反映正常事件发生的顺序规律,例如虚拟机生命周期从创建到删除的出现的日志序列。文本语义利用NLP技术分析日志文本的语义来检测异常。时间间隔用于计算两条日志消息之间的时间差,异常的时间间隔可能暗示性能问题。变量取值检测参数变量是否超出正常范围,例如内存使用异常。变量分布主要是分析参数变量的取值分布,例如检测源IP地址分布密度异常高可能表示潜在威胁。

现有研究通常结合这些特征来从多个维度反映系统的当前状态,以实现日志异常检测。

很多通用型的日志分析产品(不做特定日志的异常检测),在提取出基于模板生成的指标特征,变量特征后,就可以结合固定阈值和统计学算法去做异常检测了。

异常检测

日志异常检测的方法可以粗略的分为统计学方法,传统机器学习方法和深度学习方法,需要说明的是,大多数方法都是需要结合其他算法使用,这里只做简单的概括:

统计学方法:

- 原理:通过将日志数量,日志解析后基于模板提取的计数特征,分布特征转换为指标,通过检测指标的异常与否去判断日志是否发生了异常

- 优点:硬件依赖性最低,可解释性最好,实现简单

- 典型算法:n-sigma,箱线图,饼图,固定阈值等单指标异常检测算法

- 限制:仅能从简单统计学的角度去发现日志的异常,无法利用更多的日志特征信息

传统机器学习方法:

- 优点:硬件依赖性低,可解释性一般

- 典型算法:降维、聚类、关联分析的传统无监督机器学习算法

- 限制:传统机器学习方法在提取高级特征或全局特征方面有限,尤其在日志文本的语义识别和处理长距离依赖方面表现不如深度学习。

深度学习方法:

- 优点:能够处理语义识别和长距离依赖等问题,提供更高的模型容量。

- 典型算法:长短期记忆网络(LSTM)、双向长短期记忆网络(Bi-LSTM)、变分自编码器、NLP相关技术、生成对抗网络、Transformer等。

- 限制:深度学习方法通常是黑盒模型,解释性较差。深度模型参数庞大,训练时间长,资源消耗多。

 

下面是HDFS块日志可能出现的异常类型:

 

 

综合而言,异常检测任务本质上是构建一个二分类器,用于对新到达的日志消息进行分析并推断其是否正常或异常。而日志数据通常具有数量大,模式多,更新快,异常数据少的特点,因此在实际使用中无监督的方法更受欢迎,也更容易实现自动化异常检测。针对不同类型的日志异常一般会采用不同的方法,选择何种方法取决于具体应用场景和需求。

 

场景落地通常需要考虑的问题

在日志异常检测场景的落地过程中除了算法的选择外,通常还需要考虑以下问题:

1. 如何构建数据流(采集、传输、解析、存储)以满足日志大数据量的特点

2. 如何兼顾数据流转+算法实现的耗时和内部对日志异常检测的时间要求,通常实时的日志异常检测会对及时性有较高的要求

3. 日志解析算法通常至少是O(n)的时间复杂度,因此必须考虑并行分析,如何结合业务特性,大数据技术和算法层面去做并行的数据处理。如可从业务、组件、日志等级等角度先对日志分区,再分别做异常检测,而不是“大锅烩”,也可人工审核模板归纳为先验模板,后续提升匹配效率等。

4. 算法的通用性要求,面对更新迭代较快的系统和应用,能否保持实时更新和不同数据集间的移植

5. 可解释性要求,解析算法和异常检测算法需要对结果做出解释,赋予检测结果良好的可解释性和辅助决策能力

嘉为蓝鲸日志平台,分布式离线训练模型,在线实时模型应用,准确识别新模板及数量异常变化,第一时间掌握日志情况,让日志异常无处可逃。

 

新类日志告警

 

日志聚类数量异常

总结

日志异常检测在智能运维领域的应用具有重要意义。随着数据中心日志体量的急速膨胀,处理和管理日志数据成为了巨大挑战。近年来越来越多的研究成果也已经用于日志异常检测场景,助力这一场景变得更加智能化。

日志异常检测核心的步骤包括日志收集、日志解析、特征提取以及异常检测,其中日志解析和异常检测是最关键的环节,需要不断改进以适应不断变化的数据和需求。尽管日志解析技术已经相对成熟,但在多样性的日志格式和内容方面仍然存在挑战。目前,相关解析工具已经得到广泛应用,为智能运维带来了更多可能性。

未来,日志异常检测领域将继续发展,包括更加智能的日志解析方法和更准确的异常检测算法,以满足不断增长的智能运维需求,使得智能运维成为更为普遍和高效的实践。

posted @ 2023-11-22 15:41  故君子慎为善  阅读(548)  评论(0)    收藏  举报