awk 统计nginx 日志 pv uv

本文介绍了如何利用awk和shell脚本来处理和统计Nginx日志,包括PV(页面浏览量)、UV(独立访客数)以及特定参数(如code)的访问次数。通过示例脚本,展示了如何根据日期和接口名进行日志分析,并将结果输出到日志文件中。

awk  是一种处理文本文件的语言,是一个强大的文本分析工具。

可以结合grep ,wc ,sort 等统计nginx日志的pv,uv。

一般的nignx 日志格式为:

log_format access '$remote_addr - $remote_user [$time_local] "$request" '

                              '$status $body_bytes_sent "$http_referer" '

                              '"$http_user_agent" $http_x_forwarded_for '

                             '"$upstream_addr" "$upstream_status" "$upstream_response_time"         "$request_time"';

其中$request 为请求的接口URL,

如下方日志格式,根据code,按天统计code的的访问次数:

113.123.123.123 - - [19/Jun/2022:18:15:39 +0800] "portal.***.***.com" 80 "GET /**/**/***/test?code=1234567890123456789 HTTP/1.1" 200 2001 2158 "-" "Dalvik/2.1.0 (Linux; U; Android 10; P759 Build/QP1A.190711.020)" 
### 使用 `awk` 统计 Nginx 日志中访问次数最多的前 10 条记录 要实现这一目标,可以通过以下方法来处理 Nginx 的访问日志文件。假设日志文件名为 `access.log`。 #### 方法概述 通过提取每一条请求中的唯一标识符(通常是 IP 地址或其他字段),可以统计其出现频率,并最终筛选出访问次数最高的前十条记录[^1]。 以下是完整的命令流程: ```bash awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10 ``` #### 命令解析 1. **提取 IP 地址**: 利用 `awk '{print $1}' access.log` 提取每一行的第一个字段作为 IP 地址[^2]。 2. **排序数据**: 将提取的 IP 地址通过 `sort` 进行字典序排列以便后续去重操作。 3. **统计重复项**: 使用 `uniq -c` 对已排序的数据进行统计,计算每个 IP 出现的次数。 4. **按访问量降序排列**: 再次利用 `sort -nr` 按照访问次数从高到低重新排序。 5. **获取前 10 名**: 最后使用 `head -n 10` 获取排名靠前的十条记录。 如果需要更复杂的统计方式,比如基于 URL 或其他字段,则可以根据实际需求调整 `awk` 中打印的内容。例如,若想按照请求路径 (`$7`) 而非 IP 地址统计访问情况,可修改如下: ```bash awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -n 10 ``` 此脚本会针对 HTTP 请求路径部分完成类似的高频查询分析工作。 #### 示例代码展示 下面是一个综合性的 Bash 脚本用于灵活切换不同维度(如 IP 和 URI)下的 Top 访问统计功能: ```bash #!/bin/bash LOG_FILE="access.log" DIMENSION=${1:-ip} # 默认以 ip 方式统计, 可选参数 uri case "${DIMENSION}" in ip) awk_field=1 ;; uri) awk_field=7 ;; esac awk "{print \$$awk_field}" ${LOG_FILE} \ | sort \ | uniq -c \ | sort -nr \ | head -n 10 ``` 运行该脚本时可以选择不同的统计维度,默认为 IP(`./script.sh ip`);也可以改为 URI(`./script.sh uri`)来进行对比研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰帆<

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值