说明: 我们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)