尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
python代码分析nginx访问日志
本人网站使用内网穿透分析结结果IP都是内网地址。 统计结果 总访问量641805独立IP数14最活跃IP192.168.1.29访问492948次访问高峰时段16时59997次图表已保存至C:/Users/czliu/Downloads/nginx_analysis.png代码importreimportpandasaspdimportmatplotlib.pyplotaspltfromcollectionsimportCounterfromdatetimeimportdatetime# 配置项你的日志路径 LOG_PATHrC:\Users\czliu\Downloads\access.log# # 辅助函数清理字符串中的无效字符defclean_string(s):ifisinstance(s,str):# 移除非打印字符和二进制数据return.join(cforcinsifc.isprintable())returns# 1. Nginx日志正则表达式通用格式# 匹配格式IP - - [时间] 请求 状态码 大小 来源 UAlog_patternre.compile(r(\d\.\d\.\d\.\d)\s-\s-\s\[(.*?)\]\s(.*?)\s(\d)\s(\d|-))# 2. 解析日志parsed_data[]withopen(LOG_PATH,r,encodingutf-8,errorsignore)asf:forlineinf:# 清理日志行中的无效字符clean_lineclean_string(line)matchlog_pattern.match(clean_line.strip())ifmatch:ip,time_str,request,status,sizematch.groups()# 清理各个字段ipclean_string(ip)time_strclean_string(time_str)requestclean_string(request)statusclean_string(status)sizeclean_string(size)# 处理时间dtNonetry:# 日志时间格式03/Jan/2025:12:34:56 0800dtdatetime.strptime(time_str,%d/%b/%Y:%H:%M:%S %z)hourdt.hour# 按小时统计except:hour-1# 提取请求方法和URLreq_partsrequest.split()methodreq_parts[0]iflen(req_parts)0elseUNKNOWNurlreq_parts[1]iflen(req_parts)1else/# 再次清理方法和URLmethodclean_string(method)urlclean_string(url)parsed_data.append({ip:ip,time:dt,hour:hour,method:method,url:url,status:int(status),size:int(size)ifsize!-else0})# 转为DataFrame方便分析dfpd.DataFrame(parsed_data)print(f日志解析完成总访问量{len(df)}条)# 清理数据iflen(df)0:df[ip]df[ip].apply(clean_string)df[method]df[method].apply(clean_string)df[url]df[url].apply(clean_string)# 3. 分析核心数据# 3.1 访问量TOP10 IPip_top10Counter(df[ip]).most_common(10)# 3.2 按小时访问趋势hour_countsdf[df[hour]!-1][hour].value_counts().sort_index()# 3.3 HTTP状态码分布status_countsdf[status].value_counts()# 3.4 请求方法分布method_countsdf[method].value_counts()# 4. 绘制综合图表2x2子图iflen(df)0:plt.rcParams[font.sans-serif][SimHei]# 解决中文乱码plt.rcParams[axes.unicode_minus]Falseplt.rcParams[text.usetex]False# 禁用LaTeXplt.rcParams[text.parse_math]False# 禁用mathtext解析防止反斜杠被误解析fig,((ax1,ax2),(ax3,ax4))plt.subplots(2,2,figsize(16,10))fig.suptitle(Nginx访问日志分析报告,fontsize18,fontweightbold)# 子图1TOP10访问IPifip_top10:# 清理IP地址中的特殊字符并限制长度clean_ips[]forip,_inip_top10:clean_ipclean_string(ip)# 限制IP显示长度避免过长iflen(clean_ip)15:clean_ipclean_ip[:15]...clean_ips.append(clean_ip)ax1.barh(clean_ips,[cntfor_,cntinip_top10],color#1f77b4)ax1.set_title(TOP10 访问IP,fontsize14)ax1.set_xlabel(访问次数)else:ax1.set_title(TOP10 访问IP,fontsize14)ax1.text(0.5,0.5,无数据,hacenter,vacenter)# 子图2小时访问趋势ifnothour_counts.empty:ax2.plot(hour_counts.index,hour_counts.values,markero,color#ff7f0e,linewidth2)ax2.set_title(24小时访问趋势,fontsize14)ax2.set_xlabel(小时)ax2.set_ylabel(访问量)ax2.grid(alpha0.3)else:ax2.set_title(24小时访问趋势,fontsize14)ax2.text(0.5,0.5,无数据,hacenter,vacenter)# 子图3HTTP状态码分布ifnotstatus_counts.empty:colors[#2ca02c,#d62728,#9467bd,#8c564b]# 确保标签是字符串且干净labels[str(label)forlabelinstatus_counts.index]ax3.pie(status_counts.values,labelslabels,autopct%1.1f%%,colorscolors[:len(status_counts)])ax3.set_title(HTTP状态码分布,fontsize14)else:ax3.set_title(HTTP状态码分布,fontsize14)ax3.text(0.5,0.5,无数据,hacenter,vacenter)# 子图4请求方法分布ifnotmethod_counts.empty:# 清理请求方法中的特殊字符并过滤掉无效方法clean_methods[]clean_values[]formethod,cntinmethod_counts.items():clean_methodclean_string(method)# 只保留有效的HTTP方法ifclean_methodin[GET,POST,PUT,DELETE,HEAD,OPTIONS]orcnt10:clean_methods.append(clean_method)clean_values.append(cnt)ifclean_methods:ax4.bar(clean_methods,clean_values,color#e377c2)ax4.set_title(请求方法分布,fontsize14)ax4.set_ylabel(次数)else:ax4.set_title(请求方法分布,fontsize14)ax4.text(0.5,0.5,无数据,hacenter,vacenter)else:ax4.set_title(请求方法分布,fontsize14)ax4.text(0.5,0.5,无数据,hacenter,vacenter)plt.tight_layout()plt.savefig(rC:\Users\czliu\Downloads\nginx_analysis.png,dpi300,bbox_inchestight)plt.close()# 关闭图表避免在非交互式环境中出现问题# 5. 打印关键统计print(\n 统计结果 )print(f总访问量{len(df)})print(f独立IP数{df[ip].nunique()})ifip_top10:print(f最活跃IP{ip_top10[0][0]}访问{ip_top10[0][1]}次)else:print(最活跃IP无数据)ifnothour_counts.empty:print(f访问高峰时段{hour_counts.idxmax()}时{hour_counts.max()}次)else:print(访问高峰时段无数据)iflen(df)0:print(f图表已保存至C:/Users/czliu/Downloads/nginx_analysis.png)else:print(图表无数据未生成)
RELATED

