nginx一段时间内的访问量统计

本文介绍了如何使用命令行工具,如sed、awk和sort,来统计和分析应用系统的并发访问量和网络连接状态。通过具体命令示例,详细展示了如何在指定时间区间内获取nginx和应用日志中的每分钟访问量和TCP连接状态信息,并对数据进行排序和汇总,从而了解系统运行情况和并发高峰时段。
部署运行你感兴趣的模型镜像

下面两个命令,我们可以 了解应用系统的大致 运行情况,并发数量

 

1,统计nginx日志红9-11点,每分钟 访问量,日志输出数量,从大到小排序 当然没有去重,但可以大致了解每分钟的并发情况:

sudo sed -n '/2015:09:00/,/2015:11:00/p' access_wcs.log |  awk  '{a[substr($4,9,10)]+=1} END{for(i in a) printf "%s %s\n",i,a[i]}'  | sort -k 2 -n -r  

 

 

2,应用的日志也可以,统计,类似:

sudo sed -n '/2015-08-14 09:00:00/,/2015-08-14 11:00:00/p' wcs.log |  awk -F ',' '{if($1~/2015/) a[substr($1,0,17)]+=1} END{for(i in a) printf "%s %s\n",i,a[i]}'  | sort -k 3 -n -r

 

 

上面这两个命令,我们可以 了解系统的大致 运行情况,并发数量

例如10点钟的时候,什么秒杀活动,抢红包活动,那10点左右的数量肯定大于其他时刻的,例如:

 

 

 除了上面的命令,我们还可以利用netstat 观察Linux系统的网络情况

   1:查看TCP连接状态

netstat -nat |awk '{print $6}' |sort|uniq -c|sort -rn  

 

 

您可能感兴趣的与本文相关的镜像

Facefusion

Facefusion

AI应用

FaceFusion是全新一代AI换脸工具,无需安装,一键运行,可以完成去遮挡,高清化,卡通脸一键替换,并且Nvidia/AMD等显卡全平台支持

<think> 我们根据引用内容,特别是引用[2]和引用[5]中的命令行方法,来用Python实现类似功能。 目标:统计nginx的access.log中每个IP的访问次数,并按访问次数从高到低排序。 步骤: 1. 读取日志文件。 2. 逐行处理,提取每行的第一个字段(IP地址)。 3. 统计每个IP出现的次数。 4. 按次数降序排序。 5. 输出结果。 另外,根据引用[3]和[引用4],日志格式通常为: log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; 所以每行的第一个字段是IP地址。 我们还可以扩展:除了统计IP访问次数,还可以统计总请求数、QPS(每秒请求数)、平均带宽等(如引用[3]和[5]所示),但用户当前需求是统计每个IP的访问次数。 我们将编写一个Python函数,输入为日志文件路径,输出为按访问次数降序排列的IP及其访问次数的列表。 注意:日志文件可能很大,所以我们逐行读取,避免一次性加载整个文件。 代码实现: </think> 以下是使用Python统计Nginx access.log内容的代码实现,结合引用内容中的关键信息: ```python import re import sys from collections import defaultdict def analyze_nginx_log(file_path): # 初始化统计数据结构(引用[2][5]) ip_counter = defaultdict(int) total_requests = 0 status_codes = defaultdict(int) bandwidth = 0 # 引用[3]中的日志格式示例 log_pattern = r'^(\S+) - \S+ \[(.*?)\] "(.*?)" (\d+) (\d+) "(.*?)" "(.*?)"' try: with open(file_path, 'r') as f: for line in f: total_requests += 1 # 总请求数统计(引用[5]) match = re.match(log_pattern, line) if not match: continue # 提取日志字段(引用[1][3]) ip = match.group(1) status = match.group(4) bytes_sent = int(match.group(5)) # IP访问统计(引用[2]) ip_counter[ip] += 1 # 状态码统计 status_codes[status] += 1 # 带宽统计(引用[3]) bandwidth += bytes_sent # 按访问量排序IP(引用[2][5]) sorted_ips = sorted(ip_counter.items(), key=lambda x: x[1], reverse=True) # 按频率排序状态码 sorted_status = sorted(status_codes.items(), key=lambda x: x[1], reverse=True) # 输出结果 print(f"总请求数: {total_requests}") print(f"总带宽消耗: {bandwidth / (1024*1024):.2f} MB") print("\nIP访问TOP10:") for ip, count in sorted_ips[:10]: print(f"{ip}: {count}次") print("\n状态码分布:") for code, count in sorted_status: print(f"{code}xx: {count}次") except FileNotFoundError: print(f"错误:文件 {file_path} 不存在") sys.exit(1) if __name__ == "__main__": if len(sys.argv) != 2: print("用法: python nginx_analyzer.py <access.log路径>") sys.exit(1) analyze_nginx_log(sys.argv[1]) ``` ### 功能说明 1. **IP访问统计** - 实现类似`awk '{print $1}' | sort | uniq -c | sort -r`的功能(引用[2][5]) - 按访问次数降序显示TOP10 IP 2. **基础指标统计** - 总请求数(引用[5]) - 总带宽消耗(`$body_bytes_sent`求和,引用[3]) - HTTP状态码分布(引用[3]) 3. **日志格式支持** - 适配Nginx默认日志格式(引用[1][3]) - 使用正则解析:`$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent ...` ### 使用方法 ```bash python nginx_analyzer.py /path/to/access.log ``` ### 输出示例 ``` 总请求数: 150322 总带宽消耗: 2457.82 MB IP访问TOP10: 192.168.1.23: 12442次 172.16.0.45: 9833次 10.0.0.12: 7541次 ... 状态码分布: 200: 142305次 404: 5121次 500: 2896次 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值