Обнаружение пиков частоты событий в реальном времени - PullRequest
5 голосов
/ 31 августа 2011

В веб-приложении я получаю триггер каждый раз, когда происходит событие.Я хочу обнаружить «сильные» частотные пики, которые, вероятно, приводят к ненормальному поведению.

Я могу придумать два наивных способа достижения этого:

  • Фиксированный порог - "Если в течение минуты происходит более 500 событий, возможно, что-то не так ».Этот метод не может обрабатывать плавные нарушения пороговых значений или неуклонно увеличивающийся трафик, если только приложение не может периодически корректировать пороговое значение.

  • Эвристика, связанная с окном - Разделите окно на N равных (?) Интервалов.Пока N> 0, рассчитайте частоту событий, произошедших в [now- (N * interval_length), сейчас].Сохраните это в списке.Уменьшите N на 1. Повторите.Определить список выбросов.Если есть выброс, превышающий среднюю частоту [now-window_length, now], sth, вероятно, неправильный. "

Я хотел бы знать, есть ли вместо этого общий / стандартрешение этой проблемы или если вы можете придумать что-нибудь более эффективное или элегантное.

Заранее спасибо.

РЕДАКТИРОВАТЬ - Еще одно предложение

Мой друг предложил обнаружение аберрантного поведения с помощью прогноза Холта-Уинтерса. Более подробную информацию об этой методологии можно найти по ссылкам ниже:

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

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

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

Я не эксперт. Что бы я сделал:

Допустим, вы сохраняете только последние 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, если скорость имеет значение.

0 голосов
/ 11 декабря 2011

Вы можете вычислить экспоненциально взвешенную оценку с плавающей запятой и сравнить ее с предыдущим значением.Резкое увеличение - это, вероятно, то, что вы пытаетесь обнаружить, но в сочетании с определенным минимальным порогом (например, от 0 до 1 несущественно).

Но, скажем, текущее плавающее среднее значение повышается со 100 до 200, чтовероятно, это тот тип событий, который вы хотите обнаружить.

0 голосов
/ 02 сентября 2011

просто получить простое среднее по значениям за последние X минут (сохранить значения)

сравнивает каждое новое поступающее значение со средним:

  • если разница больше, чем Y%, это выброс, предупреждение.
  • Если меньше, добавьте это к среднему значению и удалите первый, тип fifo.

Если вы считаете, что его можно обмануть «неуклонно увеличивающимся трафиком», сделайте X достаточно большим.

...