在SLS中快速实现异常巡检

一、相关算法研究

1.1 常见的开源算法

  • Yahoo:EGADS
  • FaceBook:Prophet
  • Baidu:Opprentice
  • Twitter:Anomaly Detection
  • Redhat:hawkular
  • Ali+Tsinghua:Donut
  • Tencent:Metis
  • Numenta:HTM
  • CMU:SPIRIT
  • Microsoft:YADING
  • Linkedin:SAX改进版本
  • Netflix:Argos
  • NEC:CloudSeer
  • NEC+Ant:LogLens
  • MoogSoft:一家创业公司,做的内容蛮好的,供大家参考

1.2 基于统计方法的异常检测

基于统计方法对时序数据进行不同指标(均值、方差、散度、峰度等)结果的判别,通过一定的人工经验设定阈值进行告警。同时可以引入时序历史数据利用环比、同比等策略,通过一定的人工经验设定阈值进行告警。
通过建立不同的统计指标:窗口均值变化、窗口方差变化等可以较好的解决下图中(1,2,5)所对应的异常点检测;通过局部极值可以检测出图(4)对应的尖点信息;通过时序预测模型可以较好的找到图(3,6)对应的变化趋势,检测出不符合规律的异常点。

如何判别异常?

  • N-sigma
  • Boxplot(箱线图)
  • Grubbs’Test
  • Extreme Studentized Deviate Test

PS:

  1. N-sigma:在正态分布中,99.73%的数据分布在距平均值三个标准差以内。如果我们的数据服从一定分布,就可以从分布曲线推断出现当前值的概率。
  2. Grubbs假设检验:常被用来检验正态分布数据集中的单个异常值
  3. ESD假设检验:将Grubbs'
  4. Test扩展到k个异常值检测

1.3 基于无监督的方法做异常检测

什么是无监督方法:是否有监督(supervised),主要看待建模的数据是否有标签(label)。若输入数据有标签,则为有监督学习;没标签则为无监督学习。
为何需要引入无监督方法:在监控建立的初期,用户的反馈是非常稀少且珍贵的,在没有用户反馈的情况下,为了快速建立可靠的监控策略,因此引入无监督方法。
针对单维度指标

  • 采用一些回归方法(Holt-Winters、ARMA),通过原始的观测序列学习出预测序列,通过两者之间的残差进行分析得到相关的异常。
  • 针对单维度指标

    • 多维度的含义(time,cpu,iops,flow)
    • iForest(IsolationForest)是基于集成的异常检测方法

      • 适用连续数据,具有线性时间复杂度和高精度
      • 异常定义:容易被孤立的离群点,分布稀疏且离密度高的群体较远的点。
    • 几点说明

      • 判别树越多越稳定,且每棵树都是互相独立的,可以部署在大规模分布系统中
      • 该算法不太适合特别高维度数据,噪音维度维度和敏感维度无法主动剔除
      • 原始iForest算法仅对全局异常值敏感,对局部相对稀疏的点敏感度较低

1.4 基于深度学习的异常检测

论文题目:《Unsupervised Anomaly Detection via Variational Auto-Encoder for Seasonal KPIs in Web Applications》(WWW 2018)

  • 解决的问题:针对具有周期性的时序监控数据,数据中包含一些缺失点和异常点

  • 模型训练结构如下

  • 检测时使用了MCMC填补的技术处理观测窗口中的已知缺失点,核心思想根据已经训练好的模型,迭代逼近边际分布(下图表示MCMC填补的一次迭代示意图)

1.5 使用有监督的方法做异常检测

  • 标注异常这件事儿,本身很复杂?

    • 用户定义的异常往往是从系统或者服务角度出发,对数据进行打标,所关联的底层指标、链路指标繁杂,无法从几个维度出发(更多的是系统的一个Shapshot)
    • 在进行架构层设计时,都会进行服务自愈设计,底层的异常并未影响到上层业务
    • 异常的溯源很复杂,很多情况下,单一监控数据仅是异常结果的反应,而不是异常本身
    • 打标样本数量很少,且异常类型多样,针对小样本的学习问题还有待提高
  • 常用的有监督的机器学习方法

    • xgboost、gbdt、lightgbm等
    • 一些dnn的分类网络等

