文登区住房和城乡建设局网站,旅行社做网站,黑镜主题2.0wordpress,湖南省公司注册网站业务场景
最近遇到一个流量异常调用的接口#xff0c;所以需要通过后台日志查看接口调用情况#xff0c;先统计今天内接口的调用次数#xff0c;再具体到对应的设备号#xff0c;就知道哪台设备有问题了#xff0c;初步想到wc和awk命令来筛选统计#xff0c;但是真正去写…业务场景
最近遇到一个流量异常调用的接口所以需要通过后台日志查看接口调用情况先统计今天内接口的调用次数再具体到对应的设备号就知道哪台设备有问题了初步想到wc和awk命令来筛选统计但是真正去写的时候发现很多写法都不太记得了所以花了点时间去查手册找资料现在整理成博客方便以后需要就马上统计出来也分享出来希望可以帮助需要的人
项目环境
JDK1.8.0_111-b14Linux3.10.0-1062.el7.x86_64Apache Tomcat/8.5.85
实验步骤
统计某个接口调用次数可以通过grep筛选出对应得到接口然后加上wc统计出调用次数
cat catalina.out.2024-03-26| grep /api/get| wc -l如果要统计这个接口具体是哪个设备调用的每个设备具体的调用次数就稍微有点麻烦因为接口请求后会有一个请求参数一般是json传参的所以思路是先用grep定位到具体的接口然后解析传参json字符串获取设备号code对应的值value然后使用uniq加上sort统计出这个设备调用的次数具体的linux命令是
cat catalina.out.2024-03-26| grep /api/get| awk -F [,:}] {for(i1;iNF;i){if($i~code){print $(i1)} }} | tr -d | sort | uniq -c | sort -nr不熟悉的读者看起来有点懵所以一点点分析一下为什么这样写
查看日志 因为是tomcat部署的后端服务所以要查看tomcat的catalina.out日志文件使用cat命令
cat catalina.out.2024-03-26筛选出具体的api接口
cat catalina.out.2024-03-26| grep /api/get筛选请求json字符串对应设备号的value值 首选我们请求参数是一串json字符串假如是这样的
{ code, 0B403940FF289695FC093BF2556FFD75, type:1}所以需要获取json对应key也就是我们的设备号code对应的值0B403940FF289695FC093BF2556FFD75
cat catalina.out.2024-03-26| grep /api/get | awk -F [,:}] {for(i1;iNF;i){if($i~code){print $(i1)} }}解释一下awk对应参数 awk -F [,:}] 按照中括号中的内容,}:依次分割字符串{for(i1;iNF;i){if($i~code){print $(i1)} }}遍历筛选出来的数据匹配到code打印出对应的value 通过上面的linux命令打印出来的是
0B403940FF289695FC093BF2556FFD75
0B403940FF289695FC093BF2556FFD76
....如果觉得比较别扭可以去掉字符使用命令
tr -d 打印
0B403940FF289695FC093BF2556FFD75
0B403940FF289695FC093BF2556FFD76
....统计字符串出现的次数 统计字符串重复次数可以使用uniq -c然后为什么还要在前面加上sort命令因为uniq这个命令只能统计连续的的重复行。所以需要结合sort命令使用先sort排序然后uniq统计重复的行
sort | uniq -c打印可以看出可以统计数量了但是没排序
1000 0B403940FF289695FC093BF2556FFD75
1001 0B403940FF289695FC093BF2556FFD76
999 0B403940FF289695FC093BF2556FFD77
....按照调用次数进行倒序 sort命令的-n表示按照数值排序-r表示按照数值降序排序所以需要加上排序命令
sort -nr999 0B403940FF289695FC093BF2556FFD77
1000 0B403940FF289695FC093BF2556FFD75
1001 0B403940FF289695FC093BF2556FFD76....总结归纳
如果遇到param0b33131等等这样传参的可以使用如下命令进行筛选意思是使用param作为分隔符 awk -F (param) {print $2}如果遇到和本文类似的场景直接使用命令进行统计即可
cat catalina.out.2024-03-26| grep /api/get| awk -F [,:}] {for(i1;iNF;i){if($i~code){print $(i1)} }} | tr -d | sort | uniq -c | sort -nr