第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > python分析apache访问日志脚本分享

python分析apache访问日志脚本分享

时间:2021-09-12 11:18:07

相关推荐

python分析apache访问日志脚本分享

后端开发|Python教程

python,分析apache访问日志

后端开发-Python教程

知识管理 源码,vscode中括号颜色,ubuntu查询进程,tomcat获取值,sqlite3 索引代码,动态分页插件,前端框架是如何实现h5,爬虫软件能汉化吗,yum php 目录在哪,云南seo站内优化,展示型网站 带后台,单页面 网页,网页作业模板lzw

#!/usr/bin/env python# coding=utf-8 #------------------------------------------------------# Name:Apache 日志分析脚本# Purpose: 此脚本只用来分析Apache的访问日志# Version: 2.0# Author: LEO# Created: -4-26# Modified: -5-4# Copyright: (c) LEO #------------------------------------------------------ import sysimport time #该类是用来打印格式class displayFormat(object): def format_size(self,size): \格式化流量单位\ KB = 1024 MB = 1048576 GB = 1073741824TB = 1099511627776 if size >= TB :size = str(size / TB) + T elif size = GB and size = MB and size < GB :size = str(size / MB) + M else :size = str(size / KB) + K return size formatstring = \%-15s %-10s %-12s %8s %10s %10s %10s %10s %10s %10s %10s def transverse_line(self) : \输出横线\ print self.formatstring % (-*15,-*10,-*12,-*12,-*10,-*10,-*10,-*10,-*10,-*10,-*10) def head(self): \输出头部信息\ print self.formatstring % (IP,Traffic,Times,Times%,200,404,500,403,302,304,503) def error_print(self) : \输出错误信息\ print print Usage : + sys.argv[0] + ApacheLogFilePath [Number] print sys.exit(1) def execut_time(self): \输出脚本执行的时间\ print print "Script Execution Time: %.3f second" % time.clock() print #该类是用来生成主机信息的字典class hostInfo(object):host_info = [200,404,500,302,304,503,403, imes,size] def __init__(self,host): self.host = host = {}.fromkeys(self.host_info,0) def increment(self,status_times_size,is_size): \该方法是用来给host_info中的各个值加1\ if status_times_size == imes:self.host[ imes] += 1 elif is_size:self.host[size] = self.host[size] + status_times_size else:self.host[status_times_size] += 1 def get_value(self,value): \该方法是取到各个主机信息中对应的值\ return self.host[value] #该类是用来分析文件class fileAnalysis(object): def __init__(self): \初始化一个空字典\ self.report_dict = {} self.total_request_times,self.total_traffic,self.total_200,self.total_404,self.total_500,self.total_403,self.total_302,self.total_304,self.total_503 = 0,0,0,0,0,0,0,0,0 def split_eachline_todict(self,line): \分割文件中的每一行,并返回一个字典\ split_line = line.split() split_dict = { emote_host:split_line[0],status:split_line[-2],ytes_sent:split_line[-1],} return split_dict def generate_log_report(self,logfile): \读取文件,分析split_eachline_todict方法生成的字典\ for line in logfile:try: line_dict = self.split_eachline_todict(line) host = line_dict[ emote_host] status = line_dict[status]except ValueError : continueexcept IndexError : continue if host not in self.report_dict : host_info_obj = hostInfo(host) self.report_dict[host] = host_info_objelse : host_info_obj = self.report_dict[host] host_info_obj.increment( imes,False) if status in host_info_obj.host_info : host_info_obj.increment(status,False) try: bytes_sent = int(line_dict[ytes_sent]) except ValueError: bytes_sent = 0host_info_obj.increment(bytes_sent,True) return self.report_dict def return_sorted_list(self,true_dict): \计算各个状态次数、流量总量,请求的总次数,并且计算各个状态的总量 并生成一个正真的字典,方便排序\ for host_key in true_dict :host_value = true_dict[host_key]times = host_value.get_value( imes) self.total_request_times = self.total_request_times + times size = host_value.get_value(size) self.total_traffic = self.total_traffic + size o200 = host_value.get_value(200)o404 = host_value.get_value(404)o500 = host_value.get_value(500)o403 = host_value.get_value(403)o302 = host_value.get_value(302)o304 = host_value.get_value(304)o503 = host_value.get_value(503) true_dict[host_key] = {200:o200,404:o404,500:o500,403:o403,302:o302,304:o304, 503:o503, imes:times,size:size} self.total_200 = self.total_200 + o200self.total_404 = self.total_404 + o404self.total_500 = self.total_500 + o500self.total_302 = self.total_302 + o302self.total_304 = self.total_304 + o304self.total_503 = self.total_503 + o503sorted_list = sorted(true_dict.items(),key=lambda t:(t[1][ imes],t[1][size]),reverse=True) return sorted_list class Main(object): def main(self) : \主调函数\ display_format = displayFormat() arg_length = len(sys.argv) if arg_length == 1 :display_format.error_print() elif arg_length == 2 or arg_length == 3:infile_name = sys.argv[1]try : infile = open(infile_name, ) if arg_length == 3 :lines = int(sys.argv[2]) else :lines = 0except IOError,e : print print e display_format.error_print()except ValueError : print print "Please Enter A Volid Number !!" display_format.error_print() else :display_format.error_print()fileAnalysis_obj = fileAnalysis() not_true_dict = fileAnalysis_obj.generate_log_report(infile) log_report = fileAnalysis_obj.return_sorted_list(not_true_dict) total_ip = len(log_report) if lines :log_report = log_report[0:lines] infile.close()print total_traffic = display_format.format_size(fileAnalysis_obj.total_traffic) total_request_times = fileAnalysis_obj.total_request_times print Total IP: %s Total Traffic: %s Total Request Times: %d % (total_ip,total_traffic,total_request_times) print display_format.head() display_format.transverse_line()for host in log_report :times = host[1][ imes]times_percent = (float(times) / float(fileAnalysis_obj.total_request_times)) * 100print display_format.formatstring % (host[0], display_format.format_size(host[1][size]), times,str(times_percent)[0:5], host[1][200],host[1][404], host[1][500],host[1][403], host[1][302],host[1][304],host[1][503]) if (not lines) or total_ip == lines :display_format.transverse_line()print display_format.formatstring % (total_ip,total_traffic,total_request_times,100%, fileAnalysis_obj.total_200, fileAnalysis_obj.total_404, fileAnalysis_obj.total_500,fileAnalysis_obj.total_403, fileAnalysis_obj.total_302,fileAnalysis_obj.total_304, fileAnalysis_obj.total_503) display_format.execut_time() if __name__ == \__main__: main_obj = Main() main_obj.main()

自动充值网站源码,vscode插件的作用,ubuntu 撤回解压,tomcat与mysql,sqlite+更新多个参数,小程序爬虫token自动更新,php 判断范围,杭州seo招聘信息,上下滚屏网站模板,网页拼图功能jquery,简洁大气的后台模板lzw

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。