二、SLS中提供的算法能力

  • 时序分析

    • 预测:根据历史数据拟合基线
    • 异常检测、变点检测、折点检测:找到异常点
    • 多周期检测:发现数据访问中的周期规律
    • 时序聚类:找到形态不一样的时序
  • 模式分析

    • 频繁模式挖掘
    • 差异模式挖掘
  • 海量文本智能聚类

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

三、针对流量场景的实战分析

3.1 多维度的监控指标的可视化


具体的SQL逻辑如下:

* | 
selecttime,buffer_cnt,log_cnt,buffer_rate,failed_cnt,first_play_cnt,fail_rate 
from(selectdate_trunc('minute', time) as time,sum(buffer_cnt) as buffer_cnt,sum(log_cnt) as log_cnt,casewhenis_nan(sum(buffer_cnt)*1.0 / sum(log_cnt)) then0.0 elsesum(buffer_cnt)*1.0 / sum(log_cnt) end as buffer_rate, 
sum(failed_cnt) as failed_cnt, 
sum(first_play_cnt) as first_play_cnt , casewhenis_nan(sum(failed_cnt)*1.0 / sum(first_play_cnt)) then0.0 elsesum(failed_cnt)*1.0 / sum(first_play_cnt) end as fail_rate fromlog group bytime order bytime)limit 100000

3.2 各指标的时序环比图


具体的SQL逻辑如下:

* |
select time,log_cnt_cmp[1] as log_cnt_now,log_cnt_cmp[2] as log_cnt_old,case when is_nan(buffer_rate_cmp[1]) then 0.0 else buffer_rate_cmp[1] end as buf_rate_now,case when is_nan(buffer_rate_cmp[2]) then 0.0 else buffer_rate_cmp[2] end as buf_rate_old,case when is_nan(fail_rate_cmp[1]) then 0.0 else fail_rate_cmp[1] end as fail_rate_now,case when is_nan(fail_rate_cmp[2]) then 0.0 else fail_rate_cmp[2] end as fail_rate_old
from
(
select time, ts_compare(log_cnt, 86400) as log_cnt_cmp,ts_compare(buffer_rate, 86400) as buffer_rate_cmp,ts_compare(fail_rate, 86400) as fail_rate_cmp
from (
select date_trunc('minute', time - time % 120) as time, sum(buffer_cnt) as buffer_cnt, sum(log_cnt) as log_cnt, sum(buffer_cnt)*1.0 / sum(log_cnt) as buffer_rate, sum(failed_cnt) as failed_cnt,  sum(first_play_cnt) as first_play_cnt ,sum(failed_cnt)*1.0 / sum(first_play_cnt) as fail_rate
from log group by time order by time) group by time)
where time is not null limit 1000000

3.3 各指标动态可视化


具体的SQL逻辑如下:

* | 
select time, case when is_nan(buffer_rate) then 0.0 else buffer_rate end as show_index,isp as index
from
(select date_trunc('minute', time) as time, sum(buffer_cnt)*1.0 / sum(log_cnt) as buffer_rate,sum(failed_cnt)*1.0 / sum(first_play_cnt) as fail_rate,sum(log_cnt) as log_cnt,sum(failed_cnt) as failed_cnt,sum(first_play_cnt) as first_play_cnt,isp
from log group by time, isp order by time) limit 200000

3.4 异常集合的监控Dashboard页面

 

  • 异常监控项目的背后图表SQL逻辑
