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,它代表所有的列。

  • 相关阅读:
    .NetCore Grpc 客服端 工厂模式配置授权
    DOCKER 拉取 dotnet 镜像太慢 docker pull mcr.microsoft.com too slow
    Introducing .NET 5
    VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
    Omnisharp VsCode Attaching to remote processes
    zookeeper3.5.5 centos7 完全分布式 搭建随记
    Hadoop2.7.7 centos7 完全分布式 配置与问题随记
    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
    SQL基础随记3 范式 键
    MySQL调优 优化需要考虑哪些方面
  • 原文地址:https://www.cnblogs.com/wuxun1997/p/14071770.html
Copyright © 2011-2022 走看看