首页 > 解决方案 > Apache Flink - 匹配连续模式中具有不同值的字段

问题描述

考虑一个用例,我们需要找到攻击模式,例如从同一设备和相同的用户名登录 10 次失败,然后从不同的设备但相同的用户名成功登录。这应该在 10 分钟内发生。

假设我们有 10 个登录失败的 Windows 事件,其中用户 A 作为用户名,B 作为设备名,并且我们从用户 A 使用不同的设备 C 成功登录,我们应该发出警报。请让我知道如何使用 flink CEP 来解决此案。

标签: apache-flinkflink-streamingflink-sqlflink-cepflink-batch

解决方案


这与具有相同值的 Apache Flink-Matching Fields非常相似。在这种情况下,您可以尝试 MATCH_RECOGNIZE 使用以下内容:

PARTITION BY user
...
PATTERN (F{10} S) WITHIN INTERVAL '10' MINUTE
DEFINE
  F.status = 'failure' AND (LAST(F.device, 1) IS NULL OR F.device = LAST(F.device, 1)),
  S AS S.status = 'success' AND S.device <> LAST(F.device, 1)

这个想法是检查每个新的 F 是否与前一个相同的设备,而 S 是不同的设备。

顺便说一句,在实践中,您可能宁愿指定F{10,}模式匹配连续 10 次或更多失败的尝试,而不是恰好匹配 10 次。


推荐阅读