您现在的位置是:首页 > 正文

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

2024-02-01 00:31:14阅读 2

0.文章系列链接



1.手中的锤子都有啥?

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

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

v2-f20a5fd710c279be5c26b36db8b593df_hd.jpg

 

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

2.平台实验

2.1 实验数据

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

v2-8f384573d1514c1b92a9ca26fd3b3ff5_hd.jpg

 

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

v2-a14100575d70043b977005919c93ab84_hd.jpg

 

2.2 生成子模式的时序信息

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

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

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

v2-14e5d46419e0863fd7582b2c196b2469_hd.jpg

 

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

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

 

v2-8e6a7d88e7e8b350aed1aaa85c4c65ba_hd.jpg

 

上述图中我们发现时间上并不是连续的。因此,我们需要对这条时序进行补点操作。
__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

 

v2-5f087807a53f84129cfb23e09b9214ee_hd.jpg

 

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

 

v2-ed9d86a40fea2180884c1c239429865f_hd.jpg

 

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)

 

v2-d9f6a7013af6b4f387215385bda2167b_hd.jpg

 

  • 针对最近两分钟的结果进行告警
__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

 

v2-4a01d31539ac64a000a1251215eec169_hd.jpg

 

  • 针对上升点进行告警,并设置兜底策略
__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 )

 

v2-05e4f6b907cd67e9bb04213cc6fa19ec_hd.jpg

 

具体的告警设置如下:

v2-3acfe104b7dccfd9c86a201ea0bd2fbf_hd.jpg

 


3.硬广时间

3.1 日志进阶

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

v2-b12f983a8c3fff5e2c28eebd1e5e1893_hd.jpg

 

 

原文链接

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

转载于:https://my.oschina.net/u/3889140/blog/3053642

网站文章

  • 在ubuntu系统中删除软件的三种最佳方法

    在ubuntu系统中删除软件的三种最佳方法

    三种方法分别是:1、通过软件中心删除 2、通过Synaptic Package Manager删除 3、通过命令行删除三种方法的详细介绍一、ubuntu software 1、点击左侧菜单栏上的“ubuntu software” 2、在软件中心界面,点击“installed”,可以列出已经安装过的软件。 3、软件右侧,有"remove"功能。 4、选中需要删除的软件,...

    2024-02-01 00:31:07
  • DataBinding实战(三)

    实战首先看一下之前代码public class Goods { public String name; public String details; public float price; public Goods(String name, String details, float price) { this.name = na...

    2024-02-01 00:31:00
  • 构建高效的软件测试知识体系

    2018年6月8日,作为第一届TMMi中国峰会圆桌会议的嘉宾,我参与讨论了“如何建立适合测试组织的测试规范体系”这个测试主题,其中分享了我对该话题的一些想法和经验。现在通过文章的方式将当时讲解的内容进行了一些归纳和总结,主要包括3个方面的内容: 1个故事:任何问题的解决都需要从过个层面考虑; 4个维度:构建高效的软件测试知识体系; 目标推动:综合应用4个维度推动测试目标的...

    2024-02-01 00:30:32
  • el-select 下拉框数量过多的处理方法之一

    Element-ui 下拉列表 选项过多时如何解决卡顿问题 当使用Select选择器时,如果下拉列表有几千个几万个,因此通过滚动条一个个的去找不是很现实, 这时可以对select设置filterable属性,可以在下拉控件里进行搜索。例如:

    2024-02-01 00:30:25
  • 带你正确认识Unicode和UTF-8

    带你正确认识Unicode和UTF-8

    前言 相信很多小伙伴跟我一样,之前很长一段时间对Unicode和UFT-8一直搞得不清不楚,等到用的时候就网上搜一搜,大概懂了点是什么,隔一段时间后又搞忘了,简直阔怕啊。今天我将带您轻轻松松出困境,用...

    2024-02-01 00:30:17
  • 【Redis】Redis布隆过滤器安装

    【Redis】Redis布隆过滤器安装

    Redis布隆过滤器安装

    2024-02-01 00:29:48
  • 一篇文章理解AB测试和灰度发布

    一篇文章理解AB测试和灰度发布

    一、灰度发布1.1 简介灰度发布,是指黑与白之间,能够平滑过渡的一种发布方式。通过不同策略对用户进行分流,不同的用户组使用不同的应用版本。1.2 优缺点优点互联网服务变动频繁,发布周期短。速度和质量总是难以双全。灰度发布有以下优点:(1)降低发布风险,减少影响范围(2)可以灰度测试账号,降低测试依赖,减少自测的数据构造成本(3)方便回滚缺点(1)开发、...

    2024-02-01 00:29:39
  • mybatis入门实践1)

    mybatis入门

    2024-02-01 00:29:22
  • 评估目标跟踪算法

    一、OTB评估指标 OTB 可以用来衡量你的目标跟踪算法好坏,它包含一些 benchmark 结果,打好标记(即ground-truth.txt )的数据集,以及一个用来测试你的算法的代码库。 数据集...

    2024-02-01 00:29:06
  • shell 编程 脚本 命令

    如果我们经常要登录linux系统,可以使用SCRT,xshell工具去管理,这些工具都要收费,我们可以自己写个脚本,方便登录.比如有一批服务器,IP为:192.168.3.11, 192.168.3....

    2024-02-01 00:28:37