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

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

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

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

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

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

主要应用场景:

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

功能演示

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

排障实战

线上发生异常的时候,往往会打印大量的错误日志,在下图中,是系统请求堵塞情况下,系统记录的日志,短短5分钟记录了3千多万行错误日志,而图中的两个尖峰到底是哪些日志突涨引起的?发生异常的根源又是什么?
一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)

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

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

排查了N个条件后,发现出现了"queue full"的错误,而这只是一个表象,到底什么原因导致队列堵塞呢?看来,还需要再过滤排查。
一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)

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

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

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

其他功能介绍

通过Pattern反查原始数据

在进行LogReduce时,相同pattern中变化部分(变量)会被"*" 号代替,SLS在进行reduce的时候,内部会为每条日志标记一个signature,通过signature可以反查原始日志, 如:
一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)

点击子Pattern count连接,查看原始日志。
一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)

Reduce精度动态调整

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

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后,一眼就能看到网卡异常信息。
一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)
一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)

Log4J日志

大量Java程序,使用Log4J记录日志,下图显示一个java应用的最近15分钟主要的错误日志分类。
一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)

Sql日志

从SQL的访问日志,可以过滤出延时超过一定阈值的日志,通过聚类后发现延时高的sql主要有2类,调查后发现,其中一类是数据库的索引没有正确设置导致。
一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)

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

后记

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

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

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

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

用户交流群
一眼看尽上亿日志-日志服务(SLS)智能聚类(LogReduce)

上一篇:使用AppFabric 承载WCF和WF服务-实例分析和说明


下一篇:SAP MM 物料成本价格修改历史的查询