日志格式(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文件导入到数据库中就大功告成了。
分享到:
相关推荐
在本项目中,我们将探讨如何使用Matlab处理NMEA编码的GPS数据,这些数据通常存储在.log文件中。NMEA(National Marine Electronics Association)是一种通用的GPS数据标准,用于通信和记录定位、速度、时间等信息。...
"log explorer 导出数据的后续处理"这个主题涉及到的是在Log Explorer中获取数据后,如何进一步处理和利用这些数据的过程。 1. **数据导出格式**:Log Explorer导出的数据可能以多种格式存在,如CSV、JSON、XML或...
它提供了全面的功能,包括测井曲线处理、多井一致性处理、岩石物理正演以及建模等,旨在帮助地质学家和地球物理学家从复杂的地下数据中提取有价值的信息,优化油藏描述和资源评估。 #### 测井地层评价与岩石物理...
Log Explorer主要用于对MSSQLServer的事物分析和数据恢复。你可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,...
在IT行业中,日志分析是一项至关重要的任务,...总结来说,access.log数据是理解用户行为、提升网站性能和维护网络安全的重要资源。通过深入分析这些日志,我们可以获得宝贵的洞察,进一步推动网站的持续改进和发展。
BST允许我们在O(log n)的时间复杂度内插入、删除和查找数据,这对于大型运动会的分数统计尤其有利。 在实际编码过程中,我们需要考虑数据结构的实现细节,如内存管理、性能优化以及错误处理等。同时,为了使代码更...
retain_seconds: 统计数据保留时间 http_port: 用来通过页面展示统计数据的端口 log_level: log monitor的日志级别 启动 ./bin/log_monitor [conf_file_path] 查看 (1) 在控制台就可以看到系统实时的qps以及每...
这一步是为了确保无论原始数据中是否包含每个小时的数据,我们都能获得完整的一天24小时的统计结果。 ```sql SELECT 0 as click_date UNION ALL SELECT 1 as click_date UNION ALL ... SELECT 23 as click_...
《Log Explorer 4.1:SQL Server日志恢复利器》 在SQL Server数据库管理...总的来说,Log Explorer 4.1是SQL Server 2005环境中不可或缺的一款日志管理和恢复工具,对于提高数据库的稳定性和数据安全性具有重要意义。
开发人员可能会使用SQL来查询、更新和验证"用户行为数据",例如,找出某个时间段内最活跃的用户、统计某一操作的频率或者检测异常行为。 综上所述,这个实践项目涵盖了数据存储、数据交换、大数据处理和测试数据的...
Log Parser是一款强大的命令行工具,能够解析各种结构化和非结构化的数据源,包括日志文件、XML文档、CSV文件等,而Log Parser Lizard则将这一能力提升到了一个新的层次。 首先,Log Parser Lizard支持SQL语法,这...
在互联网服务中,访问日志(access log)记录了用户与服务器交互的详细信息,是日志分析的主要数据源。 二、Spark日志分析步骤 1. 数据获取:首先,我们需要从"accessLog.rar"中解压出"log.log"文件,这通常包含...
Silvaco Tonyplot 中数据导出和图片保存 Silvaco Tonyplot 是一款功能强大的数据分析和可视化工具,广泛应用于电子设计自动化(EDA)和计算机辅助设计(CAD)领域。随着数据分析和可视化的需求日益激增,Silvaco ...
4. **对数在数据分析中的应用**:在统计分析中,对数转换可以将非线性关系转化为线性关系,便于模型建立和数据可视化。 三、快速计算与优化 1. **预先计算并存储常见对数值**:对于一些固定的数值,如2、10等,...
yog-log 是 Node Log 统计方案,是yog框架的log统计模块,支持中间件或者单独使用等方式,兼容ODP日志格式与配置。关于ODP的日志方案调研可查看此文档. 统计日志类型包括: server日志 access_log: web访问日志,...
尤其在面对系统故障或人为错误导致的数据丢失情况下,Log Explorer能够有效地帮助用户实现数据恢复,同时最大程度地减少恢复过程中对其他事务的影响。 Log Explorer支持以下版本的SQL Server: - SQL Server 7.0 - ...
Log Parser 提供了灵活的数据查询语言,可以处理大量结构化和非结构化的数据。 该系统的应用主要集中在以下几个核心知识点: 1. **日志文件格式**:Log Parser 支持多种日志格式,最常见的可能是IIS(Internet ...
在大数据测试中,多个.log文件可以提供大量数据样本,用于模拟真实世界中的大规模用户行为。这些数据可用于验证大数据处理和分析框架的性能,如Hadoop MapReduce、Spark、Flink等。通过处理大量.log文件,可以评估...
服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...
4. **聚合和统计功能**:可以计算日志中的各种统计量,如总数、平均值、最大值、最小值等,对日志数据进行深入分析。 5. **日志合并与分段**:可以一次性处理多个日志文件,或者按照时间、事件类型等条件分割日志。...