SLS机器学习最佳实战:日志聚类+异常告警

作者:神秘网友 发布时间:2020-10-06 09:35:38

SLS机器学习最佳实战:日志聚类+异常告警

SLS机器学习最佳实战:日志聚类+异常告警

为什么80%的码农都做不了架构师?>>>   SLS机器学习最佳实战:日志聚类+异常告警

摘要: 围绕日志,挖掘其中更大价值,一直是我们团队所关注。在原有日志实时查询基础上,今年SLS在DevOps领域完善了如下功能: - 上下文查询 - 实时Tail和智能聚类,以提高问题调查效率 - 提供多种时序数据的异常检测和预测函数,来做更智能的检查和预测 - 数据分析的结果可视化 - 强大的告...

  • SLS机器学习介绍(01):时序统计建模
  • SLS机器学习介绍(02):时序聚类建模
  • SLS机器学习介绍(03):时序异常检测建模
  • SLS机器学习介绍(04):规则模式挖掘
  • SLS机器学习介绍(05):时间序列预测

  • 一眼看尽上亿日志-SLS智能聚类(LogReduce)发布
  • SLS机器学习最佳实战:时序异常检测和报警
  • SLS机器学习最佳实战:时序预测

围绕日志,挖掘其中更大价值,一直是我们团队所关注。在原有日志实时查询基础上,今年SLS在DevOps领域完善了如下功能:

  • 上下文查询
  • 实时Tail和智能聚类,以提高问题调查效率
  • 提供多种时序数据的异常检测和预测函数,来做更智能的检查和预测
  • 数据分析的结果可视化
  • 强大的告警设置和通知,通过调用webhook进行关联行动
    SLS机器学习最佳实战:日志聚类+异常告警

今天我们重点介绍下,日志只能聚类和异常告警如何配合,更好的进行异常发现和告警

2.1 实验数据

一份Sys Log的原始数据,,并且开启了日志聚类服务,具体的状态截图如下:

SLS机器学习最佳实战:日志聚类+异常告警

通过调整下面截图中红色框1的大小,可以改变图中红色框2的结果,但是对于每个最细粒度的pattern并不会改变,也就是说:子Pattern的结果是稳定且唯一的,我们可以通过子Pattern的Signature找到对应的原始日志条目。

SLS机器学习最佳实战:日志聚类+异常告警

2.2 生成子模式的时序信息

假设,我们对这个子Pattern要进行监控:

msg:vm-111932.tc su: pam_unix(*:session): session closed for user root
对应的 signature_id : __log_signature__: 1814836459146662485

我们得到了上述pattern对应的原始日志,可以看下具体的数量在时间轴上的直返图:

SLS机器学习最佳实战:日志聚类+异常告警

上图中,我们可以发现,这个模式的日志分布不是很均衡,其中还有一些是没有的,如果直接按照时间窗口统计数量,得到的时序图如下:

__log_signature__: 1814836459146662485 |  
select 
    date_trunc('minute', __time__) as time, 
    COUNT(*) as num 
from log GROUP BY time order by time ASC limit 10000

SLS机器学习最佳实战:日志聚类+异常告警

上述图中我们发现时间上并不是连续的。因此,我们需要对这条时序进行补点操作。

__log_signature__: 1814836459146662485 | 
select 
    time_series(time, '1m', '%Y-%m-%d %H:%i:%s', '0') as time, 
    avg(num) as num 
from  ( 
    select 
        __time__ - __time__ % 60 as time, 
        COUNT(*) as num 
    from log GROUP BY time order by time desc ) 
GROUP by time order by time ASC limit 10000

SLS机器学习最佳实战:日志聚类+异常告警

2.3 对时序进行异常检测

使用时序异常检测函数: ts_predicate_arma

__log_signature__: 1814836459146662485 | 
select 
    ts_predicate_arma(to_unixtime(time), num, 5, 1, 1, 1, 'avg') 
from  ( 
    select 
        time_series(time, '1m', '%Y-%m-%d %H:%i:%s', '0') as time, 
        avg(num) as num 
    from  ( 
        select 
            __time__ - __time__ % 60 as time, 
            COUNT(*) as num 
        from log GROUP BY time order by time desc ) 
    GROUP by time order by time ASC ) limit 10000

SLS机器学习最佳实战:日志聚类+异常告警

2.4 告警该如何设置

  • 将机器学习函数的结果拆解开
__log_signature__: 1814836459146662485 | 
select 
    t1[1] as unixtime, t1[2] as src, t1[3] as pred, t1[4] as up, t1[5] as lower, t1[6] as prob 
from  ( 
    select 
        ts_predicate_arma(to_unixtime(time), num, 5, 1, 1, 1, 'avg') as res 
    from  ( 
        select 
            time_series(time, '1m', '%Y-%m-%d %H:%i:%s', '0') as time, 
            avg(num) as num 
        from  ( 
            select 
                __time__ - __time__ % 60 as time, 
                COUNT(*) as num 
            from log GROUP BY time order by time desc ) 
        GROUP by time order by time ASC )) , unnest(res) as t(t1)

SLS机器学习最佳实战:日志聚类+异常告警

  • 针对最近两分钟的结果进行告警
__log_signature__: 1814836459146662485 | 
select 
    unixtime, src, pred, up, lower, prob 
