在一个Web应用程序中,每次事件发生时我都会收到一个触发器。我想检测“暴力”频率峰值,这可能意味着异常行为。
我可以想到两种天真的方法来实现这一点:
- 固定阈值 - “如果在一分钟内发生超过500个事件,则可能出现问题”。除非应用程序可以定期调整阈值,否则此方法无法处理平滑阈值违规或逐渐增加的流量。 - 与窗口相关的启发式 - 将窗口分成N个相等的间隔。当N> 0时,在[now-(N * interval_length),now]中计算发生的事件频率。将其保存在列表中。将N减少1。重复。检测列表异常值。如果有一个大于[now-window_length,now]的平均频率的异常值,则可能出现问题。
我想知道是否有解决此问题的常见/标准解决方案,或者您是否能够想到任何更有效或更优雅的解决方案。
提前感谢您。
编辑 - 另一个建议
我的一位朋友建议使用Holt-Winters预测检测异常行为。您可以在以下链接中找到有关此方法的更多信息:
我可以想到两种天真的方法来实现这一点:
- 固定阈值 - “如果在一分钟内发生超过500个事件,则可能出现问题”。除非应用程序可以定期调整阈值,否则此方法无法处理平滑阈值违规或逐渐增加的流量。 - 与窗口相关的启发式 - 将窗口分成N个相等的间隔。当N> 0时,在[now-(N * interval_length),now]中计算发生的事件频率。将其保存在列表中。将N减少1。重复。检测列表异常值。如果有一个大于[now-window_length,now]的平均频率的异常值,则可能出现问题。
我想知道是否有解决此问题的常见/标准解决方案,或者您是否能够想到任何更有效或更优雅的解决方案。
提前感谢您。
编辑 - 另一个建议
我的一位朋友建议使用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/
α_i
上的索引。 如果您想要特殊权重,可以将它设为每个i
的a_i = 1
。如果您的意思是将 T 向右移动并添加 x_n 的新值,则是正确的。 - Dimitris Leventeas