本文主要介绍在服务出现问题时如何通过日志快速判断是否具有某种聚集性。

一般来说,当线上服务出现问题的时候,我们需要快速恢复服务(而不是定位问题根源)。
除了查看监控系统之外,通过本地日志判断是否具有某种聚集性也是常规操作。
如果聚集在某些号码、某些客户端IP,那么有可能是恶意攻击。
如果聚集在某些依赖后台IP,那么有可能是后台单机故障,应该尽快剔除。
如果聚集在某些错误码,那么应该尽快联系相关专业人员处理。

当然我们不能扫一下日志,然后就凭直觉说是某个号码或者某台机器出了问题。
我们应该用数据说话,这就需要根据时间段、错误信息过滤日志,然后收集重要字段的统计数据。
具体可以参考下面的命令:

1
2
3
4
awk '/2020-02-24 11:00:/,/2020-02-24 12:00:/' svc.log |
grep '错误字符串.*' |
sed 's/.*\(IP=[0-9.]*\).*/\1/' |
sort | uniq -c | sort -k 1

其中 awk 后面是时间段和日志文件,grep 后面是错误字符串, sed 后面是需要统计字段的格式。
需要注意时间段开始、结束的字符串一定要在日志中能够找到,否则过滤会失败。
最后通过 sortuniq 排序去重后再按计数排序,有必要的话还可以加个 | tail -n 数目N 显示Top N。