• Nginx日志分析 awk 命令


    通过Nginx日志,可以简单分析WEB网站的运行状态、数据报表、IP、UV(unique visitor指独立访客访问数,一台电脑终端为一个访客。)、PV(page view即页面访问量,每打开一次页面PV计数+1,刷新页面也是)访问量等需求,如下为常用需求分析:
    (1) 统计Nginx服务器独立IP数。 
    awk '{print $1}' access.log |sort -r|uniq -c | wc -l
    (2) 统计Nginx服务器总PV量。
    awk '{print $7}' access.log |wc -l
    (3) 统计Nginx服务器UV统计。
    awk '{print $11}' access.log |sort -r|uniq -c |wc -l
    (4) 分析Nginx访问日志截止目前为止访问量前20的IP列表。
    awk '{print $1}' access.log|sort |uniq -c |sort -nr |head -20
    (5) 分析Nginx访问日志早上9点至中午12点的总请求量。
    sed -n "/2016:09:00/,/2016:12:00/"p access.log
    awk '/2017:09:00/,/2017:12:00/' access.log|wc –l
    (9) 分析Nginx访问日志状态码404、502、503、500、499等错误信息页面,打印错误出现次数大于20的IP地址。
    awk '{if ($9~/502|499|500|503|404/) print $1,$9}' access.log|sort|uniq –c|sort –nr | awk '{if($1>20) print $2}'
    (10) 分析Nginx访问日志访问最多的页面。
    awk '{print (7}' access.log |sort |uniq -c|sort -nr|head -20 (11) 分析Nginx访问日志请求处理时间大于5秒的URL,并打印出时间、URL、访客IP。 awk '{if ()NF>5) print $NF,$7,$1}' access.log|sort -nr|more
    新增匹配案例

    1.首先定义日志格式:
    '$remote_addr - (remote_user [)time_local] "$request" $status (body_bytes_sent " )http_referer" "(http_user_agent" ")http_x_forwarded_for"'
    统计访问 IP 次数:

    awk '{a[$1]++}END{for(v in a)print v,a[v]}' access.log

    统计访问访问大于 100 次的 IP:

    awk '{a[$1]++}END{for(v in a){if(a[v]>100)print v,a[v]}}' access.log

    统计访问 IP 次数并排序取前 10:

    awk '{a[$1]++}END{for(v in a)print v,a[v] |"sort -k2 -nr |head -10"}' access.log

    统计时间段访问最多的 IP:

    awk '$4>="[02/Jan/2017:00:02:00" && $4<="[02/Jan/2017:00:03:00"{a[$1]++}END{for(v in a)print v,a[v]}' access.log

    统计上一分钟访问量:
    date=$(date -d '-1 minute' +%d/%b/%Y:%H:%M)

    awk -vdate=$date '$4~date{c++}END{print c}' access.log

    统计访问最多的 10 个页面:

    awk '{a[$7]++}END{for(v in a)print v,a[v] |"sort -k1 -nr|head -n10"}' access.log

    统计每个 URL 数量和返回内容总大小:

    awk '{a[$7]++;size[$7]+=$10}END{for(v in a)print a[v],v,size[v]}' access.log

    首先使用$7 ++ 赋值数组a,将收集到的下标进行统计,然后再相加,++字符是代表从0开始,然后每遇到一个相同的字段就+1,又定义了一个size 数组,匹配$7的地址,然后利用+=符号,计算每个网页的大小,遇到$7相同的网页就$10就相加,所以匹配的条件的书籍都被写入到awk 内部中的数组表内,最后利用for 循环赋值v 进行循环读取awk数组表内的每个值,进行输出。

    统计每个 IP 访问状态码数量:

    awk '{a[$1" "$9]++}END{for(v in a)print v,a[v]}' access.log

    统计访问 IP 是 404 状态的次数:
    awk '{if ($9~/404/)a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log

    查询18:00-18:09分日志

    grep '2019-10-30 18:0[0-9]' info.log

  • 相关阅读:
    OpenEuler 中C与汇编的混合编程
    实验四 Web服务器2
    实验四 Web服务器1
    OpenEuler中C语言中的函数调用测试
    第14章学习笔记(20191213兰毅达)
    第13章学习笔记(20191213兰毅达)
    第12章学习笔记(20191213兰毅达)
    冲刺day5
    Oracle中Sequence使用
    Oracle中dual表的用途
  • 原文地址:https://www.cnblogs.com/Serverlessops/p/13825811.html
Copyright © 2020-2023  润新知