相关推荐

智能驾驶(L2)相关法规以及标准

智能驾驶(L2)相关法规以及标准

类型名称说明实施日期法规中国智能网联汽车技术规程(C-ICAP)旨在建立高标准、公平和客观的车辆智能网联性能评价方法,以促进车辆智能网联技术的发展,追求更高的智能化、网联化发展理念。给消费者提供新车上市车辆的智能网联性能信…

📅 2026/8/25 2:11:23
《如何搭建:“数字人宣讲视频 + Flask 展示页”的演示系统》

《如何搭建:“数字人宣讲视频 + Flask 展示页”的演示系统》

本文记录一次“数字人宣讲视频 Flask 展示页”的搭建过程。项目主题是面向青年大学习场景做一个名为“红厅智播”的演示系统:先在魔珐星云控制台配置数字人形象、音色和场景,再整理 SSML 宣讲脚本生成视频,最后用一个简单的 Flask 页面把视频…

📅 2026/9/8 11:20:14
深入解析以太网DMA与描述符机制:从原理到嵌入式网络驱动实践

深入解析以太网DMA与描述符机制:从原理到嵌入式网络驱动实践

1. 项目概述与核心价值在嵌入式网络开发,尤其是涉及微控制器(MCU)的场景里,如何高效、稳定地处理海量的网络数据包,一直是工程师面临的核心挑战。CPU如果被频繁的网络数据搬运中断,整个系统的实时性和处理能…

📅 2026/8/27 3:14:16
MORE NEWS

更多资讯

📰

msn官方下载正式版避坑指南新手必看的3个环境配置真相

msn官方下载正式版避坑指南新手必看的3个环境配置真相 配置环境就卡半天?别急着骂娘,大概率是你没找对路子。很多新手在折腾 msn官方下载正式版 相关的开发工具链或模拟环境时,往往卡在依赖冲突或版本不匹配上,其实这都是 新手避坑…

📰

国税网上打印完税证明新手避坑指南

国税网上打印完税证明新手避坑指南 看了一堆教程还是不会写项目?别急,这不是你笨,是你没摸到门道。很多应届生入职后,面对“国税网上打印完税证明”这种看似简单的业务,却卡在接口对接、数据解析和异常处理上,最后被老员工吐槽“连个证明都搞不定”。今…

📰

Linux脚本实战:5个高频考点速查手册,面试不慌

Linux脚本实战:5个高频考点速查手册,面试不慌 版本升级后 API 全变了?别慌,Linux 脚本看似简单,实则坑多。我整理了一份 速查手册 ,直击面试痛点。 考点梳理:面试官最爱问的 5 个死穴 权限与执行 :为什么…

📰

3步搞定ip地址分类源码解析:运维人必看的实战指南

3步搞定ip地址分类源码解析:运维人必看的实战指南 刚学会写几行Python脚本,面对公司复杂的网络架构却手足无措?这种“学会语法却不知怎么搭项目”的困境,每个转行运维或开发的朋友都经历过。别急,今天不聊虚的,直接拆解 ip地址分类…

📰

MCP Host 集成 MCP 服务器,Base URL 走 TaoToken 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Unity项目开发规范全解析:从目录结构到性能优化的工程实践

1. 项目骨架规则:目录划分、命名约定与资源管理的硬约束1.1 目录怎么分,才不会在三个月后想重构Unity 项目有个特点:任何人拿到一个新工程,第一眼看的不是代码,是 Assets 目录。目录结构如果乱,后面所有事儿…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