Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。无论是在大流量的网站还是小型的个人博客中,Nginx都得到了广泛应用。在实际生产环境中,对Nginx日志的分析有助于我们了解网站的访问情况,发现潜在问题并进行优化。本文将通过编写Shell脚本,实现对Nginx日志的全面统计分析。
Nginx日志格式
首先,我们需要确保Nginx日志格式与以下格式类似:
假设我们的日志文件名为access.log。
Shell脚本实现
接下来,我们编写一个Shell脚本,对Nginx日志进行统计分析。这个脚本包括以下功能:
- 统计各种状态码的数量
- 统计访问最多的Referer
- 统计访问最高的URI
- 统计访问最多的IP和User-Agent
- 统计每分钟的请求数、流量、请求时间、状态码等
脚本代码实现:
1.统计各种状态码的数量:
① Arry[$12] += 1;:
- $12 是日志文件的第十二个字段,通常表示 HTTP 状态码。
- Arry 是一个关联数组,以 HTTP 状态码为键,将每个状态码出现的次数累加到数组 Arry 中。
- Arry[$12] += 1; 表示状态码 $12 出现的次数加 1。
② total++;:
- 记录总的日志行数。
③ for (s in Arry):
- 遍历数组 Arry 中的每个状态码 s。
④ printf "%d\t%.4f\t%s\n", Arry[s], Arry[s] / total, s:
- 打印每个状态码的出现次数、占比和状态码本身。
- Arry[s] 是状态码 s 出现的次数。
- Arry[s] / total 是该状态码出现的比例(占总请求数的百分比)。
- s 是状态码。
- 输出格式为:出现次数\t 比例\t 状态码。
运行上述的命令,输出如下结果:
统计各种状态码的数量
2.统计访问最多的Referer
执行上述命令后,输出如下图的结果:
统计访问最多的Referer
3.统计访问最高的URI
执行上述命令后,输出如下图的结果:
统计访问最高的URI
4.统计访问最多的IP和User-Agent
(1) 统计最多IP访问次数
执行上述命令后,输出如下图的结果:
统计最多IP访问次数
(2) 统计最多访问的User-Agent
执行上述命令后,输出如下图的结果:
统计访问统计访问
5.统计每分钟的请求数、流量、请求时间、状态码等
执行上述命令后,输出如下结果:
总结
通过上述Shell脚本,我们可以快速、全面地分析Nginx日志,了解网站的访问情况和性能表现。这不仅有助于我们发现潜在问题,还能为后续的优化工作提供有力的数据支持。在实际应用中,你可以根据自己的需求,进一步扩展和定制这个脚本。
脚本获取方式
上述脚本已经上传上传到gitee,有需要的小伙伴可以自行获取。gitee上的仓库主要是分享一些工作中常用的脚本。小伙伴可以frok或者watch仓库,这样有更新可以及时关注到。
脚本仓库
仓库地址:https://gitee.com/didiplus/script