5

在 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/

4

3 回答 3

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

于 2011-09-01T20:34:25.223 回答
0

只需对最后 X 分钟的值进行简单平均(保留值)

将每个新传入值与平均值进行比较:

  • 如果差异大于 Y%,则它是异常值,警报。
  • 如果更少,则将其添加到平均值中并删除第一个 fifo 样式。

如果您认为可以通过“稳步增加流量”来欺骗它,请使 X 足够大。

于 2011-09-02T06:05:02.907 回答
0

您可以计算一个指数加权浮点均值估计量,并将其与之前的值进行比较。突然增加可能是您试图检测的,但结合了某个最小阈值(例如,0 到 1 并不显着)。

但是假设当前浮动平均值从 100 上升到 200,这可能是您想要检测的事件类型。

于 2011-12-11T13:20:24.883 回答