使用 Map-Reduce 统计Web 服务器 access.log 日志文件

1.6. Map-Reduce

1.6.1. 使用 Map-Reduce 统计Web 服务器 access.log 日志文件

 

 

首先将web服务器access.log倒入到mongodb,参考 http://netkiller.github.io/article/log.html。 格式如下:

{
	"_id" : ObjectId("51553efcd8616be7e5395c0d"),
	"remote_addr" : "192.168.2.76",
	"remote_user" : "-",
	"time_local" : "29/Mar/2013:09:20:31 +0800",
	"request" : "GET /tw/ad.jpg HTTP/1.1",
	"status" : "200",
	"body_bytes_sent" : "5557",
	"http_referer" : "http://www.example.com/tw/",
	"http_user_agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17",
	"http_x_forwarded_for" : "-"
}
		

创建map方法

var mapFunction1 = function() {
    emit(this.remote_addr, {count:1});
};
		

创建reduce方法

var reduceFunction1 = function(key, values) {
	var total = 0;
	values.forEach(function (value) {total += value.count;});
    return {ipaddr: key, count:total};
};

分析数据

db.access.mapReduce(mapFunction1, reduceFunction1, {out : "resultCollection"});
		

输出结果

db.resultCollection.find();
		

Demo 数据库

> db.resultCollection.find();
{ "_id" : "192.168.2.109", "value" : { "count" : 554 } }
{ "_id" : "192.168.2.38", "value" : { "count" : 26 } }
{ "_id" : "192.168.2.39", "value" : { "count" : 72 } }
{ "_id" : "192.168.2.40", "value" : { "count" : 3564 } }
{ "_id" : "192.168.2.49", "value" : { "count" : 955 } }
{ "_id" : "192.168.2.5", "value" : { "count" : 2 } }
{ "_id" : "192.168.2.76", "value" : { "count" : 60537 } }
{ "_id" : "192.168.3.12", "value" : { "count" : 9577 } }
{ "_id" : "192.168.3.14", "value" : { "count" : 343 } }
{ "_id" : "192.168.3.18", "value" : { "count" : 1006 } }
{ "_id" : "192.168.3.26", "value" : { "count" : 2714 } }
{ "_id" : "192.168.6.19", "value" : { "count" : 668 } }
{ "_id" : "192.168.6.2", "value" : { "count" : 123760 } }
{ "_id" : "192.168.6.30", "value" : { "count" : 1196 } }
{ "_id" : "192.168.6.35", "value" : { "count" : 1050 } }
时间: 2024-09-19 21:33:05

使用 Map-Reduce 统计Web 服务器 access.log 日志文件的相关文章

io-java执行linux命令从linux服务器上读取log日志文件,按行读从指定字符串开始读

问题描述 java执行linux命令从linux服务器上读取log日志文件,按行读从指定字符串开始读 [INFO ] 2015-09-23 11:22:06,691 [threadPoolTaskExecutor-41] com.sto.pdaplatform.module.rediscommon.core.ParseObjectFactory.getParseObjFactory(ParseObjectFactory.java:27) >>> the original data is

Linux系统的LOG日志文件及入侵后日志的清除

UNIX网管员主要是靠系统的LOG,来获得入侵的痕迹.当然也有第三方工具记录入侵系统的 痕迹,UNIX系统存放LOG文件,普通位置如下: /usr/adm - 早期版本的UNIX/var/adm - 新一点的版本使用这个位置/var/log - 一些版本的Solaris,linux BSD,Free BSD使用这个位置/etc - 多数UNIX版本把utmp放在这里,有些也把wtmp放在这里,syslog.conf在这里 下面的一些文件根据你所在的目录不同而不同:acct 或 pacct -- 

Win7系统如何批量删除C盘log日志文件?

  Win7系统批量删除C盘log日志文件的方法: 1.打开计算机,进入到C盘(系统盘); 2.在文件夹右上方搜索框中输入 *.log ,这时系统就会开机搜索C盘下所有的Log 日志文件; 3.等到搜索完毕后,按下CTRL + A 快捷键,全选Log文件,使用del来删除文件; 4.再清空一下回收站,就可以将C盘中的所有log日志文件删除干净了. 备注: 在搜索中 "*"星号 代表任意文件名,.log 表示以log为后缀的文件. 由于C盘log日志文件太多一个一个删除是不可能的,用户需

Win7批量删除C盘log日志文件的方法

  操作方法: 一.打开计算机,进入到C盘(系统盘); 二.然后在文件夹右上方搜索框中输入 *.log ,这时系统就会开机搜索C盘下所有的Log 日志文件,如下图; 三.等到搜索完毕后,我们按下CTRL + A 快捷键,全选Log文件,使用del来删除文件; 四.最后,我们再清空一下回收站,就可以将C盘中的所有log日志文件删除干净了; PS: 在搜索中 "*"星号 代表任意文件名,.log 表示以log为后缀的文件. 由于C盘log日志文件太多一个一个删除是不可能的,用户需要把所遇l

win7系统中的Log日志文件怎么删除

  1.首先,咱们需要返回到win7旗舰版系统的桌面位置,之后,咱们双击打开桌面的计算机,然后在打开的win7旗舰版电脑的资源管理器窗口中,咱们双击进入C盘中. 2.在打开的C盘中,咱们找到右上方的搜索框,然后输入*.log ,这时系统就会开机搜索C盘下所有的Log 日志文件了.   3.等到搜索完毕后,咱们win7旗舰版电脑中所有的相关文件就会全部显示出来,咱们按下CTRL + A 快捷键,全选Log文件,使用del来删除文件即可.

tomcat 和 jboss access log 日志输出详解

工作中nginx+jboss/tomcat反向代理集成,想打开后端jboss的access log, 配置在:/home/admin/wdetail/conf/tomcat-server.xml 开启日志将下面内容的注释去掉:            <valve classname="org.apache.catalina.valves.AccessLogValve" <="" div="" style="word-wrap

sqlserver2005没有log日志文件时恢复数据库的方法

SQLServer2005数据库日志文件损坏的情况下如何恢复数据库呢?下面我们来详细分析... 在某些偶然的情况下, 会引起SQL Server 2005数据库日志文件的损坏,比如:硬件故障.计算机非正常重启或关机. 当SQL Server 2005数据库日志文件损坏时,可能会出现以下情况: 1.在SQL Server Management Studio中显示数据库处于置疑(suspect)状态. 2.事件日志可能会出现如下错误信息:Could not redo log record (2173

如何使用IMM v2 cli收集system x服务器event log日志?

操作步骤: 1.ssh连接到imm 管理口(用户名和密码同web登录) 2. 显示所有日志 system> readlog -a 3.可用tftp或者sftp服务器将日志保存 system> readlog -a -i ip地址 -l 文件名 附 system> readlog ? usage: readlog [-options] - display the IMM event log entries from most recent to oldest, five entries a

如何向solr服务器提交大日志文件

问题描述 现在公司有个项目对日志文件进行全文检索,准备用solr完成.现在遇到一个问题,由于日志的文件比较大,一般10几兆,大的已经达到几百兆了.我们将日志的内容设置为content字段,类型为string,但是当我们将documnet提交到server的时候,就报OOM的错误,请问如何解决该问题? 解决方案 public static void main(String[] args) { try { //Solr cell can also index MS file (2003 versio