Python实现对nginx日志access.log统计
Nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式;另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,可以参加ngx_http_log_module。一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。
nginx日志格式如下:
42.57.99.126 - - [02/Oct/2018:20:40:22 +0800] "GET /favicon.ico HTTP/1.1" 404 564 "-" "Mozilla/5.0 (Linux; U; Android 8.0.0; zh-cn; MI 6 Build/OPR1.170623.027) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.8 Mobile Safari/537.36"
一般来说:nginx的log_format有很多可选的参数用于指示服务器的活动状态,默认的是:
|
想要记录更详细的信息需要自定义设置log_format,具体可设置的参数格式及说明如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
需求:统计nginx日志access.log里访问量最大的10个IP
1.awk实现
awk '{a[$1]++}END{for(i in a)print i ":" a[i]}' |sort -nr |head -n 10
2.python脚本
# !/usr/bin/python
# coding=utf8
log_file = "data/access.log"
ip = {}with open(log_file) as f:for i in f.readlines():# print(i.strip().split()[0])ip_attr = i.strip().split()[0]if ip_attr in ip.keys(): # 如果ip存在于字典中,则将该ip的value也就是个数进行增加ip[ip_attr] = ip[ip_attr] + 1else:ip[ip_attr] = 1
s=sorted(ip.items(),key=lambda x:x[1],reverse=True)
print(s)# for value in sorted(ip.values()):
# for key in ip.keys():
# if ip[key]==value:
# print(key,ip[key])
print(ip)
3.流量统计
#!/usr/bin/python
#coding=utf8log_file = "/usr/local/nginx/logs/access.log"with open(log_file) as f:contexts = f.readlines()# define ip dict###
ip = {} # key为ip信息,value为ip数量(若重复则只增加数量)
flow = {} # key为ip信息,value为流量总和
sum = 0for line in contexts:# count row size of flowsize = line.split()[9]# print ipip_attr = line.split()[0]# count total size of flowsum = int(size) + sumif ip_attr in ip.keys(): # if ip repeated,如果ip重复就将ip数量加一,而流量继续叠加# count of ip plus 1ip[ip_attr] = ip[ip_attr] + 1# size of flow plus sizeflow[ip_attr] = flow[ip_attr] + int(size)else:# if ip not repeated# define initial values of count of ip and size of flowip[ip_attr] = 1flow[ip_attr] = int(size)print(ip)
print(flow)
print(sum/1024/1024)
统计日志ip访问数
cat access . log | awk '{ips[$1]+=1} END{for(ip in ips) print ip,ips[ip]}'
查看3点-6点之间的Ip访问个数
grep "2021:0[3-6]" img.log | awk '{ips[$1]+=1} END{for(ip inips) print ips[ip],ip}' | sort-nr
/查看3点-6点之间的ip访问数,并且访问数>=200的ip.
grep '2021:0[3-6]' banma_access.log | awk '{ips[$1]+=1}END{for(ip in ips) if(ips[ip]>=200) printips[ip],ip}' | sort -nr
Python实现对nginx日志access.log统计相关推荐
- 通过Python实现对xls表格按类别统计计数
"学以致用 makes me happy!" import xlrd,xlwt from xlutils.copy import copyzhui=input("\n请输 ...
- 通过Nginx,Tomcat访问日志(access log)记录请求耗时
一.Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 nginx.conf使用配置方式: log_format main '$remo ...
- Nginx的access.log日志分析工具-goaccess
一.安装goaccess wget http://tar.goaccess.io/goaccess-1.3.tar.gz --no-check-certificate #下载tar包 tar -xz ...
- java利用友盟 计算pv uv_通过nginx日志利用shell统计日pv和uv
通过nginx日志利用shell统计日pv和uv 网上记录nginx日志统计访问量的脚本的文档很多,但是看来看去实际都是一个东西,如下: 1.根据访问IP统计UV awk '{print $1}' ...
- 记录解决nginx的access.log持续变大问题
最近在运维工作中发现了一个关于nginx的access.log日志文件飞速扩大的问题,如下: 首先是切换目录到nginx的logs文件夹下,然后使用命令: du -h --max-depth=1 就可 ...
- nginx的access.log文件详解
日志文件能够帮助我们快速的定位问题,并且知道用户访问的状态,浏览器,Ip,接口地址等. 一.nginx的access.log (1)日志文件一般存放在 /var/log/nginx 下,直接使用 ta ...
- nginx的access.log文件详解,main的具体意思
事实证明,日志文件真的是很重要很重要的.能够帮助我们快速的定位问题,并且知道用户访问的状态,浏览器,Ip,接口地址等,简直可怕.. 一.nginx的access.log (1)对博主而言,日志文件存放 ...
- 使用Python实现对excel数据的处理
前言 **使用Python实现对excel数据的处理, 预先知识简单介绍 xlrd中 # File_Path是Excel路径,打开Excel工作蒲 workbook = xlrd.open_workb ...
- python实现对doc、txt、xls等文档的读写操作
目录 1.python实现对doc文档的读取 2.python实现对txt文档的读取 3.python实现对xls表格的读取 1.python实现对doc文档的读取 #读取docx中的文本代码示例 i ...
最新文章
- Windows下FFmpeg高速入门
- 【Android】入门级连接网络示例: 网页浏览和播放网络MP3
- 如何应对货期延迟(转自索菲外贸笔记)
- MySQL数据库:锁机制
- Vue cli3.0创建Vue项目
- blog项目中遇到的问题及解决
- Day47 Django基础部分、路由配置、空间名称
- SQL性能第1篇:关系优化
- python装饰器快速入门
- 联机交易场景持续拓展,巨杉数据库中标吉林省农信
- rog主板php,华硕主板有哪些系列 华硕主板各系列区别对比
- Essential Netty in Action 《Netty 实战(精髓)》
- XJOI1131换零钱
- 使用ps 批处理图片(gif 转 png)
- linux删除大量过期文件,linux删除大量文件的6种方法
- WEB前端面试选择题解答
- 百面机器学习 之 逻辑回归
- SAS_9.3_64位_安装方法(验证可用)
- 使用Java对PDF进行电子签章
- 股票软件破解常用破解工具介绍