在Web应用程序中,每次事件发生时都会触发一个触发器。我想检测“暴力”频率峰值,这可能转化为异常行为。
我可以想到实现这两点的两种天真的方式:
固定阈值 - “如果一分钟内发生超过500个事件,那可能是错误的”。除非应用程序可以定期调整阈值,否则此方法无法处理平滑的阈值违规或稳定增加流量。
与窗口相关的启发式 - 将窗口划分为N个相等(?)的间隔。当N> 0时,计算[now-(N * interval_length),now 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/
答案 0 :(得分:1)
我不是专家。我会做什么:
假设您只保留最后n
个结果,x_n
是最后一个样本(与上一个事件的时差)。
α_n x_n + α_{n-1}/2 x_{n-1} + ... + α_{1} 2^{-n} x_1 = T
如果差异T - T_{previous}
,其中T_{previous}
是T
的先前值,超过了限制,请执行某些操作。
如果您的x_i
值是二进制的,那么如果速度很重要,您可以使用shift
和or
操作。
答案 1 :(得分:0)
只得到最后X分钟值的简单平均值(保留值)
将每个新传入值与平均值进行比较:
如果您认为可以通过“稳步增加流量”来欺骗,请将X足够大。
答案 2 :(得分:0)
您可以计算指数加权浮点均值估算值,并将其与之前的值进行比较。您可能正在尝试检测突然增加,但结合某个最小阈值(例如0到1并不重要)。
但是说当前浮动平均值从100上升到200,这可能是你想要检测的事件。