Python正则表达式,统计分析nginx访问日志
目标:
1.正则表达式
2.oop编程,统计nginx访问日志中不同IP地址出现的次数并排序
1.正则表达式
#!/usr/bin/env python
# -*- coding: utf-8 -*- import re # match
# 方法一
pattern1 = re.compile(r'hello', re.I) match = pattern1.match('Hello World') if match:
print match.group() # 方法二 m = re.match(r'hello', 'hello world.') print m.group() # search
pattern1 = re.compile(r'World') match = pattern1.search('Hello, hello World.') if match:
print match.group() # split
pattern1 = re.compile(r'\d+')
match = pattern1.split('one1two2three3')
print match
for i in match:
print i # findall
match = pattern1.findall('one1two2three3')
print match # finditer
match = pattern1.finditer('one1two2three3')
for i in match:
print i.group()
•运行代码,测试效果
2.oop编程,统计nginx访问日志中不同IP地址出现的次数并排序
#!/usr/bin/env python
# -*- coding: utf-8 -*- import re class CountPatt(object):
def __init__(self, patt):
self.patt = re.compile(patt)
self.result = {}
def count_patt(self, fname):
with open(fname) as fobj:
for line in fobj:
match = self.patt.search(line)
if match:
key = match.group()
self.result[key] = self.result.get(key, 0) + 1 return self.result def sort(self):
result = []
alist = self.result.items()
for i in xrange(len(alist)):
greater = alist[0]
for item in alist[1:]:
if greater[1] < item[1]:
greater = item
result.append(greater)
alist.remove(greater)
return result if __name__ == "__main__":
httpd_log = '/tmp/access.log'
ip_pattern = r'^(\d+\.){3}\d+'
browser_pattern = r'Chrome|Safari|Firefox'
a = CountPatt(ip_pattern)
print a.count_patt(httpd_log)
print a.sort()
•运行代码,测试效果
handetiandeMacBook-Pro:test xkops$ python test2.py
{'192.168.207.21': 25, '192.168.80.165': 20, '192.168.207.1': 46, '127.0.0.1': 10}
[('192.168.207.1', 46), ('192.168.207.21', 25), ('192.168.80.165', 20), ('127.0.0.1', 10)]
Python正则表达式,统计分析nginx访问日志的更多相关文章
- 使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页
使用python找出nginx访问日志中访问次数最多的10个ip排序生成网页 方法1:linux下使用awk命令 # cat access1.log | awk '{print $1" &q ...
- python脚本分析nginx访问日志
日志格式如下: 223.74.135.248 [11/May/2017:11:19:47 +0800] "POST /login/getValidateCode HTTP/1.1" ...
- 采集并分析Nginx访问日志
日志服务支持通过数据接入向导配置采集Nginx日志,并自动创建索引和Nginx日志仪表盘,帮助您快速采集并分析Nginx日志. 许多个人站长选取了Nginx作为服务器搭建网站,在对网站访问情况进行分析 ...
- python统计apache、nginx访问日志IP访问次数并且排序(显示前20条)【转】
前言:python统计apache.nginx访问日志IP访问次数并且排序(显示前20条).其实用awk+sort等命令可以实现,用awk数组也可以实现,这里只是用python尝试下. apach ...
- 按日期切割nginx访问日志--及性能优化
先谈下我们需求,一个比较大的nginx访问日志,根据访问日期切割日志,保存在/tmp目录下. 测试机器为腾讯云机子,单核1G内存.测试日志大小80M. 不使用多线程版: #!/usr/bin/env ...
- 一、基于hadoop的nginx访问日志分析---解析日志篇
前一阵子,搭建了ELK日志分析平台,用着挺爽的,再也不用给开发拉各种日志,节省了很多时间. 这篇博文是介绍用python代码实现日志分析的,用MRJob实现hadoop上的mapreduce,可以直接 ...
- nginx访问日志分析,筛选时间大于1秒的请求
处理nginx访问日志,筛选时间大于1秒的请求 #!/usr/bin/env python ''' 处理访问日志,筛选时间大于1秒的请求 ''' with open('test.log','a+' ...
- Nginx 访问日志轮询切割
Nginx 访问日志轮询切割脚本 #!/bin/sh Dateformat=`date +%Y%m%d` Basedir="/application/nginx" Nginxlog ...
- logstash收集nginx访问日志
logstash收集nginx访问日志 安装nginx #直接yum安装: [root@elk-node1 ~]# yum install nginx -y 官方文档:http://nginx.org ...
随机推荐
- C: Run a System Command and Get Output? 在C程序中调用工具,并且得到结果。
现在在做一个WIFI API相关的库,这样就可以让其他的人管理WIFI. 在调用API的时候要回复SHELL打印的信息,比如说搜索热点,而且不在SHELL中打印出来.然后把信息返回给调用API的程序. ...
- String.valueOf(int i)和Integer.toString(int i)有什么区别?
以下是2个人的回答,我是从百度上复制下来的,做个笔记,以后方便看 String.valueOf()它可以将JAVA基本类型(int,double,boolean等)和对象(Object)转换成Stri ...
- OpenGL—Android 开机动画源码分析二
引自http://blog.csdn.net/luoshengyang/article/details/7691321/ BootAnimation类的成员函数的实现比较长,我们分段来阅读: 第三个开 ...
- C++builder编译别人工程报错
编译时遇到错误,信息如下: [C++ Error] NVRAMEditor.h(83): E2209 Unable to open include file 'CONTROLSLib_OCX.h'[C ...
- Node.js学习 - Global Object
全局对象:特殊的对象,它及其所有属性都可以在程序的任何地方访问. __filename 表示当前正在执行的脚本的文件名.它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同. 如果在 ...
- Linux学习 -- 日志管理
日志服务 rsyslogd CentOS6 取代了原来的syslog rsyslogd 默认启动.自启动 常用命令:lastb.lastlog.last.w.who.users. 系统默认日志 和 ...
- DHCP详细工作过程(转)
DHCP客户端通过和DHCP服务器的交互通讯以获得IP地址租约.为了从DHCP服务器获得一个IP地址,在标准情况下DHCP客户端和DHCP服务器之间会进行四次通讯.DHCP协议通讯使用端口UDP 67 ...
- 第13章 Swing程序组件----常用布局管理器
在Swing中,每个组件在容器中都有一个具体的位置和大小,而在容器中摆放各种组件时很难判断其具体位置和大小.布局管理器提供了Swing组件安排.展示在容器中的方法及基本的布局功能. Swing提供的常 ...
- System.Text.RegularExpressions.Regex
System.Text.RegularExpressions.Regex.IsMatch(string) 是否在指定字符串中找到制定项 System.Text.RegularExpressions.R ...
- 关于MySQL中时间格式和取零点的问题
select * from order where create_time>'2016-05-21 00:00:00'; 不包含2016-05-21 00:00:00时的订单 select * ...