当前位置: 首页 > news >正文

linux如何按月统计日志中的接口访问数量

背景

有时候需要帮运营去统计一些数据,不论是活动产生的数据还是日常的数据。因为并没有功能来支撑,所以只能从日志中进行统计。
今天是需要通过在日志中按月统计用户登录次数
我们的日志格式大概如下:

[2023-04-21 17:45:22.500] [1681985022047] [INFO] [http-nio-8066-exec-10] [http] [6f69159e6c8f4cb3828c691f2e6c6020] [3] [preserve1] [com.a.b
.c.LogFilter] Response ((POST)) ((/api/user/login)) 123.118.108.22---((200))  userId (( user_id_0))(({"code":500,"data":null,"msg":"ac
countPasswordError","identifier":""}))

解决过程

首先找到我们服务中所有用于登录的接口,假设接口为/api/user/login:
假设我们想统计3月份的用户的登录次数,我们需要借助awkgrep命令来实现:

grep '/api/web/webUser/login' server1.log | awk '{# 提取日期信息date_str = substr($0, index($0, "[") + 1, 10)# 解析日期split(date_str, date_arr, "-")month = date_arr[2]# 如果月份为3,增加计数if (month == "03") {requests_count++}
}
END {# 打印结果print "March 2023: " requests_count " requests"
}'

输出:

March 2023: 1586 requests

如果我们的登录接口不止一个,那么需要将我们的登录接口的条件都加上,如果是或者的关系,我们需要用到grep -E '/api/user/login|/api/user/login1'

grep -E '/api/user/login|api/user/login1' server1.log | grep 'POST'  | awk '{# 提取日期信息date_str = substr($0, index($0, "[") + 1, 10)# 解析日期split(date_str, date_arr, "-")month = date_arr[2]# 如果月份为3,增加计数if (month == "03") {requests_count++}
}
END {# 打印结果print "March 2023: " requests_count " requests"
}'

当然,我上边的条件除了用到OR的关系,也用到了且(AND)的关系,所以且的关系需要使用多个 grep 命令,将它们通过管道 | 连接在一起。

总结

linux中提供了很多强大的命令供我们进行统计使用,awk就是其中一个。如果有额外的场景使用,也希望我们多多进行探索。

相关文章:

  • Docker镜像构建优化及上传
  • git撤销命令大全
  • 用python提取PDF中各类文本内容的方法
  • Android 实现获取集合中出现重复数据的值和数量
  • Overleaf Docker编译复现计划
  • HTML-鼠标悬浮文案效果
  • PriorityQueue源码阅读
  • 如何使用vite框架封装一个js库,并发布npm包
  • C#-sort()利用委托自定义排序
  • 肯尼斯·里科《C和指针》第6章 指针(2)
  • 安防视频云平台/可视化监控云平台ARM版EasyCVR无法下载录像文件,如何解决?
  • 一文速学-selenium高阶性能优化技巧
  • GoZero微服务个人探索之路(三)Go-Zero官方rpc demo示例探究
  • Oracle12c创建表空间及用户
  • Java并发编程——伪共享和缓存行问题
  • [LeetCode] Wiggle Sort
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • JavaScript实现分页效果
  • Js基础知识(四) - js运行原理与机制
  • JS学习笔记——闭包
  • learning koa2.x
  • MaxCompute访问TableStore(OTS) 数据
  • MySQL几个简单SQL的优化
  • nodejs:开发并发布一个nodejs包
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • vue脚手架vue-cli
  • webpack入门学习手记(二)
  • yii2权限控制rbac之rule详细讲解
  • 第2章 网络文档
  • 汉诺塔算法
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 记一次用 NodeJs 实现模拟登录的思路
  • 坑!为什么View.startAnimation不起作用?
  • 前端自动化解决方案
  •  一套莫尔斯电报听写、翻译系统
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (转)jQuery 基础
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net下的富文本编辑器FCKeditor的配置方法
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • []error LNK2001: unresolved external symbol _m
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心