Python实现对nginx日志access.log统计

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式;另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,可以参加ngx_http_log_module。一般在nginx的配置文件中日记配置

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,具体可设置的参数格式及说明如下:

image.png


需求:统计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] + 1
            else:
                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=utf8
log_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 = 0
for line in contexts:
    # count row size of flow
    size = line.split()[9]
    # print ip
    ip_attr = line.split()[0]
    # count total size of flow
    sum = int(size) + sum
    if ip_attr in ip.keys():   # if ip repeated,如果ip重复就将ip数量加一,而流量继续叠加
    # count of ip plus 1
        ip[ip_attr] = ip[ip_attr] + 1
    # size of flow plus size
        flow[ip_attr] = flow[ip_attr] + int(size)
    else:
    # if ip not repeated
    # define initial values of count of ip and size of flow
        ip[ip_attr] = 1
        flow[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
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
19天前
|
API 开发工具 Python
|
4天前
|
存储 监控 算法
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
19 3
|
5月前
|
存储 运维 监控
API明细日志及运维统计日志全面提升API可运维性
在数字化转型的大潮中,数据已成为企业最宝贵的资产之一。而数据服务API可快速为数据应用提供数据接口。面对越来越多的API以及越来越多的应用调用,如何快速查看API的服务情况、异常情况及影响范围,以及查看API的调用详情,进行API的性能优化、错误排查变得越来越重要,本文将介绍如何配置和开通API运维统计及明细日志,以及如何查看日志进行介绍。
244 0
|
4月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
321 3
|
5月前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
6月前
|
数据可视化 数据挖掘 Python
Seaborn 库创建吸引人的统计图表
【10月更文挑战第11天】本文介绍了如何使用 Seaborn 库创建多种统计图表,包括散点图、箱线图、直方图、线性回归图、热力图等。通过具体示例和代码,展示了 Seaborn 在数据可视化中的强大功能和灵活性,帮助读者更好地理解和应用这一工具。
80 3
|
6月前
|
Python
python读写操作excel日志
主要是读写操作,创建表格
88 2
|
6月前
|
Python Windows
python知识点100篇系列(24)- 简单强大的日志记录器loguru
【10月更文挑战第11天】Loguru 是一个功能强大的日志记录库,支持日志滚动、压缩、定时删除、高亮和告警等功能。安装简单,使用方便,可通过 `pip install loguru` 快速安装。支持将日志输出到终端或文件,并提供丰富的配置选项,如按时间或大小滚动日志、压缩日志文件等。还支持与邮件通知模块结合,实现邮件告警功能。
101 0
python知识点100篇系列(24)- 简单强大的日志记录器loguru
|
6月前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
89 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
6月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?