python3 统计NGINX pv uv 最多IP访问

说明: 我们NGINX的日志格式是, 第一列为IP  第七列为访问的地址, 可以把NGINX改成json格式的日志输出,那样更好,还可以在elk上利用IP地址做个访问地显示.

#!/usr/bin/python3

from collections import Counterimport datetime


now_time = datetime.datetime.now()
now_time_1 = now_time.strftime('%Y%m%d')   # 用来匹配切割日志后,文件后缀的时间
nginx_PV = []
nginx_Html = []
file = '/root/access.log'


def read_File(file):
    with open(file, 'r') as f:
        for line in f.readlines():
            set_PV(line)   # 获取PV
            set_Html(line)


def set_PV(line):
    ip = line.split( )[0]
    nginx_PV.append(ip)


def set_Html(line):
    Html = line.split( )[6]
    nginx_Html.append(Html)

    

def set_max_IP(nginx_PV):
    lis = Counter(nginx_PV)
    liss = lis.most_common(10)
    print("出现最多的IP:")
    print('{ip:<20} {nums}'.format(ip='IP',nums='次数'))
    for li in liss:
        print('{ip:<20} {nums}'.format(ip=li[0],nums=li[1]))


def set_max_html(nginx_Html):
    lis = Counter(nginx_Html)
    liss = lis.most_common(10)
    print("被访问最多的网页:")
    print('{str:<38} {nums}'.format(str='文件',nums='次数'))
    for li in liss:
        print('{html:<40} {nums}'.format(html=li[0],nums=li[1]))



read_File(file)
print("今日PV: ", len(nginx_PV))
print("今日UV: ", len(set(nginx_PV)))
set_max_IP(nginx_PV)
set_max_html(nginx_Html)
原文地址:https://www.cnblogs.com/liuYGoo/p/12492690.html