Your SlideShare is downloading. ×
0
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Skyline 简介
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Skyline 简介

892

Published on

skyline是Etsy的Kale系统的一部分,负责异常探测过滤,和rrdtool/graphite的预测式警报属于另一个方向。

skyline是Etsy的Kale系统的一部分,负责异常探测过滤,和rrdtool/graphite的预测式警报属于另一个方向。

Published in: Travel
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
892
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Skyline Etsy 的 控 机制监 过滤
  • 2. • Etsy 技 博客:术团队 • http://codeascraft.com/2013/06/11/introd ucing-kale/ • Qcon London2013 演 稿:讲 • https://speakerdeck.com/astanway/bring- the-noise-continuously-deploying-under-a- hailstorm-of-metrics 介简
  • 3. Kale 架构图 • 常探 的异 测 skyline( 左边 ) • 相似 找的查 oculus( 右边 )
  • 4. skyline 部署 • apt-get install git numpy scipy python-pip python-msgpack python-pandas python-statsmodels • git clone https://github.com/etsy/skyline • cd skyline • pip install -r requirement.txt • cp src/settings.py.example src/settings.py • mkdir /var/log/skyline • mkdir /var/run/skyline • mkdir /var/log/redis • # 必 用须 2.6 版以上的 redis-server 才能正常存储 • wget http://redis.googlecode.com/files/redis-2.6.13.tar.gz • tar zxvf redis-2.6.13.tar.gz • cd redis-2.6.13 • make
  • 5. skyline 启动 • ./src/redis-server ../bin/redis.conf • cd bin • # 分析器 • sudo ./analyzer.d start • # 数据接收 • sudo ./horizon.d start • # flask 界面 • sudo ./webapp.d start
  • 6. horizon 支持 • 2024 端口支持转发 graphite 数据 • 2025 端口支持 pickle 和 msgpack 两种 网 数据格式络 • 数据存 在储 redis 中, key 的命名格式类 似 graphite 的的 group.item.time 这样
  • 7. analyzer 原理 • analyzer 根据周期内 有数据判断最新数现 据是否 常异 • rrdtool/graphite 是根据 有数据推 下现 测 一个数据 是多少应该
  • 8. analyzer 原理 • first_hour_average • 是最 的。先求本周期内最前面的第这 简单 一个小 的平均 和 准差,然后和最新时 值 标 的三个 的平均值 值 (tail_avg() , 是后面这 多数算法都通用的做法 ) 做比 。如果较 tail_avg 和 第一小 平均 的差距大于时 值 3 倍的 准差,那么 定 常。标 认 为异
  • 9. analyzer 原理 • simple_stddev_from_moving_averag e • 把上面算法的范 大化,求的是整个周围扩 期内全部数据的平均 和 准差。值 标
  • 10. analyzer 原理 • stddev_from_moving_average • 在上面算法的基 上,采用指数加权移础 动 平均 。 周期内采点数量 少的情况更值 对 较 好一些。
  • 11. analyzer 原理 • mean_subtraction_cumulation • 做法是 的:这样 • 排除最后一个 ;值 • 求剩余序列的平均 ;值 • 全序列 去上面 个平均 ;减 这 值 • 求剩余序列的 准差;标 • 判断全序列最后一个 是否大于值 3 倍的 准差标 • 在代 中本来 算了一次序列的指数加权移码 还计 动 平均 ,但是算完了却没用,感 怪怪的。值 觉
  • 12. analyzer 原理 • least_squares • 采用最小二乘法 近 序列,然后用拟 时间 实 去 近 得到新序列。然后判断新际值减 拟 值 序列的最后三个 的平均 是否大于值 值 3 倍 的新序列 准差。标 • 所 最小二乘法, 就是 一个谓 简单说 对 [x, y] 序列,会有一 常数对 [m, c] ,让 Y = mx + c 等式中的 Y 和 y 在全序列上最 接近。
  • 13. analyzer 原理 • histogram_bins • 将整个周期序列的数据按照直方 法图统计 入归 15 个直方中,然后看最后三个 的值 平均 属于值 这 15 个直方的具体 个。如哪 果 个直方中包含的数据小于这 20 个,判 断 常。为异 • 从算法中可以知道,如果周期内数据量不 ,很容易被判断 常的。够 为异
  • 14. analyzer 原理 • grubbs • 将整个周期序列的数据按照格拉布斯法求 常 。异 值 • 准的格拉布斯法是 的:标 这样 • 从小到大排序; • 求序列的平均 和 准差;值 标 • 算最小 和最大 与平均 的差距,更大的那个 可疑 ;计 值 值 值 为 值 • 可疑 去平均 ,再除以 准差,如果大于格拉布斯 界 ,那么值减 值 标 临 值 就是 常 ;异 值 • 排除 常 , 剩余序列循 做异 值 对 环 1-5 步 。骤 • 里只用判断 序列的最后是否 常,所以直接将最后三个 的平这 时间 异 值 均 作 可疑 判断是否 常即可。值 为 值 异
  • 15. analyzer 原理 • median_absolute_deviation • 具体 是:序列的最后一个 ,比 序列的 中 大实现 值 该 绝对 值 6 倍以上 ,即判断 常。为异 • 注意 里是中 ,不是平均 。这 值 值
  • 16. analyzer 原理 • Kolmogorov-Smirnov_test • 具体 是: 算序列内最近十分 的数 的实现 计 钟 值 ks 分布,然后测试 计 算序列中最近一个小 前到十分 前时 钟 这 50 分 的数 的钟 值 ks 分测试 布;如果 个分布相差 大,即判断 常。两 较 为异
  • 17. webapp 原理 • 一个 flask 面,通页 过 ajax 求请 json 画 。图 • 个这 anomalies.json 是 analyzer 程进 实 生成到时 src/webapp/static/dump 目录 下的。在没有 常的 候的基 式如下异 时 础样 : • handle_data([])
  • 18. 示例 • use Data::MessagePack; • use AnyEvent::Handle::UDP; • my $mp = Data::MessagePack->new->utf8->prefer_integer; • my $sock = AnyEvent::Handle::UDP->new( • connect => [ '127.0.1.1', '2025' ], • on_recv => sub { }, • autoflush => 1, • ); • my $timer = AnyEvent->timer( • after => 0, • interval => 1, • cb => sub {$sock->push_send($mp->pack(['localhost.loadavg', [time, rand*2]]))} • ); • my $atimer = AnyEvent->timer( • after => 200, • interval => 1, • cb => sub { • $timer = undef; • $sock->push_send($mp->pack(['localhost.loadavg', [time, rand*2000]])); • }, • ); • AnyEvent->condvar->recv;
  • 19. analyzer.log 常异 记录
  • 20. webapp 效果

×