在 Web 应用程序中,每次发生事件时我都会收到一个触发器。我想检测“暴力”频率峰值,这可能会转化为异常行为。
我可以想到两种天真的方法来实现这一目标:
固定阈值 - “如果在一分钟内发生超过 500 个事件,则某事可能是错误的”。除非应用程序可以定期调整阈值,否则此方法无法处理平滑的阈值突破或稳定增加的流量。
Window-related heuristic - 将窗口划分为 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/