美文网首页
【nginx】通过nginx日志,统计接口调用频率

【nginx】通过nginx日志,统计接口调用频率

作者: Bogon | 来源:发表于2024-01-17 11:43 被阅读0次

    nginx 日志格式如下:

    log_format main '$remote_addr######-######$remote_user######[$time_local]######"$request"######'
        '$status######$body_bytes_sent######"$http_referer"######'
        '"$http_user_agent"######$request_time######$http_host######$request_id######$upstream_addr######$upstream_status######$http_X_Request_Id######$scheme######$upstream_response_time######$http_x_real_ip######$request_length';
    
    111.78.77.85######-######-######[10/Apr/2023:11:43:36 +0800]######"POST /gateway/api HTTP/2.0"######500######576######"-"######"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36; Qing/0.0.8; lang:zh-CN;bno:4.1.4(2302271341);"######0.000######jxjgy.jxsjgjt.com######45cecf996dd72b3569244f890308f019############-######-######https######0.000######-######98
     
    59.53.182.157######-######-######[10/Apr/2023:11:43:36 +0800]######"POST /gateway/api HTTP/2.0"######500######576######"-"######"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36; Qing/0.0.8; lang:zh-CN;bno:4.1.4(2302271341);"######0.000######jxjgy.jxsjgjt.com######e2ce75fb11e82a5e8c6253b7f9ea384c############-######-######https######0.000######-######98
     
    59.53.182.157######-######-######[10/Apr/2023:11:43:36 +0800]######"POST /gateway/api HTTP/2.0"######500######576######"-"######"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36; Qing/0.0.8; lang:zh-CN;bno:4.1.4(2302271341);"######0.000######jxjgy.jxsjgjt.com######7f1cc65791c608b17dc7be55ebce8d38############-######-######https######0.000######-######100
    
    日志字段分隔符:   ######  
    
    第1列,   $remote_addr      客户端IP地址
    
    第2列,   -                         无意义字符   
    
    第3列,$remote_user      客户端用户名称,一般为空 ,当nginx开启了用户认证功能后,此变量记录了客户端使用了哪个用户进行了认证
    
    第4列,[$time_local]      访问时间
    
    第5列,$request         请求HTTP的方式以及URL
    
    第6列,$status         返回给客户端状态码
    
    第7列,$body_bytes_sent   发送给客户端的字节数,不包括响应头的大小
    
    第8列,$http_referer         记录从哪个页面访问过来的
    
    第9列,$http_user_agent    记录客户端相关信息
    
    第10列,$request_time    请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止
    
    第11列,$http_host       请求地址,即浏览器中你输入的地址(IP或域名)
    
    第12列,$request_id        nginx为每个请求生成唯一ID的描述
    
    第13列,$upstream_addr     后端真正提供服务的主机地址
    
    第14列,$upstream_status     从后端服务器获得响应的状态码
    
    第15列,$http_X_Request_Id    上传请求的唯一 ID,通过该 ID 可快速定位用户请求的相关日志
    
    第16列,$scheme     请求的协议
    
    第17列,$upstream_response_time    建立连接和从上游服务器接收响应主体的最后一个字节之间的时间
    
    第18列,$http_x_real_ip        获取客户端真实IP
    
    第19列,$request_length      客户端请求长度
    

    如何统计每小时 有多少条?

    我们可以使用awk命令提取出日志中的时间戳部分,并将其格式化为只包含小时的形式。然后,使用uniq命令统计每个小时出现的次数。

    awk命令使用方括号作为分隔符,提取时间戳的小时部分并打印。然后,使用sort命令对小时进行排序,最后使用uniq命令统计每个小时出现的次数。

    $ cat  access.log  |   awk -F'[][]' '{split($2, a, ":"); print a[2]}' | sort | uniq -c 
    
    image.png

    如何统计每分钟 有多少条?

    要统计这个小时内每个分钟有多少条日志,可以使用类似的方法,使用awk命令提取日志中的时间戳,并将其格式化为包含小时和分钟的形式。然后,使用uniq命令统计每个分钟出现的次数。

    首先,使用awk命令提取日志中的时间戳,并将其格式化为小时:分钟的形式。然后,使用sort命令对小时和分钟进行排序,最后使用uniq命令统计每个分钟出现的次数。

    $  cat   access.log   | awk -F'[][]' '{split($2, a, ":"); print a[2]":"a[3]}' | sort | uniq -c
    
    image.png

    相关文章

      网友评论

          本文标题:【nginx】通过nginx日志,统计接口调用频率

          本文链接:https://www.haomeiwen.com/subject/ffylodtx.html