Linux 系列从多节点的catalina 日志中统计设备调用频次

Linux 系列从多节点的catalina 日志中统计设备调用频次

在日常后端服务运维、日志排查工作中,我们经常需要从海量日志里提取关键数据,比如统计某接口的设备调用频次。相比于写复杂脚本或借助可视化工具,一条精心组合的 Linux 命令就能快速实现需求。本文就以统计 /api/sync 接口的设备调用次数为例,拆解一条实用的日志分析命令,让你零基础也能看懂、会用。

一、业务场景与需求

我们的业务场景是:

  • 日志文件:catalina.out.2026-01-01(AGW服务的压缩日志)
  • 目标接口:/api/sync
  • 日志格式:包含 deviceCode:设备编号,xxx 字段
  • 需求:统计该接口下每个设备的调用总次数,并按次数升序排列

最终使用的完整命令:

bash 复制代码
grep "/api/sync" $(find ./ -type f -name catalina.out.2026-01-01|grep agw)|grep -oP 'deviceCode:\K[^,]+'|sort|uniq -c|sort -n

这条命令看似复杂,实则是多个基础命令的组合,下面逐段拆解原理。

二、命令逐段拆解(图文对照)

1. 第一步:定位目标日志文件

bash 复制代码
find ./ -type f -name catalina.out.2026-01-01|grep agw
  • find ./ -type f:在当前目录及子目录查找所有文件
  • -name catalina.out.2026-01-01:精准匹配指定日期的压缩日志
  • |grep agw:过滤出AGW服务对应的日志文件,避免匹配到无关文件

执行效果:快速锁定我们需要分析的日志路径,为后续读取做准备。

2. 第二步:筛选目标接口日志

bash 复制代码
grep "/api/sync" 【上一步找到的日志文件】
  • 读取定位到的压缩日志内容
  • 过滤出仅包含 /api/sync 接口的日志行,排除其他无关接口日志

执行效果:缩小数据范围,只保留我们关心的接口请求记录。

3. 第三步:精准提取设备编号deviceCode

bash 复制代码
grep -oP 'deviceCode:\K[^,]+'

这是整条命令的核心,用到了 grep 的高级正则能力:

  • -o:只输出匹配到的内容,而非整行
  • -P:启用Perl兼容正则表达式
  • deviceCode:\K[^,]+:匹配 deviceCode: 后的内容,直到逗号为止,直接提取设备编号

执行效果:剔除无关字段,只保留纯设备编码,无多余字符。

4. 第四步:统计设备调用次数

bash 复制代码
sort|uniq -c
  • sort:对提取出的设备编号排序,让相同设备编号连续排列
  • uniq -c:统计连续重复的设备编号,输出「次数+设备编号」

执行效果:完成去重与计数,得到每个设备的调用总量。

5. 第五步:按调用次数排序

bash 复制代码
sort -n
  • -n:按数字大小升序排列,调用次数少的在前,多的在后

执行效果:直观展示设备调用频次分布,快速定位高频/低频设备。

三、完整执行流程与结果示例

把所有命令组合后,终端输出效果如下:

复制代码
      2 device001
      5 device003
     12 device007
     30 device009
  • 第一列:设备调用次数
  • 第二列:对应设备编号

我们可以快速看出:device009 调用30次最多,device001 仅调用2次,数据一目了然。

四、命令扩展与灵活适配

这条命令可以根据实际场景快速修改,适配更多日志分析需求:

  1. 更换接口:把 /api/sync 替换为 /api/user 即可统计用户接口
  2. 更换日期:修改日志文件名中的 2026-01-01 即可分析其他日期日志
  3. 降序排列:将末尾 sort -n 改为 sort -nr,调用多的设备优先展示
  4. 适配非压缩日志:直接去掉压缩相关逻辑,指定日志路径即可

五、总结

这条 Linux 组合命令,把 findgrepsortuniq 四个基础工具完美结合,无需编写脚本、无需安装额外工具,就能快速从海量日志中统计设备调用次数,非常适合运维人员、后端开发日常排查问题。

掌握这类命令组合思路,面对日志分析、数据统计类需求时,能大幅提升工作效率,告别手动翻日志的低效方式。

相关推荐
赵丙双2 小时前
spring boot 排除自动配置类的方式和原理
java·spring boot·自动配置
8Qi82 小时前
LeetCode热题100--45.跳跃游戏 II
java·算法·leetcode·贪心算法·编程
bilI LESS2 小时前
Spring Boot接收参数的19种方式
java·spring boot·后端
PyHaVolask2 小时前
图片处理基础
运维·服务器
Chan162 小时前
MCP 开发实战:Git 信息查询 MCP 服务开发
java·开发语言·spring boot·git·spring·java-ee·intellij-idea
qing222222223 小时前
Linux中修改mac地址(重启后依然生效)
linux·服务器·macos
桦03 小时前
【Linux复习】:进程概念
linux·运维·服务器
Par@ish3 小时前
【局域网协议】通过ISE实现radius认证,AD 的TCP 3268端口在其中发挥什么作用
服务器·网络·tcp/ip
九皇叔叔3 小时前
004-SpringSecurity-Demo 拆分环境
java·springboot3·springsecurity