一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介: 提供实时日志智能聚类(LogReduce)功能,根据日志的相似性进行聚类,快速掌握日志全貌,也不用担心重要信息被淹没在海量日志中,为系统稳定运行保驾护航!

业务的高速发展,对系统稳定性提出了更高的要求,各个系统每天产生大量的日志,你是否曾担心过:

  • 系统有潜在异常,但被淹没在海量日志中
  • 机器被入侵,有异常登录,却后知后觉
  • 新版本上线,系统行为有变化,却无法感知

这些问题,归根到底,是信息太多、太杂,不能良好归类,同时记录信息的日志,往往还都是无Schema,格式多样,归类难道更大。

现在日志服务,提供实时日志智能聚类(LogReduce)功能,根据日志的相似性进行归类,快速掌握日志全貌,主要功能和特性:

  • 支持任意格式日志:Log4J、Json、单行(syslog)
  • 亿级数据,秒级出结果
  • 日志经任意条件过滤后再Reduce
  • 对Reduce后Pattern,根据signature反查原始数据
  • 不同时间段Pattern比较
  • 动态调整Reduce精度

主要应用场景:

  • DevOps(问题定位、异常检测、版本回归等)
  • 安全、入侵检测
  • 审计

功能演示

接下来,我们以Devops场景为例,看看LogReduce如何快速定位应用故障。

排障实战

线上发生异常的时候,往往会打印大量的错误日志,在下图中,是系统请求堵塞情况下,系统记录的日志,短短5分钟记录了3千多万行错误日志,而图中的两个尖峰到底是哪些日志突涨引起的?发生异常的根源又是什么?
image

通常的处理方式,总是不停过滤,排除无关错误日志,如:

ERROR not WARNING not quota not InternalServerError not sync not RPCChannelBase.cpp not tcpcomponent.cpp  not easy_connection.c

排查了N个条件后,发现出现了"queue full"的错误,而这只是一个表象,到底什么原因导致队列堵塞呢?看来,还需要再过滤排查。
image

然后,有了”日志聚类“功能后,只要一次点击,通过LogReduce快速聚类,结果一目了然:

  • 最多的错误,是3000W+多条queue full,是堵塞的表象
  • 其次,是写入quota超过限制的错误,和堵塞无关
  • 接着,底层网络请求出现timeout,对于队列模型,大量的timeout很容易引起堵塞
  • 最后,第四类日志pattern中,显示访问某个服务,获取worker访问地址出现timeout,从pattern中,可定位问题机器的ip和端,直接确定异常根源。
    image

通过以上简单例子,可以看到,海量日志经LogReduce处理后,异常归类非常清楚,大大提高故障排查效率。

其他功能介绍

通过Pattern反查原始数据

在进行LogReduce时,相同pattern中变化部分(变量)会被"*" 号代替,SLS在进行reduce的时候,内部会为每条日志标记一个signature,通过signature可以反查原始日志, 如:
image

点击子Pattern count连接,查看原始日志。
image

Reduce精度动态调整

不同日志特征不尽相同,默认相似度计算,不一定能完全满足,可能导致聚类结果过于粗略或细节太多,在这种情况下,可以通过动态聚类精度,获取/隐藏更多细节。
image

Pattern对比

在新版本上线,往往希望知道,有哪些新出现的日志类别,哪类日志在数量上有明显的抖动,这样的版本回归对比需求,可以使用LogReduce + cmp来满足(控制台后续会提供LogCompare的专门页面)。

ERROR | select 
                v.signature,  
                v.pattern, 
                coalesce(v.cmp[1],0) as count_now, 
                coalesce(v.cmp[2],0) as count_before, 
                coalesce(v.cmp[1],0) - coalesce(v.cmp[2],0) as count_diff 
                    from (
                        select 
                            p.signature as signature ,
                            arbitrary(p.pattern) as pattern , 
                            compare(p.count,300) as cmp 
                            from 
                                (select log_reduce() as p from log) group by p.signature
                        )v  order by count_diff desc

更多类型日志场景

Syslog

/var/log/messages作为系统核心日志文件,记录了系统运行时重要信息,如磁盘、网络、内存等各类硬件错误信息,也包括root权限执行的各命令,系统登录等重要事件,对于故障诊断、入侵检测都是首要关注的文件。
同时,也由于日志内容复杂多样,格式不统一,未过滤定义的事件,往往容易淹没在海量日志中。通过LogReduce,可快速合并相似pattern,发现异常事件。

如下图中,将几百万事件快速聚合成几十个Pattern后,一眼就能看到网卡异常信息。
image
image

Log4J日志

大量Java程序,使用Log4J记录日志,下图显示一个java应用的最近15分钟主要的错误日志分类。
image

Sql日志

从SQL的访问日志,可以过滤出延时超过一定阈值的日志,通过聚类后发现延时高的sql主要有2类,调查后发现,其中一类是数据库的索引没有正确设置导致。
image

通过以上样例可以发现,日志服务(SLS)提供的日志聚类功能,对于日志的样式无任何限制,只会根据日志相似性,提取出通用Pattern,快速获取日志的整体概览。

后记

围绕日志,挖掘其中更大价值,一直是我们团队所关注。在原有日志实时查询基础上,今年SLS在DevOps领域完善了上下文查询、实时Tail和智能聚类,以提高问题调查效率;同时在日志分析上,提供多种时序数据的异常检测和预测函数,来做更智能的检查和预测;最后,数据分析的结果,可以触发报警,并调用webhook进行关联行动。
image

在日志智能聚类上,后续我们计划:

  • 根据Pattern的频率变化,结合机器学习算法,自动检测出异常Pattern
  • 提供LogReduce cmp函数并集成在控制台,简化复杂sql的编写
  • 加入反馈机制,如对reduce结果打分,以提高reduce的准确度

产品链接
http://www.aliyun.com/product/sls

用户交流群
image

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
9天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
107 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
209 3
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1619 14
|
1月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
30 0
|
1月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
181 0
|
1月前
|
存储 分布式计算 NoSQL
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
39 0
|
1月前
|
缓存 Linux 编译器
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
53 0
|
2月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
2月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
148 9
|
3月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
129 3

相关产品

  • 日志服务