from  ( 
    select 
        t1[1] as unixtime, t1[2] as src, t1[3] as pred, t1[4] as up, t1[5] as lower, t1[6] as prob 
    from  ( 
        select 
            ts_predicate_arma(to_unixtime(time), num, 5, 1, 1, 1, 'avg') as res 
        from  ( 
            select 
                time_series(time, '1m', '%Y-%m-%d %H:%i:%s', '0') as time, 
                avg(num) as num 
            from  ( 
                select 
                    __time__ - __time__ % 60 as time, COUNT(*) as num 
                from log GROUP BY time order by time desc ) 
            GROUP by time order by time ASC )) , unnest(res) as t(t1) ) 
    where is_nan(src) = false order by unixtime desc limit 2

SLS机器学习最佳实战:日志聚类+异常告警

  • 针对上升点进行告警,并设置兜底策略
__log_signature__: 1814836459146662485 | 
select 
    sum(prob) as sumProb, max(src) as srcMax, max(up) as upMax 
from ( 
    select 
        unixtime, src, pred, up, lower, prob 
    from  ( 
        select 
            t1[1] as unixtime, t1[2] as src, t1[3] as pred, t1[4] as up, t1[5] as lower, t1[6] as prob 
        from  ( 
            select 
                ts_predicate_arma(to_unixtime(time), num, 5, 1, 1, 1, 'avg') as res 
            from  ( 
                select 
                    time_series(time, '1m', '%Y-%m-%d %H:%i:%s', '0') as time, avg(num) as num 
                from  ( 
                    select 
                        __time__ - __time__ % 60 as time, COUNT(*) as num 
                    from log GROUP BY time order by time desc ) 
                GROUP by time order by time ASC )) , unnest(res) as t(t1) ) 
        where is_nan(src) = false order by unixtime desc limit 2 )

SLS机器学习最佳实战:日志聚类+异常告警

具体的告警设置如下:

SLS机器学习最佳实战:日志聚类+异常告警


3.1 日志进阶

这里是日志服务的各种功能的演示 日志服务整体介绍,各种Demo

SLS机器学习最佳实战:日志聚类+异常告警

更多日志进阶内容可以参考:日志服务学习路径。

作者:悟冥

原文链接?

本文为云栖社区原创内容,未经允许不得转载。

转载于:https://my.oschina.net/yunqi/blog/3050278

SLS机器学习最佳实战:日志聚类+异常告警相关教程

  1. 零基础转行学习游戏建模哪些软件学习优先级最高

    零基础转行学习游戏建模,哪些软件学习优先级最高? 随着生活水平的不断提高,人们对于精神需要的寄托越来来深,休闲娱乐产业一定会越来越好,游戏建模行业的前景也是看得到的。 很多新手入行都遇到过跟你一样的问题:我应该先学什么软件?比较好下手一点的

  2. 数据库系统-学习记录5

    数据库系统-学习记录5 包(Bag)的关系运算 ??包与集合的区别:包允许重复,比较高效(省掉了去重的过程) 并集、交集与差集 ??与集合的运算基本一致。值得注意的是,进行差集计算的时候,对于重复元组,包R和S有相同的有n个时,R-S运算时,就从R中减去n个,

  3. MyBatis的学习记录01-增删改查

    MyBatis的学习记录01-增删改查 主要是resources中xml文件的配置 首先有一个主配置文件config.xml 下面的映射文件配置很重要,映射文件在resources文件夹里面的路径必须和这个接口在Java文件夹里的路径一样的 这个映射文件就是用来实现你写的Dao接口的功能的,

  4. HTML基础知识学习备忘

    HTML基础知识学习备忘 HTML基础知识学习备忘 1:Web标准的构成 2:html基本标签 1:Web标准的构成 主要包括结构,表现,和行为三个方面 2:html基本标签 !DOCTYPE html 申明标签,告诉浏览器是HTML文件html lang=zh-CN 文档显示的语言,提示网站的类型meta charse

  5. 超详细matplotlib学习笔记(含折线图、柱状图、直方图、饼状图案

    超详细matplotlib学习笔记(含折线图、柱状图、直方图、饼状图案例) matplotlib: 能将数据进行可视化,更直观的呈现 使数据更加客观,更具有说服力 matplotlib架构: 上层调用下层 后端:实现绘图区域(分配绘图的资源) 美工:figure,axes,axis 脚本:pyp

  6. 一天一个机器学习小知识——线性回归

    一天一个机器学习小知识——线性回归 文章目录 前言 一、算法推导 1.模型 2.策略 3.算法 二、应用场景 三、代码实现 1.导入相关库 2.读取样例数据 3.划分训练集和测试集 4.建立模型 5.评估模型 四、优缺点 1.优点 2.缺点 前言 本栏目主要介绍机器学习中的算法

  7. Docker学习笔记

    Docker学习笔记 A.Docker介绍 宿主机-大海docker-鲸鱼容器-集装箱 Docker为什么会出现 开发 vs 运维 一个代码,在开发的机器上能够正常运行,而把代码交给运维后,在运维的机器上不能运行。这是由于开发和运维的环境不同,那么如何解决这个问题呢? ans: 我们

  8. HFSS入门学习(一)

    HFSS入门学习(一) HFSS入门学习(一) HFSS (High Frequency Simulator Structure)是美国 Ansoft 公司开发的,基于电磁场有限元法分析微波工程问题的全波三维电磁仿真软件,其功能强大,界面友好,计算结果准确,是业界公认的三维电磁场设计和分析的工业