* | 
select res.name 
from ( select ts_anomaly_filter(province, res[1], res[2], res[3], res[6], 100, 0) as res from ( select t1.province as province, array_transpose( ts_predicate_arma(t1.time, t1.show_index, 5, 1, 1) ) as res from ( selectprovince,time,case when is_nan(buffer_rate) then 0.0 else buffer_rate end as show_indexfrom (select province, time, sum(buffer_cnt)*1.0 / sum(log_cnt) as buffer_rate, sum(failed_cnt)*1.0 / sum(first_play_cnt) as fail_rate, sum(log_cnt) as log_cnt, sum(failed_cnt) as failed_cnt, sum(first_play_cnt) as first_play_cntfrom log group by province, time) ) t1 inner join ( select DISTINCT province from  ( select province, time, sum(log_cnt) as total from log group by province, time ) where total > 200 ) t2 on t1.province = t2.province  group by t1.province ) ) limit 100000
  • 针对上述SQL逻辑的具体分析


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可能是你见过最完善的微前端解决方案

Techniques, strategies and recipes for building a modern web app with multiple teams using different JavaScript frameworks.—— Micro Frontends 前言 TL;DR 想跳过技术细节直接看怎么实践的同学可以拖到文章底部,直接看最后一节。 目前社区有很多关于微…

金山云纳斯达克敲钟上市 不负时代的机遇

5月8日,中国知名的独立云服务商金山云正式在美国纳斯达克挂牌交易,股票代码 “KC”。 金山云依托广泛的云基础架构,通过提供先进可信赖的云服务,为各行业定制了结构完善的解决方案,在中国云计算市场取得了领先地位&am…

前沿 | VLDB论文解读:阿里云超大规模实时分析型数据库AnalyticDB

前言 一年一度的数据库领域顶级会议VLDB 2019于美国当地时间8月26日-8月30日在洛杉矶召开。在本届大会上,阿里云数据库产品团队多篇论文入选Research Track和Industrial Track。 本文将对入围Industrial Track的论文《AnalyticDB: Realtime OLAP Database System at…

第一个Java

