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  main  '$remote_addr - $remote_user [$time_local] "$request" '

                  '$status $body_bytes_sent "$http_referer" '

                  '"$http_user_agent" "$http_x_forwarded_for"';

想要记录更详细的信息需要自定义设置log_format,具体可设置的参数格式及说明如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

参数                      说明                 示例

$remote_addr             客户端地址                   211.28.65.253

$remote_user             客户端用户名称                 --

$time_local              访问时间和时区              18/Jul/2012:17:00:01 +0800

$request                 请求的URI和HTTP协议         "GET /article-10000.html HTTP/1.1"

$http_host               请求地址,即浏览器中你输入的地址(IP或域名)  www.wang.com 192.168.100.100

$status                  HTTP请求状态              200

$upstream_status         upstream状态                   200

$body_bytes_sent         发送给客户端文件内容大小            1547

$http_referer            url跳转来源                  https://www.baidu.com/

$http_user_agent         用户终端浏览器等信息         "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;

$ssl_protocol            SSL协议版本              TLSv1

$ssl_cipher              交换数据中的算法           RC4-SHA

$upstream_addr           后台upstream的地址,即真正提供服务的主机地址  10.10.10.100:80

$request_time            整个请求的总时间                0.205

$upstream_response_time  请求过程中,upstream响应时间             0.002

需求:统计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统计相关推荐

  1. 通过Python实现对xls表格按类别统计计数

    "学以致用 makes me happy!" import xlrd,xlwt from xlutils.copy import copyzhui=input("\n请输 ...

  2. 通过Nginx,Tomcat访问日志(access log)记录请求耗时

    一.Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 nginx.conf使用配置方式: log_format main '$remo ...

  3. Nginx的access.log日志分析工具-goaccess

    一.安装goaccess wget http://tar.goaccess.io/goaccess-1.3.tar.gz  --no-check-certificate #下载tar包 tar -xz ...

  4. java利用友盟 计算pv uv_通过nginx日志利用shell统计日pv和uv

    通过nginx日志利用shell统计日pv和uv 网上记录nginx日志统计访问量的脚本的文档很多,但是看来看去实际都是一个东西,如下: 1.根据访问IP统计UV awk '{print $1}'  ...

  5. 记录解决nginx的access.log持续变大问题

    最近在运维工作中发现了一个关于nginx的access.log日志文件飞速扩大的问题,如下: 首先是切换目录到nginx的logs文件夹下,然后使用命令: du -h --max-depth=1 就可 ...

  6. nginx的access.log文件详解

    日志文件能够帮助我们快速的定位问题,并且知道用户访问的状态,浏览器,Ip,接口地址等. 一.nginx的access.log (1)日志文件一般存放在 /var/log/nginx 下,直接使用 ta ...

  7. nginx的access.log文件详解,main的具体意思

    事实证明,日志文件真的是很重要很重要的.能够帮助我们快速的定位问题,并且知道用户访问的状态,浏览器,Ip,接口地址等,简直可怕.. 一.nginx的access.log (1)对博主而言,日志文件存放 ...

  8. 使用Python实现对excel数据的处理

    前言 **使用Python实现对excel数据的处理, 预先知识简单介绍 xlrd中 # File_Path是Excel路径,打开Excel工作蒲 workbook = xlrd.open_workb ...

  9. python实现对doc、txt、xls等文档的读写操作

    目录 1.python实现对doc文档的读取 2.python实现对txt文档的读取 3.python实现对xls表格的读取 1.python实现对doc文档的读取 #读取docx中的文本代码示例 i ...

最新文章

  1. Windows下FFmpeg高速入门
  2. 【Android】入门级连接网络示例: 网页浏览和播放网络MP3
  3. 如何应对货期延迟(转自索菲外贸笔记)
  4. MySQL数据库:锁机制
  5. Vue cli3.0创建Vue项目
  6. blog项目中遇到的问题及解决
  7. Day47 Django基础部分、路由配置、空间名称
  8. SQL性能第1篇:关系优化
  9. python装饰器快速入门
  10. 联机交易场景持续拓展,巨杉数据库中标吉林省农信
  11. rog主板php,华硕主板有哪些系列 华硕主板各系列区别对比
  12. Essential Netty in Action 《Netty 实战(精髓)》
  13. XJOI1131换零钱
  14. 使用ps 批处理图片(gif 转 png)
  15. linux删除大量过期文件,linux删除大量文件的6种方法
  16. WEB前端面试选择题解答
  17. 百面机器学习 之 逻辑回归
  18. SAS_9.3_64位_安装方法(验证可用)
  19. 使用Java对PDF进行电子签章
  20. 股票软件破解常用破解工具介绍

热门文章

  1. IEnumerable 和 IEnumerator
  2. 网络广告假流量盛行,查处有妙招
  3. ASP.NET MVC:mvc pattern
  4. 数据分析能不能替代Data Mining?
  5. Matlab之三维曲面的绘制
  6. 《How to Write and Publish a Scientifc Paper》个人笔记
  7. MQ详解及四大MQ比较
  8. vue 项目安装 (入门)
  9. 阿里巴巴卖空阿里巴巴入股新浪微博抑制投资者卖空行为
  10. 简记Inception系列