Linux命令 - 统计log日志某接口用户访问频次并排序

文章讲述了如何在内部人员app服务器接口访问量激增的情况下,通过Linux命令grep、awk、sort和uniq对Nginx日志进行清洗和分析,快速统计特定接口/api/submitOrder的wxUid访问频次,以便于监控和管理。
摘要由CSDN通过智能技术生成

背景

某天发现内部人员使用的app服务器访问突增,但不影响服务正常运行,想通过log统计接口的人员访问频次。
从监控平台可以看到访问激增的接口,因Nginx不缓存用户信息只有访问IP,日志清洗的Hive表只能访问前一天,不方便快速统计。
在这里插入图片描述

所以想直接用Linux命令检索log日志,快速输出分组排序结果。

实现方案

在知道是哪个接口被大量访问,以及访问时间段后, 可以圈定log检索范围。

log日志格式如下:

[xx-xx 16:00:00 007] 658d2xxxx-false INFO - logId=xxx uri=/api/submitOrder act=submitOrder 
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 -nr
  • grep “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 - logId=xxx uri=/api/submitOrder act=submitOrder param={"wxUid":
    2 —— "123456"
    3 —— ,"wxName":null,"productPoolIdList":[1234213,1111111],"uid":22222,"proposer":"张三"}
    取出第二部分字符串,即"123456"。

  • sort
    对切割获取的结果排序。目的是将相同字符串聚集到一起。

  • uniq -c
    统计数量与去重

  • sort -nr
    对统计结果倒排。不指定会按正序排。

输出结果
在这里插入图片描述
其中:
1418089为该台服务器在这期间总访问次数;下面的数据,第一列为访问次数,第二列为用户wxuid,结果按访问次数倒序排。

参考文档

下面是一篇非常详细的实现博客,推荐阅读。

Linux awk+uniq+sort 统计文件中某字符串出现次数并排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值