设为首页 收藏本站
查看: 604|回复: 0

[经验分享] apache日志生成器+apache日志分析器

[复制链接]

尚未签到

发表于 2015-8-4 10:59:27 | 显示全部楼层 |阅读模式
  问题描述:
  apache日志记录了很多访问者的信息
  网络上已经有了很多专业的apache日志分析工具
  本文首先给出了一个简易apache日志生成器
  然后用python对该日志做了一些常见的分析
  目的1:是为了熟练python及python里的re模块
  目的2:了解一些apache日志分析
  =======================================================================
  本文的apache日志主要生成如下几个部分:
远程主机地址 - - [时间] "METHOD RESOURCE PROTOCOL" 状态代码 发送给客户端的总字节数
  例如:97.83.32.128 - - [22/Jun/2012:04:47:01 +0800] "GET /abc/acb/abc/?bac=0 HTTP/1.1" 300 1676
  废话不多说,先给出apache日志生成器的代码


DSC0000.gif DSC0001.gif 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[random.randint(0, 2)]
6     resource ='/%s/%s/%s/?%s=%s' % (re_li[random.randint(0, 5)], re_li[random.randint(0, 5)],
7                                     re_li[random.randint(0, 5)], re_li[random.randint(0, 5)], 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[rmonth]
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 = '[5/Nov/2012:12:01:07 +0800]'
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.number  self.number:
70                     f.write('%s %s\n' % (v[0], v[1]))
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[3])
79                 iplist = re.split('\.', line[0])
80                 monthday = timelist[0] + timelist[1] + ']'
81                 ipnum = int(''.join(iplist))
82                 key = hash(monthday)
83                 if key in count:
84                     count[key][1] = count[key][1] + 1
85                     count[key][2].add(ipnum)
86                 else:
87                     ipset=set()
88                     ipset.add(ipnum)
89                     count[key] = [monthday, 1, ipset]
90            
91             for k, v in count.items():
92                 f.write('%s %s %s\n' %(v[0], v[1], float(v[1]) / len(v[2])))
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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94010-1-1.html 上篇帖子: Apache Velocity实现模板化的最简实例 下篇帖子: Apache License, Version 2.0(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表