标签:
关联式规则(Association Rules, AR),又称关联规则,是数据挖掘的一个重要课题,用于从大量数据中挖掘出有价值的数据项之间的相关关系。
关联规则解决的常见问题如:“如果一个消费者购买了产品A,那么他有多大机会购买产品B?”以及“如果他购买了产品C和D,那么他还将购买什么产品?”正如大多数数据挖掘技术一样,关联规则的任务在于减少潜在的大量杂乱无章的数据,使之成为少量的易于观察理解的静态资料。关联式规则多不考虑项目的次序,而仅考虑其组合。
|
先验算法(英语:Apriori algorithm)是关联式规则中的经典算法之一。 在关联式规则中,一般对于给定的项目集合(例如,零售交易集合,每个集合都列出的单个商品的购买信息),算法通常尝试在项目集合中找出至少有 C 个相同的子集。先验算法采用自底向上的处理方法,即频繁子集每次只扩展一个对象(该步骤被称为候选集产生),并且候选集由数据进行检验。当不再产生符合条件的扩展对象时,算法终止。 |
1)配置 URI 转换规则:
观察主站 URI 设计规则,用户请求的 URI 虽然具备一定的规律性,其实往往多个 URI 对应后端同一个入口。
如 /cate/canyinmeishi/all, /cate/canyinmeishi/chaoyang,/cate/canyinmeishi/sandadonglilu/page6 等 URI 都是跳转到某前台工程的 index.do 服务,只是所携带的参数不同。
除此之外,用户还能手动在地址栏 URI 手动输入参数,如 /cate/all/all?pageNo=24,如果直接按照用户请求的 URI 进行 Apriori 频繁集运算,将很难发现用户的请求的相似性,从而不容易发现异常流量。
因此,需要对用户请求的 URI 进行降噪处理,以便发现请求的相似性。
如下图1所示,URI 转换规则包含四个属性:
图1 URL转换规则
2)配置 URI 的权值:
转换后的 URI 对应的权值,权值越大,异常请求的可能性越大。
3)设置 IP 白名单:
白名单支持 IP 和 IP 段,白名单中的 IP 参与频繁集计算,但不会出现在拦截规则中。
第二步,生成拦截规则:
1)从 ELK 中获取 N 分钟内 Nginx access log 关键信息:remote_ip, guid, referer, uri, agent 等字段;
2)降噪请求 URI,计算每个请求的非法系数:
非法系数和URI权值,页码值成正比。如果请求 URI 不可直接点击到达,非法系数也会增加。
3)利用 Apriori 算法,生成请求的频繁项集。
3.1)对用户请求进行 IP、URI、IP_URI、IP_UUID、IP_REFERER 等分类,类似 Map-Reduce。生成 Map<String, List<RequestRecord>> 结构数据;
3.2)计算出每个分类的频繁项集。生成的 Map<String, List<RequestRecord>> 结果集中,频率大于 N% 且请求次数大于 M 次的,则满足频繁项条件。
3.3)依据历史频繁项集数据和衰减规则生成拦截规则。衰减规则分成不衰减,缓慢衰减(sin函数),匀速衰减,快速衰减(二次函数)。
如下图2所示,拦截规则分为 IP、URI、UUID、Referer 等列,其中 IP 为必选项,URI、UUID、Referer 等列为可选项,即 IP and (URI or Referer or Uuid or other)。
图2 拦截规则
点击上图2中的 IP 或者 URI 进入历史请求记录页,历史记录页有图表和列表两种展示方式,如下图3所示:
图3 某IP历史请求列表页的趋势图展示方式
第三步,提交拦截规则:
拦截规则可以手动拦截和自动拦截。目前默认手动拦截,可以通过接口提交请求来设置自动拦截还是手动拦截。
#研发解决方案#基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案
标签:
原文地址:http://my.oschina.net/zhengyun/blog/510006