apache-flink - Apache Flink - 匹配连续模式中具有不同值的字段
问题描述
考虑一个用例,我们需要找到攻击模式,例如从同一设备和相同的用户名登录 10 次失败,然后从不同的设备但相同的用户名成功登录。这应该在 10 分钟内发生。
假设我们有 10 个登录失败的 Windows 事件,其中用户 A 作为用户名,B 作为设备名,并且我们从用户 A 使用不同的设备 C 成功登录,我们应该发出警报。请让我知道如何使用 flink CEP 来解决此案。
解决方案
这与具有相同值的 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 次。
推荐阅读
- jmeter-5.0 - 从响应中提取值并在下一个采样器请求正文中使用它
- arduino - SIM7600CE - 如何通过软件知道SIM卡何时注册到网络
- php - Wordpress 从 api 更新数据
- c++ - replace_first_copy,有很多警告和错误
- css - 如何实现支持 HTML 的工具提示?
- mysql - 如何删除mysql中所有重复的行
- r - R - 使用for循环或lapply对文件夹中的两个文件应用函数并将结果保存在一个数据帧中
- python - 使用 Python 查找字符串中的相似点和矛盾点
- multithreading - 对于通过单个语句访问的变量,我是否需要 QMutex?
- angularjs - 选中复选框时如何显示和隐藏段落