zoukankan      html  css  js  c++  java
  • 使用awk统计tomcat中access.log日志里时延超过500毫秒的记录

      之前在一个springboot项目中开启了access.log日志(参见spring boot打开tomcat的access日志),现在可以很方便的根据access日志统计时延。先看日志文件:

      再看access.log里的8个字段:

    %h %l %u %t "%r" %s %b %D

      这几个字段都是啥意思?

    • %h = 发起请求的客户端 IP 地址
    • %l = 客户机的 RFC 1413 标识 ( 参考 ) ,只有实现了 RFC 1413 规范的客户端,才能提供此信息。
    • %u = 访问用户的 ID
    • %t = 收到请求的时间
    • %r = 来自客户端的请求行
    • %s = 服务器返回客户端的状态码
    • %b = 返回给客户端的字节大小,但不包括响应头的大小
    • %D = 接口请求时延

      

      从以上参数可以看出,如果要统计时延超过500毫秒的请求,就看最后一个字段就行了。使用awk统计时延超过500毫秒命令如下:

    wulf@wulf00 MINGW64 /e/workspace/subtitle/logs (master)
    $ awk '$NF >= 500 {print $0}' access_log*.log
    127.0.0.1 - - [02/Dec/2020:06:51:19 +0800] "POST /liveSync HTTP/1.1" 200 43 668
    127.0.0.1 - - [02/Dec/2020:06:51:19 +0800] "POST /liveSync HTTP/1.1" 200 43 768
    127.0.0.1 - - [02/Dec/2020:06:51:52 +0800] "POST /liveStop HTTP/1.1" 200 43 819
    127.0.0.1 - - [02/Dec/2020:06:51:53 +0800] "POST /liveStop HTTP/1.1" 200 43 1000
    127.0.0.1 - - [02/Dec/2020:06:52:18 +0800] "POST /liveModify HTTP/1.1" 200 43 643
    127.0.0.1 - - [02/Dec/2020:06:52:18 +0800] "POST /liveModify HTTP/1.1" 200 43 501
    127.0.0.1 - - [02/Dec/2020:06:51:19 +0800] "POST /liveSync HTTP/1.1" 200 43 1668
    127.0.0.1 - - [02/Dec/2020:06:51:47 +0800] "POST /liveSync HTTP/1.1" 200 43 888
    127.0.0.1 - - [02/Dec/2020:06:51:53 +0800] "POST /liveStop HTTP/1.1" 200 43 710
    127.0.0.1 - - [02/Dec/2020:06:52:18 +0800] "POST /liveModify HTTP/1.1" 200 43 666
    127.0.0.1 - - [02/Dec/2020:06:51:19 +0800] "POST /liveSync HTTP/1.1" 200 43 608
    127.0.0.1 - - [02/Dec/2020:06:51:47 +0800] "POST /liveSync HTTP/1.1" 200 43 558
    127.0.0.1 - - [02/Dec/2020:06:52:18 +0800] "POST /liveModify HTTP/1.1" 200 43 556

      有一点要注意,虽然我们在access日志文件里是8个字段,但实际上awk解析的时候是11个字段:

    • awk '{print $1}' access_log.2020-12-02.log       # IP 地址  (%h)
    • awk '{print $2}' access_log.2020-12-02.log       # RFC 1413 标识  (%l)
    • awk '{print $3}' access_log.2020-12-02.log       # 用户 ID  (%u)
    • awk '{print $4,$5}' access_log.2020-12-02.log     # 日期和时间  (%t)
    • awk '{print $7}' access_log.2020-12-02.log      #  URI (%>s)
    • awk '{print $9}' access_log.2020-12-02.log      # 状态码 (%>s)
    • awk '{print $10}' access_log.2020-12-02.log     # 响应大小  (%b)
    • awk '{print $11}' access_log.2020-12-02.log     # 时延大小  (%b)

      我们注意到awk按字符串的空格来分割,比如我们要看接口名,那么http方法类型(其中的$6,即POST)就被干掉了:

    $ awk '{print $7}' access_log*.log
    /liveSync

      再结合这条命令awk '$NF >= 500 {print $0}' access_log*.log说两点:一个是$NF,它指定最后一列,即$11,所以用NF或者11都行;另一个是$0,它代表所有的列。

  • 相关阅读:
    2277 爱吃皮蛋的小明
    zoj2314 经典 无源汇有上下界最大流 并输出可行流
    [置顶] css3 befor after 简单使用 制作时尚焦点图相框
    [置顶] 程序员的奋斗史(二十八)——寒门再难出贵子?
    TaintDroid:智能手机监控实时隐私信息流跟踪系统(四)
    Activity切换效果(overridePendingTransition)
    Activity生命周期,状态保存恢复(经典)
    大二实习使用的技术汇总(上)
    Struts2配置RESULT中TYPE的参数说明
    关于程序动态库链接和运行时搜索路径设置的个人理解
  • 原文地址:https://www.cnblogs.com/wuxun1997/p/14071770.html
Copyright © 2011-2022 走看看