线上 Node.js 业务流量异常增长问题定位
记一次简单的抓爬虫的过程
问题现象
某日,通过自建的监控系统,我们发现部门下属全部业务的 notFound 页面的性能上报量都有大幅的异常增长,进而影响了单一页面的性能指标以及全量的性能指标。
问题分析
遇到流量突然暴涨的情况,我们首先从两个角度分析:业务自身的正常增长、来自爬虫的异常增长。
从正常增长的角度来看:
- 增长的流量全是来自没有实际内容的 notFound 页面
- 跟业务方沟通后找不到合法的流量来源
- 都不带 referrer 以及合法用户的 cookie
通过以上三点,我们基本可以确定异常流量来自于爬虫
定位爬虫
想解决爬虫就需要先定位爬虫的特征,比如 相同的 UA、相似的 IP段 等。
我们先在服务端日志中进行分析,发现 IP 和 UA 特征并不明显。
这是由于业务特质导致的。我们业务的 notFound 页面一直有承担部分爬虫流量的职责,所以整体服务调用量一直较多。在大量服务日志中,爬虫部分 IP 并不是特别起眼。
我们换个角度,从前端性能日志来分析。刚才讲到虽然 notFound 页面服务调用量较高,不过由于大部分请求都是直接爬页面,没有在浏览器中进行渲染,所以前端性能上报量一直比较稳定。可以用来做突破口。
在分析前端性能日志时,我们借助了集团内部共建的 TAM 平台的多维度分析视图来进一步定位。
如图,可以看到在 ISP 分析视图中,来自阿里巴巴的流量占比近70%,这是非常明显的异常聚集。
根据这个特征,我们去前端性能上报的原始日志中进行过滤,发现阿里巴巴的请求IP都在一个网段中,再使用 awk 拆解日志进行聚合分析,来自阿里巴巴的网段在头部呈现聚集态势,如图:
现在我们可以得出结论了:异常增长的流量来自于阿里巴巴神马搜索的爬虫
问题解决
能定位到爬虫的特征,我们就可以根据具体的特征来施加不同维度的封禁手段。
问题总结
通过本次异常流量问题的定位和解决,我们应该学会:
- 通过 UA、IP段、运营商等多个维度来定位爬虫特征,并学会借助平台功能
- 熟悉整个服务端请求链条,遇到问题应该从整个链条逐步细化定位环节问题
- 前端性能日志与服务端日志结合分析能更快的定位问题
- 熟练使用 awk / sort / uniq 等Linux文本分析工具