每周异常:第 3期,宏观异常分析方法

为了有效的分析 JavaScript 异常,我们从宏观的统计数据中做了大量的分析,初步结果如下:

全站每日异常统计

首先我们从每天的全站总体数据进行分析,得到下面这些报表。其中:

  • all_pv: 全站所有有效异常次数 (PV)
  • all_uv: 全站所有有效异常人数 (UV)
  • all_pv_rate: 全站所有异常率 (按 PV 统计)
  • all_uv_rate: 全站所有异常率 (按 UV 统计)
  • valid_rate_pv: 有效异常率(按 PV 统计)
  • valid_rate_uv: 有效异常率(按 UV 统计)

2013-08-02 7 42 02

2013-08-02 7 42 37

2013-08-02 7 50 11

2013-08-02 7 43 04

2013-08-02 7 43 31

从趋势图中我们可以明显的看到第 2天和最后一天,异常 PV 有较大波动,这是由于用户 攻击爆发大量异常造成的。

我们在 异常评分算法 的讨论中有提到,即使是少量用户进行攻击,异常 UV 也不应该有波动的(除非页面 UV 本身有较大波动),但是实际上我们看到最后一天的异常 UV 也有明显波动,因此粗略 分析这个异常 PV 的上升是由于页面访问人数增多造成的。

事后我们查了当天的页面访问 PV 和 UV,可惜并没有明显波动。

实际经过细致的异常日志分析,我们看到攻击用户同时没过一段时间就更换 IP 地址或清理 Cookie,因此全天的综合数据中异常 PV 和异常 UV 有了一些明显波动。

而且实际上,每天都有攻击造成的异常波动。

  • 每天都有攻击造成的异常,累加在一起好像每天都没什么问题。
  • 由于攻击造成异常总数相对一天的异常总数太小,从全天异常总数的层面来看, 无法发现,甚至排除攻击造成的异常。
  • T+1 的统计数据,对于异常监控来说,太迟钝了。

全站每分钟异常统计

从上面每日异常总和的分析我们可以看出,一天的总和数据能发现的问题还是比较有限的。 于是我从分钟的粒度来统计异常。

2013-08-02 7 24 54

图有点大,点击可以看大图。

从图中我们可以看到,凌晨 2点多到 3点多期间,有少量用户发起了猛烈的攻击; 凌晨 4点多到凌晨7点多期间也有少量温和的攻击。攻击时全站异常 PV (绿色) 和全站有效异常(深红色)明显飙升,但是异常 UV 和有效异常 UV 都没有太大波动, 而且与前后的时间切片有较好的连贯性,没有大起大落。

而如果异常 UV 出现较大波动,在很可能是由于我们正在发布的新代码影响大面积用户。

合适的时间粒度对于及时发现真正有效的异常有非常重要的意义。

Help
[count]gg 跳转到第 [count] 行,默认第 1 行。
[count]G 跳转到第 [count] 行,默认最后一行。
[count]j 向下跳转 [count] 行,默认跳转一行。
[count]k 向上跳转 [count] 行,默认跳转一行。
/ 开始搜索。按 <Esc> 退出。
gh 跳转到首页。
gb 跳转到博客首页。
gw 跳转到 Wiki 首页。
gt 跳转到我的 Twitter Profile 页。
gp 跳转到我的 Github Profile 页。
? 打开帮助。按 <Esc> 退出。