实时检测事件频率的峰值

saw*_*dis 5 events design-patterns frequency outliers

在Web应用程序中,每次事件发生时都会触发一个触发器.我想检测"暴力"频率峰值,这可能转化为异常行为.

我可以想到实现这两点的两种天真的方法:

  • 固定阈值 - "如果一分钟内发生超过500个事件,那可能是错误的".除非应用程序可以定期调整阈值,否则此方法无法处理平滑的阈值违规或稳定增加的流量.

  • 与窗口相关的启发式 - 将窗口划分为N个相等(?)的间隔.当N> 0时,计算[now-(N*interval_length),now]中发生的事件的频率.将其保存在列表中.将N减少1.重复.检测列表异常值.如果有一个异常值大于[now-window_length,现在]的平均频率,那可能是错误的."

我想知道是否存在针对此问题的通用/标准解决方案,或者您是否可以考虑任何更有效或更优雅的解决方案.

先感谢您.

编辑 - 另一个建议

我的一位朋友建议用Holt-Winters预测异常行为检测.您可以在以下链接中找到有关此方法的更多信息:

http://www.hpl.hp.com/news/events/csc/2005/jake_slides.pdf

http://www.usenix.org/events/lisa00/full_papers/brutlag/brutlag_html/

Dim*_*eas 1

我不是专家。我会做什么:

\n\n

假设您只保留最后一个n结果,并且x_n是最后一个样本(与前一个事件的时间差)。

\n\n
\xce\xb1_n x_n + \xce\xb1_{n-1}/2 x_{n-1} + ... + \xce\xb1_{1} 2^{-n} x_1 = T\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果 的差异T - T_{previous}T_{previous}之前的值在哪里T)超过限制,请执行某些操作。

\n\n

如果你的值x_i是二进制的,如果速度是一个问题的话,你可以使用shiftor运算来实现很好的技巧。

\n