网站做图标链接,福州微信网站建设,免费搭建贴吧系统网站,营销策划是做什么
背景
某天发现内部人员使用的app服务器访问突增#xff0c;但不影响服务正常运行#xff0c;想通过log统计接口的人员访问频次。 从监控平台可以看到访问激增的接口#xff0c;因Nginx不缓存用户信息只有访问IP#xff0c;日志清洗的Hive表只能访问前一天#xff0c;…
背景
某天发现内部人员使用的app服务器访问突增但不影响服务正常运行想通过log统计接口的人员访问频次。 从监控平台可以看到访问激增的接口因Nginx不缓存用户信息只有访问IP日志清洗的Hive表只能访问前一天不方便快速统计。
所以想直接用Linux命令检索log日志快速输出分组排序结果。
实现方案
在知道是哪个接口被大量访问以及访问时间段后 可以圈定log检索范围。
log日志格式如下
[xx-xx 16:00:00 007] 658d2xxxx-false INFO - logIdxxx uri/api/submitOrder actsubmitOrder
param{wxUid:123456,wxName:null,productPoolIdList:[1234213,1111111],uid:22222,proposer:张三}要在上述日志信息中统计各个wxUid访问接口 /api/submitOrder 频次并根据频次倒序排列。
Linux命令如下
grep uri/api/submitOrder $logpath | awk -F (wxUid:|,wxName:null) {print $2}
| sort | uniq -c | sort -nrgrep “uri/api/submitOrder” $logpath 框定查询范围。因log日志存放大量info信息而我们只需要某个action的日志。logpath 为访问路径此处可以指定访问某个时间段的log日志。 awk -F ‘(“wxUid”: |,“wxName”:null)’ ‘{print $2}’ 字符串切割输出需要字符串。用wxUid: 或,“wxName”:null为分隔符将上述日志分为三部分 1 —— [xx-xx 16:00:00 007] 658d2xxxx-false INFO - logIdxxx uri/api/submitOrder actsubmitOrder param{wxUid: 2 —— 123456 3 —— ,wxName:null,productPoolIdList:[1234213,1111111],uid:22222,proposer:张三} 取出第二部分字符串即123456。 sort 对切割获取的结果排序。目的是将相同字符串聚集到一起。 uniq -c 统计数量与去重。 sort -nr 对统计结果倒排。不指定会按正序排。
输出结果 其中 1418089为该台服务器在这期间总访问次数下面的数据第一列为访问次数第二列为用户wxuid结果按访问次数倒序排。
参考文档
下面是一篇非常详细的实现博客推荐阅读。 Linux awkuniqsort 统计文件中某字符串出现次数并排序