【shell脚本】精选10款Nginx日志分析脚本

news/2025/2/27 17:19:22/文章来源:https://www.cnblogs.com/o-O-oO/p/18563613

Nginx日志分析是网站运维和性能优化的重要环节。10个常用的Nginx日志分析脚本,脚本涵盖了从基本访问统计到高级性能分析的多个方面。供参考学习。

1、统计访问最多的前10个IP地址

#!/bin/bash
LOG_FILE=$1
echo "统计访问最多的10个IP"
awk '{a[$1]++}END{print "UV:",length(a);for(v in a)print v,a[v]}' $LOG_FILE | sort -k2 -nr | head -10
echo "----------------------"

2、统计指定时间段内访问最多的IP地址

#!/bin/bash
LOG_FILE=$1
START_TIME="[01/Jan/2024:00:00:00"
END_TIME="[31/Dec/2024:23:59:59"
echo"统计时间段 $START_TIME 至 $END_TIME 内访问最多的IP"
awk -v start="$START_TIME"-v end="$END_TIME"'$4 >= start && $4 <= end {a[$1]++}END{for(v in a)print v,a[v]}'$LOG_FILE|sort-k2 -nr |head-10
echo "----------------------"

3、统计访问最多的前10个页面

#!/bin/bash
LOG_FILE=$1
echo "统计访问最多的前10个页面"
awk '{a[$7]++}END{print "PV:",length(a);for(v in a)print v,a[v]}' $LOG_FILE | sort -k2 -nr | head -10
echo "----------------------"

4、统计不同页面状态码的数量

#!/bin/bash
LOG_FILE=$1
echo "统计不同页面状态码的数量"
awk '{a[$9]++}END{for(v in a)print v,a[v]}' $LOG_FILE | sort -k2 -nr
echo "----------------------"

5、统计每秒的请求数(TOP 100)

#!/bin/bash
LOG_FILE=$1
echo"统计每秒的请求数(TOP 100)"
awk '{print substr($4, 15, 2)}'$LOG_FILE|sort|uniq-c |sort-nr |head-100
echo "----------------------"

6、列出传输时间超过3秒的页面(前20条)

#!/bin/bash
LOG_FILE=$1
echo"列出传输时间超过3秒的页面(前20条)"
awk '$NF > 3 {print $7}'$LOG_FILE|sort|uniq-c |sort-nr |head-20
echo "----------------------"

7、统计蜘蛛抓取次数及404次数

#!/bin/bash
LOG_FILE=$1
SPIDER="Baiduspider"
echo"统计蜘蛛 $SPIDER 抓取次数"
grep "$SPIDER"$LOG_FILE|wc-l
echo"----------------------"
echo"统计蜘蛛 $SPIDER 抓取404的次数"
grep "$SPIDER"$LOG_FILE| grep "404"|wc-l
echo "----------------------"

8、分析并生成deny.conf以阻止高频访问IP

#!/bin/bash
LOG_PATH=/var/log/nginx
NGINX_HOME=/etc/nginx
SPIDERFILE=/data/operations/op_script/spider.txttail-2000"$LOG_PATH"/access.log | egrep -iv "$(cat $SPIDERFILE)"| awk '$7~/\/shop\/detail/ {b[$1]++} END {for (i in b) print i, b[i]}'>/tmp/b.txta=$(awk '{print $2}'/tmp/b.txt | grep -E '[5-9][0-9]{1,}'|wc-l)
b=($(awk '{print $2}'/tmp/b.txt | grep -E '[5-9][0-9]{1,}'))for((i=0; i<$a; i++));do
if["${b[i]}"-gt 300];thenawk -v ip="${b[i]}"'{if ($1 == ip) print "deny " ip ";"}'/tmp/b.txt >>$NGINX_HOME/settings.d/deny.conf
fi
donesort-u $NGINX_HOME/settings.d/deny.conf -o $NGINX_HOME/settings.d/deny.conf
nginx -t && nginx -s reload

9、综合性能分析脚本(包含多个性能指标)

#!/bin/bash
LOG_FILE=$1echo"统计访问最多的前10个IP"
awk '{a[$1]++}END{print "UV:",length(a);for(v in a)print v,a[v]}'$LOG_FILE|sort-k2 -nr |head-10
echo"----------------------"echo"统计访问最多的前10个页面"
awk '{a[$7]++}END{print "PV:",length(a);for(v in a)print v,a[v]}'$LOG_FILE|sort-k2 -nr |head-10
echo"----------------------"echo"统计每秒的请求数(TOP 10)"
awk '{print substr($4, 15, 2)}'$LOG_FILE|sort|uniq-c |sort-nr |head-10
echo"----------------------"echo"列出传输时间超过3秒的页面(前10条)"
awk '$NF > 3 {print $7}'$LOG_FILE|sort|uniq-c |sort-nr |head-10
echo"----------------------"echo"统计不同页面状态码的数量"
awk '{a[$9]++}END{for(v in a)print v,a[v]}'$LOG_FILE|sort-k2 -nr
echo "----------------------"

10、按时间段和状态码统计访问量

