`
canofy
  • 浏览: 821018 次
  • 性别: Icon_minigender_1
  • 来自: 北京、四川
社区版块
存档分类
最新评论

统计log中的数据

阅读更多
日志格式(log)(使用的log4j记录的日志,分隔符使用的是一个tab,注意日期的时间与小时那里是一个空格,第一列为时间;第二列为id,为某一个唯一标识,第三列为ip,第四列后面的可以不用考虑):
2009-04-05 12:00:02	0572	218.200.247.111		 	 
2009-04-05 12:00:02	0571	218.207.218.135		 	 
2009-04-05 12:00:02	0571	218.205.237.10		 	 
2009-04-05 12:00:03	1213	211.139.190.234		 	 
2009-04-05 12:00:03	0161	218.207.91.131		 	 
2009-04-05 12:00:03	0162	211.138.45.11		 	 
2009-04-05 12:00:03	1170	211.96.28.105		DYSM-F420M01/(2006.11.09)N.RF4200111.M01001.V1.0/WAP2.0 Profile/MIDP-2.0 Configuration/CLDC-1.0	 
2009-04-05 12:00:03	0182	211.138.237.173		 	 
2009-04-05 12:00:03	0161	218.207.91.131		 	 
2009-04-05 12:00:04	0779	211.143.171.143		 	 
2009-04-05 12:00:04	0981	211.94.164.215		NOKIA5700	 
2009-04-05 12:00:04	1190	211.136.222.98		 	 
2009-04-05 12:00:05	0161	211.136.222.98		 	 
2009-04-05 12:00:06	0162	211.139.144.74		 	 
2009-04-05 12:00:06	0188	211.139.60.19		TIANYU-KTOUCH/D171/Screen-128x160	 
2009-04-05 12:00:07	0188	211.143.171.143	

现在的需求如下:需要得到这个日志里面的某个id,某个ip的量。
目前知道的有两种方法:
1.把这个日志存入数据库中,在mysql下使用/usr/local/mysql/bin/mysql -uroot -proot databasename -e "LOAD DATA LOCAL INFILE '$filename' into table log(visittime,id,ip,*)",sqlserver里也有从文本文件直接导入到数据库的sql语句,oracle应该也有;到了数据库之后通过存储过程获取各种需要的数据。
2.把这个日志直接通过脚本(如awk,shell,sed,python等)处理成需要的数据后再把这些数据插入到数据库中。
这两种方法都各有所长吧,第一种方法比较简单,只需掌握sql知识就行,调试、查错也比较方便。当数据量小时可以使用这种办法,当数据量大的时候数据库操作可能会成为一个瓶颈,比如当一天的数据量达到几千万的时候,把这些数据插入到数据库中需要一点时间,建立一个索引可能就需要半个小时左右的时间,执行一个sql语句基本会在1分钟以上,如果业务逻辑比较复杂,可能还需要5-6分钟,要是条件比较多的话运行速度就会很慢了。目前知道的一些解决办法:分表,分时;分表能够降低一个表里的数据量,相应的时间也会减少;分时基本上是把总的执行时间分配到了每一个小时,这样在第二天则只需执行最后一个小时的日志就行了,提高了机器的使用效率。
第二种方法运行效率上来说比第一种要快很多,一级统计在脚本里做,不需要入库,见索引等操作,数据库的压力会比较小。但这种方法不太方便调试以及查错。当执行时间也要花很久时也可以进行分时的操作。
还有最重要的一点是第一种方法可以很灵活,当需要什么数据的时候可以很快就能得到想要的东西;而第二种则需要改动的地方比较多,脚本,数据库,所有的东西都得改。
因此第一种方法适用于需求经常变动的地方,而第二种则适用于比较稳定的地方。
当然得自己去权衡到底是使用哪种办法更好,印证了那句俗话没有最好的,只有合适的。

下面介绍一下第二种方法

使用awk进行统计数据,如下(load_log.awk):
BEGIN{
#分隔符
    FS="\t"
}
{
    key=$2+$3;
    if(key in cl){
        cl[key]++
    }else{
        cl[key]=1
        #日期
        stat_date[key]=substr($1,1,10)
        #小时
        stat_hour[key]=substr($1,12,2)
        id[key]=$2
        ip[key]=$3
    }    
}
END{
    for(key in cl){
        print stat_date[key],stat_hour[key],id[key],ip[key],cl[key]
    }
}

这里可以满足最初的那个需求,既得到这个日志里面的某个id,某个ip的量。
在shell中使用awk -f load_log.awk log>temp.log即可。
最后就只需把temp.log文件导入到数据库中就大功告成了。
分享到:
评论

相关推荐

    将NMEA 编码的GPS数据从 .log 文件读取到Matlab 并创建统计图和驱动图

    将NMEA编码的 GPS 数据从 .log 文件读取到 Matlab 并创建统计图和课程驱动图。

    access.log数据、用户日志分析数据

    access.log数据、用户日志分析数据

    Log Explorer 4.2 MSSQL数据库日志查看及数据恢复工具

    Log Explorer主要用于对MSSQLServer的事物分析和数据恢复。你可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,...

    log_monitor日志监控

    retain_seconds: 统计数据保留时间 http_port: 用来通过页面展示统计数据的端口 log_level: log monitor的日志级别 启动 ./bin/log_monitor [conf_file_path] 查看 (1) 在控制台就可以看到系统实时的qps以及每...

    NodeLog统计方案yog-log.zip

    yog-log 是 Node Log 统计方案,是yog框架的log统计模块,支持中间件或者单独使用等方式,兼容ODP日志格式与配置。关于ODP的日志方案调研可查看此文档. 统计日志类型包括: server日志 access_log: web访问日志,...

    Log Explorer4.2帮助文档

    服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...

    用python脚本处理和分析svn log xml

    本代码实现了用python处理svn log数据(xml格式),把Log的数据转化为一个python的数据结构,方便作更进一步数据挖掘!

    Log Explorer for MSSQL

    Log Explorer主要用于对MSSQLServer的事物分析和数据恢复。你可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,...

    《操作系统》by李治军 - 实验4 - 进程运行轨迹的跟踪与统计:数据统计程序【stat-log.py】

    《操作系统》by李治军 - 实验4 - 进程运行轨迹的跟踪与统计:数据统计程序【stat-log.py】

    Log Explorer for SQL Server v4.22

    服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...

    QPS接口耗时统计log_monitor.zip

    Countly 是一个实时的、开源的移动分析应用,通过收集来自手机的数据,并将这些数据通过可视化效果展示出来以分析移动应用的使用和最终用户的行为。一旦你打开该程... 网络流量监测图形分析工具Cacti...

    spark core项目所用到的数据源文件 agent1.log

    我的博客 https://blog.csdn.net/weixin_46122692/article/details/109034397 中sparkcore 项目用到的数据源文件 一张大表 记录时间戳、省份ID、城市ID、用户ID、广告ID 一张小表 记录省份ID、省份名称 两张表做Join...

    log explorer4.2(含使用说明)

    Log Explorer主要用于对MSSQLServer的事物分析和数据恢复。你可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,...

    sql2000 Log Explorer4.2(含注册码)+汉化

    服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...

    graylog2使用说明(docker)

    > Graylog 节点能够接受数据的类型称之为input,常见的有GELF TCP, GELF UDP, GELF HTTP. 说明:GELF TCP, GELF UDP可以使用同一个端口,HTTP需要另起端口,原因不解释。 - 添加三个input,过程略,tcp,udp端口...

    Log Explorer for SQL Server v4.22 含注册机

    服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...

    Lumigent Log Explorer for SQL Server v4.0.2.rar

    Log Explorer主要用于对MSSQLServer的事物分析和数据恢复。你可以浏览**志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,...

    spss数据分析常用数据集:drug.sav

    统计分析及模型构建中常用的数据集; 学习软件的时候,会苦于没有数据进行实操,而其实一般分析软件都会自带数据,现在介绍如何获取SPSS软件自带的数据。 纽约时报的一篇文章报道,数据科学家在挖掘出有价值的“金块...

    SilvacoTonyplot中如何导出数据导出图片保存文件[汇编].pdf

    SilvacoTonyplot中如何导出数据导出图片保存文件[汇编].pdf

    Pioneer回放及统计流程

    Pioneer回放及统计流程 数据回放 选择Edit->Log Data->Import或双击导航栏General中Log File,弹出导入数据的对话框

Global site tag (gtag.js) - Google Analytics