问题

  • 查看所有服务器日志频繁刷新无法快速定位问题

  • 每次都需要按ctrl+c来终止刷新,查看历史日志

  • 无法确定日志的报错数量的分布,来自哪个接口或者服务

思路

  1. 通过awk命令,执行split方法切分当前行的日志

  2. 拆分后得到a[NF],就是最后的接口地址

  3. 然后对其进行?之后的参数拆分,因为我们只需要接口地址,不关心参数

  4. 对其进行ASCII排序

  5. uniq -c去重,并且统计数量

  6. sort -n -r按照数字来进行排序,并且倒序

  7. 获取报错数量最多的前十个

效果

具体接口路径被隐藏

1000 [REQUEST_URI:/vxxxx/yyy/ssss
879 [REQUEST_URI:/xxxx/yyy/ssss
878 [REQUEST_URI:/xxxx/yyy/ssss
601 [REQUEST_URI:/xxxx/yyy/ssss
559 [REQUEST_URI:/xxxx/yyy/ssss
490 [REQUEST_URI:/xxxx/yyy/ssss
477 [REQUEST_URI:/xxxx/yyy/ssss
445 [REQUEST_URI:/xxxx/yyy/ssss
394 [REQUEST_URI:/xxxx/yyy/ssss
381 [REQUEST_URI:/xxxx/yyy/ssss

代码实现

tail -n 100 /var/log/error/web*  |grep -v '==>'| awk '{split($0,a," ");split(a[NF],b,"?");print(b[1])}'|sort|uniq -c  | sort -n -r | head -n 10

jaysun
507 声望25 粉丝

Code is law