apache日志生成器+apache日志分析器
问题描述:apache日志记录了很多访问者的信息
网络上已经有了很多专业的apache日志分析工具
本文首先给出了一个简易apache日志生成器
然后用python对该日志做了一些常见的分析
目的1:是为了熟练python及python里的re模块
目的2:了解一些apache日志分析
=======================================================================
本文的apache日志主要生成如下几个部分:
远程主机地址 - - [时间] "METHOD RESOURCE PROTOCOL" 状态代码 发送给客户端的总字节数
例如:97.83.32.128 - - "GET /abc/acb/abc/?bac=0 HTTP/1.1" 300 1676
废话不多说,先给出apache日志生成器的代码
apache日志生成器
1 import random
2 def generate_mrp():
3 method_list = ['GET', 'POST', 'HEAD']
4 re_li = ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
5 method = method_list
6 resource ='/%s/%s/%s/?%s=%s' % (re_li, re_li,
7 re_li, re_li, random.randint(0, 3))
8 return '\"%s %s HTTP/1.1\"' % (method,resource)
9
10 def generate_ip():
11 global global_ip
12 if random.random() > 0.2:
13 temp = []
14 for i in range(4):
15 id = random.randint(1, 128)
16 temp.append(str(id))
17 global_ip = '.'.join(temp)
18 return global_ip
19
20 def generate_time():
21 global global_time
22 if random.random() < 0.2:
23 return global_time
24 month_list = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
25 day = random.randint(1, 31)
26 rmonth = random.randint(4, 5)
27 month = month_list
28 year = 2012
29 hour = random.randint(0, 23)
30 if hour < 10:
31 hour = '0' + str(hour)
32 minute = random.randint(0, 59)
33 second = random.randint(0, 59)
34 if minute < 10:
35 minute = '0' + str(minute)
36 if second < 10:
37 second = '0' + str(second)
38 global_time = '[%s/%s/%s:%s:%s:%s +0800]' % (day, month, year, hour, minute, second)
39 return global_time
40
41 #start here
42 global_ip = '127.0.0.1'
43 global_time = ''
44
45 print 'please enter the number of log to generate'
46 while True:
47 try:
48 number = input()
49 except NameError:
50 print'please enter an number'
51 continue
52 if number = low and self.numberself.number:
70 f.write('%s %s\n' % (v, v))
71 f.close()
72 return True
73
74 if self.number == 2:
75 f = open('pv.txt', 'w')
76 count = {}
77 for line in self.linedata:
78 timelist = re.split('/', line)
79 iplist = re.split('\.', line)
80 monthday = timelist + timelist + ']'
81 ipnum = int(''.join(iplist))
82 key = hash(monthday)
83 if key in count:
84 count = count + 1
85 count.add(ipnum)
86 else:
87 ipset=set()
88 ipset.add(ipnum)
89 count =
90
91 for k, v in count.items():
92 f.write('%s %s %s\n' %(v, v, float(v) / len(v)))
93 f.close()
94
95 if __name__ == '__main__':
96 apache = Apache()
97 apache.analysis()
最后很多分析工作可以结合shell命令来做比如:
问题1:在apachelog中找出访问次数最多的10个IP。
awk '{print $1}' apache.log |sort |uniq -c|sort -nr|head
问题2:在apache日志中找出访问次数最多的几个分钟。
awk '{print $4}' apache.log |awk -F"/" '{print $3}'|cut -c 6-10|sort|uniq -c|sort -nr|head
问题3:在apache日志中找到访问最多的页面:
awk '{print $7}' apache.log|sort|uniq -c|sort -nr|head
问题4:分析日志查看当天的ip连接数
grep '22/Jun/2012' apache.log| awk '{print $1}' |wc -l
问题5:查看指定的ip在当天究竟访问了什么urlgrep '^97.83.32.128.*22/Jun/2012' apache.log| awk '{print $7}'
用apache日志生成器生成日志后 就可以直接使用上面的命令了
分析apache日志还是很有用的,可惜我的数据是随机生成的,很多规律都无法模拟。
如果要较真实的模拟的话,还得改下代码。
页:
[1]