如何统计日志中每个url的请求次数

以前上线经常关注日志文件中error的情况,那么对于这种简单的想查看上线瞬间是否有服务报错应该怎么操作呢。

如果日志文件名成为: app_20220308.log
查看上线过程中日志是否有error
tail -f app_20220308.log | grep error
会用到 tailgrep 2个命令
简单说下这2个命令吧

tail:用于查看文件的内容

  • -f : 循环读取,意思就是当前比如执行 tail -f fileName 屏幕可能显示一条或者不显示任何日志,但是此时有人访问了你的日志,你的屏幕上就会多出一条相关的访问日志
  • -n<行数>: 显示文件的尾部 n 行内容,这个就很简单了,不做多余解释了
    注意: tail filleName 显示末尾的10行数据

grep: 命令用于查找文件里符合条件的字符串。

  • -v 或 --invert-match : 显示不包含匹配文本的所有行。【这个比较常用些】
  • -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
  • -i 或 --ignore-case : 忽略字符大小写的差别。
    注意: grep 后面接的词语可以用引号包裹,不用也没关系,可能变成习惯很多人都愿意包裹起来

那么此时当你好好的ip1上观察日志情况的时,你老板来了,对你说,‘比卡丘,去,统计下昨天各个接口访问量是多少’,那么此时你可能默默的打开百度了,正好看到我的文章了,兄弟来,我们造作起来

先直接告诉你答案

grep  api  app_20220307.log | awk -F\" '{print $2}' | sort | uniq -c | sort -n -r

这句话的意思你,我要查询文件名为app_20220307.log中包含api的日志,对于每一行符合要求的数据,用进行分割,分割后取第二个字符,进行统计,然后对于其结果集,进行排序

咱们来一个命令一个命令解释下
grep: 上文已经说过了不在赘述了

akw 这个可是linux的三剑客之一,重头戏,压轴了

sor:用于将文本文件内容加以排序。sort 可针对文本文件的内容,以行为单位来排序。

  • -b 忽略每行前面开始出的空格字符。
  • -n 依照数值的大小排序。举个栗子:
//假如目前统计出来的结果是这样的
123  /api/url
567  /api/name
233 /api/age

那么 sort -n之后是

123  /api/url
233 /api/age
567  /api/name
  • -r 以相反的顺序来排序。

uniq:用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。uniq 可检查文本文件中重复出现的行列。

  • -c或--count 在每列旁边显示该行重复出现的次数。
  • -d或--repeated 仅显示重复出现的行列。

awk:是一种处理文本文件的语言,是一个强大的文本分析工具。
具体语法为:

awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)

这个命令有兴趣可以自学下,比较强大,对于日常日志分析有很大帮忙
简单介绍下本文用到的一些基础

  • -F fs: 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F"
    具体来说就是把每一行日志按照"进行分割
  • '{print $8}' 是把分割后的第8个字符打印出来

注意: 在没有-F 时,按照默认空格分割,各个$含义如下:
$0 就是整个记录行
$1 就是第一个字符
$4 就是第4个字符
现在可以搞定你老板的需求了,兄弟看你的了

你可能感兴趣的:(如何统计日志中每个url的请求次数)