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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 提供实时日志智能聚类(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日志并进行多维度分析。
目录
相关文章
|
23天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
77 1
|
24天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1
|
28天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
51 0
|
2天前
|
Java
log4j异常日志过滤规则配置
log4j异常日志过滤规则配置
11 0
|
15天前
|
运维 安全 Ubuntu
`/var/log/syslog` 和 `/var/log/messages` 日志详解
`/var/log/syslog` 和 `/var/log/messages` 是Linux系统的日志文件,分别在Debian和Red Hat系发行版中记录系统事件和错误。它们包含时间戳、日志级别、PID及消息内容,由`rsyslog`等守护进程管理。常用命令如`tail`和`grep`用于查看和搜索日志。日志级别从低到高包括`debug`到`emerg`,表示不同严重程度的信息。注意保护日志文件的安全,防止未授权访问,并定期使用`logrotate`进行文件轮转以管理磁盘空间。
19 1
|
15天前
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
27 2
|
16天前
|
Ubuntu Linux 网络安全
/var/log/auth.log日志详解
`/var/log/auth.log`是Linux(尤其是Debian系如Ubuntu)记录身份验证和授权事件的日志文件,包括登录尝试(成功或失败)、SSH活动、sudo使用和PAM模块的操作。登录失败、SSH连接、sudo命令及其它认证活动都会在此记录。查看此日志通常需root权限,可使用`tail`、`less`或`grep`命令。文件内容可能因发行版和配置而异。例如,`sudo tail /var/log/auth.log`显示最后几行,`sudo grep "failed password" /var/log/auth.log`搜索失败密码尝试。
64 8
|
28天前
|
监控 Java 测试技术
日志框架到底是Logback 还是 Log4j2
日志框架到底是Logback 还是 Log4j2
20 0
|
29天前
|
XML 运维 监控
【深入探究 C++ 日志库清理策略】glog、log4cplus 和 spdlog 的日志文件管理策略
【深入探究 C++ 日志库清理策略】glog、log4cplus 和 spdlog 的日志文件管理策略
67 0

相关产品

  • 日志服务