#!/bin/bash
LOG_FILE=$1
START_TIME="[01/Oct/2023:00:00:00"
END_TIME="[31/Oct/2023:23:59:59"
STATUS_CODE="200"echo "统计 $START_TIME 至 $END_TIME 内状态码为 $STATUS_CODE 的访问量"
awk -v start="$START_TIME" -v end="$END_TIME" -v code="$STATUS_CODE" '$4 >= start && $4 <= end && $9 == code {count++} END {print "Total accesses with status code", code, "during the specified time range:", count}' $LOG_FILE
echo "----------------------"

Nginx日志分析总结

原创 北京二锅头 运维网工

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/839682.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【后门程序编程】基础1

一、后门概述 1.1 后门的发展历史 1.1.1 功能上发展。1.1.2 隐蔽性上的发展。1.2 后门的分类1.2.1 网页后门 1.2.2 线程插入后门 1.2.3 扩展后门 1.2.4 C/S后门。1.2.5 root kit。二、编写简单的cmdshell程序 2.1 管道通信技术简介 2.2 正向连接后门的编程 2.2.1 双…

LEAD:用于无源通用域自适应的学习分解

LEAD:用于无源通用域自适应的学习分解 通用领域适应(UniDA)的目标是在存在协变量和标签转移的情况下进行知识转移。最近,出现了无源通用域适配(SF UniDA),可以在不访问源数据的情况下实现UniDA,由于数据保护政策,这往往更实用。主要的挑战在于确定协变量移位样本是否属…

无监督域自适应的域不可知相互激励

无监督域自适应的域不可知相互激励 传统的无监督域自适应(UDA)致力于最大限度地减少域之间的分布差异,这忽视了从数据中利用丰富的语义,并难以处理复杂的域转换。一种有前景的技术是利用大规模预训练视觉语言模型的知识进行更有指导的适应。尽管做出了一些努力,但当前的方…

收藏篇:低功耗模组软件的PWM应用实例

本文是把我自己收藏的低功耗模组软件的PWM应用实例分析大家,我是以低功耗4G模组Air724UG为例。本文是把我自己收藏的低功耗模组软件的PWM应用实例分析大家,我是以低功耗4G模组Air724UG为例。 一、简介 1.1 pwm是什么 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩…

4G模组Air724UG软件的GPIO教程 | 技术版!

今天我要讲的技术是4G模组Air724UG软件的GPIO教程,希望看文的你有所收获。今天我要讲的技术是4G模组Air724UG软件的GPIO教程,希望看文的你有所收获。 一、GPIO 概述 GPIO 是通用型输入输出的简称,一个 GPIO 引脚可以用于输入、输出或其他特殊功能。 二、演示功能概述 本文将…

Air724UG软件的SD卡随笔!贴身版

本次要讲的是4G模组的SD卡示例,以Air724UG模组为例子供大家参考。本次要讲的是4G模组的SD卡示例,以Air724UG模组为例子供大家参考。 一、SD 卡概述 SD卡在物联网设备中,经常用于存储较大文件的容器载体。本文介绍如何用 Air724UG开发板,和PC端搭建一个基于SD卡存储文件的功…

关于低功耗模组的SPI示例详细教程!

本文说的是低功耗模组的SPI示例详细教程,以低功耗4G模组Air724UG为例我将详细分析。本文说的是低功耗模组的SPI示例详细教程,以低功耗4G模组Air724UG为例我将详细分析。 一、简介 SPI 是串行外设接口(Serial Peripheral Interface)的缩写。 SPI,是一种高速的,全双工,同步的…

在WPF程序中实现PropertyGrid功能

使用C#开发过Windows Forms的都知道,在Windows Forms程序中,有一个PropertyGrid控件,可以用于显示对象的属性,在WPF中并没有默认提供此功能的控件,今天以一个简单的小例子,简述在WPF中借助WinForm的PropertyGrid实现属性列表功能,仅供学习分享使用,如有不足之处,还请指…

2024-2025-1 20241322 《计算机基础与程序设计》 第九周学习总结

2024-2025-1 20241322 《计算机基础与程序设计》 第九周学习总结 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09这个作业的目标 - 操作系统责任 - 内存与进程…

记一次复杂sql涉及到的sql语法

这是一个报表的sql查询,查询销售员的业绩分析. 一、表说明customer:客户表,客户与销售人员(通过 salesman_id)关联。 sale_contract :销售合同表 user:用户表(销售人员表),包含字段如 real_name(姓名)、post_id(职位ID)、dept_id(部门ID)。 post:销售人员的职位信…

Java大作业5-6次总结

第一次迭代总体来说不难分析。它每个控制器和受控制器都是独立的,设计完之后就可以像拼积木那样来完成项目。感觉是封装思想的经典例题。 在进行类的设计时,由于题目中描述的类的实现采用的是元器件拼音首字母,因此为了方便记忆,我也使用了对应的拼音来定义类。这在实际使用…

一文梳理获取本地IP和远程IP的各种方式,附Python代码实例

本地 IP 是指设备在本地网络(如家庭、办公室局域网)中被分配的IP地址,用于在该局域网内设备之间的通信和识别,一般由路由器分配。远程 IP 则是互联网上其它网络或服务器的 IP 地址,用于设备与外部网络通信,如访问网站时的服务器 IP。 获取本地IP地址 1. 系统设置查看其中…