#apache-flink #flink-streaming #flink-sql #flink-cep
Вопрос:
У нас есть пример использования, когда нам нужно найти шаблон для грубой силы, например, 10 неудачных входов с одного и того же устройства и одного и того же имени пользователя, за которыми следует успешный вход с того же имени пользователя и с того же устройства. Это должно произойти в течение 10 минут.
Допустим, у нас 10 неудачных событий входа в Windows с пользователем A в качестве имени пользователя и B в качестве имени устройства, и у нас успешный вход в систему от пользователя A с тем же устройством B, мы должны поднять предупреждение.Есть ли какой-либо способ, чтобы flink CEP соответствовал упомянутому варианту использования. Устройство и имя пользователя не будут известны заранее, также не известна мощность полей.
Ответ №1:
С помощью Flink CEP (с использованием API Java DataStream) вы бы использовали что-то вроде keyBy(event -> new Tuple2<>(event.user, event.device))
, а затем сопоставили шаблон с этим потоком с разделением по ключам. С помощью функции Flink SQL MATCH_RECOGNIZE вы хотите PARTITION BY user, device
это сделать .
Ограничение по времени обрабатывается WITHIN
предложением. Например:
PATTERN (F{10} S) WITHIN INTERVAL '10' MINUTE
DEFINE
F.status = 'failure',
S AS S.status = 'success'
Комментарии:
1. Спасибо, ответ действительно то, что я искал
2. Рад, что это помогло. Кстати, я очистил пример.
3. Я был бы признателен, если бы вы приняли ответ.