Nginx常用日志分析

文章详细介绍了Nginx访问日志access.log的字段结构,并提供了多种基于日志的统计和分析命令,包括统计UV、PV、最常访问URL、IP以及响应时间等。此外,还展示了如何根据时间截取日志和编写脚本进行实时访问量统计。
摘要由CSDN通过智能技术生成

nginx中access.log 的日志结构:


$remote_addr #客户端地址ip
$remote_user #客户端用户名称
$time_local #访问时间和时区
$request #请求的URI和HTTP协议
$http_host #请求地址
$status #HTTP请求状态
$upstream_status #upstream状态
$body_bytes_sent #发送给客户端文件内容大小
$http_referer #URL跳转来源
$http_user_agent #用户终端浏览器等信息
$ssl_protocol #SSL协议版本
$ssl_cipher #交换数据中的算法
$upstream_addr #upstream的地址
$request_time #整个请求的总时间
$upstream_response_time #upstream响应时间

常用操作命令

根据访问IP统计UV

awk '{print $1}'  access.log|sort | uniq -c |wc -l

根据访问url统计PV量

 awk '{print $7}' access.log | wc -l

查询访问最频繁的URL

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

查询访问最频繁的IP

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

查询传输时间超过3秒的页面

cat access.log |awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20

统计某路由平均响应时间

grep "/" access.log | awk '{print  $NF}' | grep -P '\d{3}?$' | awk '{sum += $0;}END {if(sum==0)print 0;else print sum/NR}'

获取每分钟的请求数量,输出到文件

cat access.log  | awk '{print substr($4,14,5)}' | uniq -c | awk '{print $2","$1}' > access.txt 

日志截取

# 从总日志文件中截取昨天一整天的数据出来,并覆盖到新文件中:cat  access.log | awk '$4 >="[14/Mar/2023:00:00:00" && $4 <="[14/Mar/2023:23:59:59"'  > access.2023051010.log

将某一时间段的日志输出到文件中

 打印一天的日志cat access.log | egrep "2023-05-04" > test.log     # 打印一小时的日志cat access.log | egrep "04/Jun/2023:10" > test.log        #打印任意时间段的日志sed -n '/04\/Jun\/2023:10/,/04\/Jun\/2023:12/p' access.log > test.log   

备注

sort 排序    sort 默认是升序,sort -r 降序    sort -u 去除重复行uniq 去重     -i 忽略大小写字符     -c 进行计数     -u 只显示唯一的行cut   从文件文件中截取     -d 后接分割字符     -f 依据-d的分隔符将信息分割成数段,-f 取出第几段     -c 以字符的单位取出固定字符区间wc  统计文件里面有多少单词,多少行,多少字符    -l  :仅列出行    -w  :仅列出多少字(英文单字)    -m  :多少字符

最后提供一个综合有用的脚本​​​​​​​​​​​​​​

#!/bin/bash#此脚本用于统计nginx日志当前时间n分钟之内不同接口的访问量统计LOG=/mnt/data/nginx-1.20.1/logs/access.logTMP=/tmp/url.tmpURLSTATS=mnt/data/nginx-1.20.1/logs/urlstats.log#删除临时统计文件[ -f $TMP ] && rm -fr $TMP
for i in `seq 15`do   d=`date +%d/%h/%Y:%H:%M  -d "$i minutes ago"`   #将每个时间段的URL进行统计并追加到临时文件   awk -v b="$d" '{if ($4 ~ b)a[$7]++}END{for(i in a)printf("%-42s %-d\n", i,a[i])}' $LOG >> $TMPdone
#将汇总到临时文件的URL统计进行汇总if [ -s $TMP ];then   awk '{a[$1]+=$2;}END{for(i in a)printf("%-42s %-d\n", i,a[i])}' $TMP | sort -nr -k2 > $URLSTATSelse   echo "没有统计到相关数据"fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值