Hello World 随便创一个文件夹,储存代码 新建一个Java文件 文件后缀名.javaHello.java[注意]系统可能没有显示后缀名,需要手动打开 编写代码 public class Hello{public static void main(String[] args){System.out.print("Hello Wold");…

Teradata天睿公司任命Steve McMillan为总裁兼首席执行官

Teradata天睿公司日前宣布,公司董事会已经任命Steve McMillan担任总裁兼首席执行官以及董事会成员,自2020年6月8日起生效。McMillan先生曾在F5 Networks公司担任全球服务执行副总裁,未来将接任临时总裁兼首席执行官Victor Lund,在…

蚂蚁金服在云原生架构下的可观察性的探索和实践

本文根据 8 月 11 日 SOFA Meetup#3 广州站 《蚂蚁金服在云原生架构下的可观察性的探索和实践》主题分享整理。现场回顾视频以及 PPT 查看地址见文末链接。 前言 随着应用架构往云原生的方向发展,传统监控技术已经不能满足云原生时代运维的需求,因此&am…

Docker启动Mysql容器失败,挂载时权限不足,chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied

文章目录1. 现象2. 查看日志分析3. 提示信息4. 解决方案5. 再次执行成功6. 技巧1. 现象 今天用Docker运行Mysql容器时,一直启动不了,删除了重新制作容器也不行 镜像用的Mysql5.7 运行镜像用的命令行 为: docker run -d --name fxmysql -v /opt/data:/…

如何实现一次编码,到处运行?新一代云端一体化探索

阿里妹导读:当前移动互联网业务研发运维模式,云与多端互相割裂,有些全栈的探索缺乏成功案例,行业对云端一体化研发这块仍是空白,我们要思考:如何能实现 1 个研发支撑云 android iOS 三端的业务快速落地&a…

这份操作系统词典请查收!

作者 | cxuan责编 | 郭芮头图 | CSDN 下载自东方 IC1. 操作系统(Operating System,OS):是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优…

使用javax.mail发送邮件

文章目录一、发邮件流程二、关于邮件协议和端口三、开启邮件协议和端口3.1. QQ邮箱3.2. 163邮箱四、实战发送邮件4.1. 引入依赖4.2. 方法重写4.3. 发送邮件核心类工具类EmailUtils五、QQ邮件发送测试5.1. QQ发送测试5.2. 查看QQ发送邮箱5.3. 查看收件人收件箱六、163邮件发送测…

导入Oracle 数据库镜像,创建Oracle虚拟机_01

文章目录1. 创建虚拟机,选择镜像2. 调整内存大小3. 调整处理器大小1. 创建虚拟机,选择镜像 2. 调整内存大小 3. 调整处理器大小 接下一篇:plsql连接 oracle instantclient_11_2 本地机器不安装oracle_02 https://gblfy.blog.csdn.net/article…

阿里技术专家详解 DDD 系列- Domain Primitive

导读:对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战,无论是 94 年 GoF 的 Design Patterns , 99 年的 Martin Fowler 的 Refactoring , 02 年的 P of EAA ,还是 03 年的 Enterprise …

别傻了,90%的开发者都没有做好它

上周末和在北京的哥们国仔涮火锅,席间聊起了最近面试的经历。他说想换工作的原因很简单,就是要涨工资,原来的公司呆了两年多,薪资浮动不超过 500 元。而身边跳槽的那些同事,薪资都已经是自己的 2 倍了。在准备面试的过…

是真“开发者”,就来一“测”到底!

阿里云开发者虚拟勋章 云时代是开发者的天下! 云让稳定、安全、高效的计算能力得到普惠,服务于广大开发者的同时,也对开发者不断学习、掌握技术知识提出了更高的要求。 阿里云推出的开发者学测服务,通过简单、便捷的形式&#x…

plsql连接 oracle instantclient_11_2 本地机器不安装oracle_02

接上一篇:导入Oracle 数据库镜像,创建Oracle虚拟机_01 https://blog.csdn.net/weixin_40816738/article/details/118115668 文章目录一、本地安装二、instantclient_11_2配置声明:(本地环境不需要安装oracle客户端) 一、本地安装 …

结构化数据存储,如何设计才能满足需求?

阿里妹导读:任何应用系统都离不开对数据的处理,数据也是驱动业务创新以及向智能化发展最核心的东西。数据处理的技术已经是核心竞争力。在一个完备的技术架构中,通常也会由应用系统以及数据系统构成。应用系统负责处理业务逻辑,而…

触发死锁怎么办?MySQL 的死锁系列:锁的类型以及加锁原理了解一下!

来源 | 程序员历小冰责编 | Carol封图 | CSDN 付费下载于视觉中国疫情期间在家工作时,同事使用了 insert into on duplicate key update 语句进行插入去重,但是在测试过程中发生了死锁现象:ERROR 1213(40001): Deadlock found when trying to getlock; t…

本地psql连接远程Oracle虚拟机_03

接上一篇:plsql连接 oracle instantclient_11_2 本地机器不安装oracle_02 https://gblfy.blog.csdn.net/article/details/118115893 文章目录1. 启动虚拟机2. 登录虚拟机3. 开启网络4. 获取ip地址5. ssh工具连接6. 查看Oracle监听运行状态7. 本地监听添加连接串8. p…

后端程序员必备:书写高质量SQL的30条建议

来源 | 捡田螺的小男孩责编 | Carol封图 | CSDN 付费下载于视觉中国本文将结合实例demo,阐述30条有关于优化SQL的建议,多数是实际开发中总结出来的,希望对大家有帮助。1、查询SQL尽量不要使用select *,而是select具体字段。反例子…

PL/SQL Developer 13.0设置中文

PL/SQL Developer 13.0设置中文 PL/SQL Developer 13.0和之前的版本有些不一样Tools下找不到preferences,因为位置改变了,不在Toos下,它在最上面 然后就是User Interface -> Appearance -> Language 选择 Chinese.lang->Apply->ok就好了