`
cfyme
  • 浏览: 274975 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据埋点日志awk脚本快速入库

 
阅读更多

  工作上有这样一个需求:

   服务端每天产生的埋点日志比较多>200万行,凌晨2点将这个日志的数据入库到数据库,便于BI分析。

 

   最初我的思路是:写一个shell脚本,将入库的逻辑放入shell脚本中,再将这个shell脚本放入到linux服务器crontab任务中。

   说起来简单,但在编写的过程中遇到了问题,主要是日志量大,入库的速度很慢,最初的实现是

   cat statlog.log | while read line  这种遍历日志,按行读取来入库,速度超慢。

  经优化,采用awk的方式来做:

   1,代码如下:

   

BEGIN{
    FS=","   
    user="test"
    passwd="test"
    host="192.168.0.9"
    print "==============start=================="
    sqlInsert="INSERT INTO log.logs_mobile_stat (p1, p2, p3, p4, p5, type, cookie, user_id, time, platform) VALUES"
    sql=sqlInsert
    idx=0
    conMysql="mysql -h" host " -u" user " -p'" passwd "' log -e " "date +%Y-%m-%d\ %H:%M:%S" | getline time;print time;	
}

{
	idx=idx+1
	#每1000条记录拼接长一条sql
	if(idx==1000){		
		sqlValues="('"$2"', '"$3"', '"$4"', '"$5"', '"$6"', '"$7"', '"$8"', '"$9"','"$1"','"$10"');"		
		sql=sql sqlValues		
		str=conMysql "\"" sql "\" "
		system(str)
		idx=0
		sql=sqlInsert
	}else{		
		sqlValues="('"$2"', '"$3"', '"$4"', '"$5"', '"$6"', '"$7"', '"$8"', '"$9"','"$1"','"$10"'),"
		sql=sql sqlValues
	}
}

END{         
	#去掉最后的分号
	sql= substr(sql, 0, length(sql))	
    
	str=conMysql "\"" sql "\" "
	
	#执行最后不足1000条记录的sql
	if(idx>0 && idx<1000){
		system(str)
		print"=============end============idx====="idx	
	}	
	
    "date +%Y--%m-%d\ %H:%M:%S" | getline time2;print time2
    print"=============end================="	

}

   

   2,将上面的代码保存为stat.awk文件,写个调度stat.awk文件的shell,文件名为executeStat.sh

   

#!/bin/sh

date=`date   -d   -1day +%Y-%m-%d`;
 
log=/home/www/logs/taofen8/api/statlog.log.$date 

sudo awk -f /tmp/stat.awk  $log

 

    3,将executeStat.sh加入到crontab定时任务中, 每天凌晨2点执行

    0 2 * * *  sudo /tmp/executeStat.sh > /tmp/stat.log

   

    经线上测试,200万左右的日志入库2分钟左右,速度还可以吧。

 

分享到:
评论

相关推荐

    awk脚本学习快速入门

    本资料包是针对awk脚本学习的快速入门教程,旨在帮助初学者快速掌握awk的基本用法和高级技巧。 一、awk简介 awk是由Aho、Weinberger和Kernighan三位大牛命名的(取首字母),最初设计用于处理结构化的文本数据,如...

    NS2下无线网络的各种参数统计的AWK脚本

    为了有效地处理这些数据,我们可以利用awk脚本,这是一种强大的文本分析工具,能够帮助我们提取、处理和汇总关键的网络参数。本压缩包中的"AWK_for_Wireless"文件正是针对无线网络参数统计的awk脚本集合。 1. **NS2...

    shell awk脚本总结.txt

    ### Shell Awk脚本知识点总结 #### 一、Shell与Awk在文本处理中的应用 在日常工作中,尤其是在技术支持领域,经常会遇到需要处理文本文件的情况。无论是哪种类型的数据库,最终都可以将其导出为文本格式,这为我们...

    AWK脚本开发教程(深入)

    AWK是一种强大的文本分析工具,尤其适用于处理结构化数据,如CSV或日志文件。它以其简洁的语法和内置的功能在文本处理领域独树一帜。AWK这个名字源于其三位创始人—— Alfred V. Aho、Peter J. Weinberger 和 Brian ...

    AWK单行脚本快速参考

    AWK单行脚本快速参考

    原厂工程师用来快速格式化Oracle alert日志中的错误号,来快速浏览alert错误信息的awk脚本

    原厂工程师用来快速格式化Oracle alert日志中的错误号,来快速浏览alert错误信息的awk脚本。

    AWK脚本学习文档 Linux

    AWK是一种强大的文本分析工具,它在Linux环境下被广泛用于处理和解析日志文件、CSV数据、报告等。AWK的名称来源于它的三位创始人——Alfred Aho、Peter Weinberger和Brian Kernighan。此工具允许用户根据指定的模式...

    sed awk单行脚本快速参考

    ### sed与awk单行脚本快速参考指南 #### 一、文本间隔操作 **1.1 在每一行后面增加一空行** - **sed**: 使用`G`命令可以在每行后添加一行之前的内容,首次执行时为空,因此形成了空行效果。 - 示例命令:`sed G`...

    AWK单行脚本快速参考.doc

    AWK 是一种强大的文本分析工具,...这些AWK脚本展示了其在处理文本数据时的灵活性和强大功能,包括模式匹配、数值计算、格式化输出以及对文件内容的复杂操作。在实际应用中,可以根据需要调整这些脚本以适应具体任务。

    巧用AWK处理二进制数据文件

    "巧用AWK处理二进制数据文件" AWK是Unix、Linux中处理文本的好工具,可以对复杂的文本...使用AWK处理二进制数据文件需要组合多种工具,包括OD、sed和AWK,并且需要根据不同的数据结构和输出要求,设计相应的AWK脚本。

    AWK命令资源收集.rar

    AWK是一种强大的文本分析工具,常用于处理结构化数据,如CSV、日志文件等。在Linux和Unix环境中,它以其简洁的语法和强大的功能深受程序员和系统管理员的喜爱。本资源包包含了关于AWK的实用资料,包括一个PDF实例...

    日志分析脚本

    根据给定的信息,我们可以深入探讨以下几个关键的知识点: ...在实际应用中,结合使用awk和shell脚本来处理大量日志数据是一种非常实用的方法。此外,在追求高性能的同时也要注意保持代码的质量,避免因小失大。

    AWK单行脚本快速参考.pdf

    在AWK中,单行脚本通常用于快速解决简单的文本处理任务。下面将详细解释PDF文件中提到的一些常见AWK单行脚本知识点。 1. **打印每一行** - 使用`1`作为脚本可以直接打印输入的每一行,因为AWK默认的行为是如果...

    shell和awk速度对比

    在比较脚本代码时,我们可以看到,shell脚本实现数据处理需要使用for循环来处理大量数据,而awk脚本则可以使用BEGIN语句来处理数据。awk的这种设计使其可以更好地处理大数据量的数据。 知识点: 1. 在大数据量的...

    脚本快速构建表数据

    "脚本快速构建表数据"这个主题聚焦于如何利用脚本高效地生成大规模的测试数据,以模拟真实环境下的数据量,这对于亿级数据的处理尤其重要。在不到5分钟的时间内能构建亿级数据,这种能力对于快速验证系统性能、优化...

    AWK学习笔记.doc

    此外,AWK的脚本简洁,易于编写,使得快速实现数据处理任务成为可能。 **一.3 AWK的调用方式** 通常,AWK是通过在命令行中直接运行的,格式如下: ```bash awk 'program' input_file(s) ``` `program`是AWK脚本,`...

    Linux脚本awk

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

    linux-shell脚本命令:awk命令简介

    awk命令常用于在Linux shell脚本中进行数据提取、文本转换、数据报告生成等操作。本文将对awk命令的基本知识进行介绍,包括其工作原理、参数说明、内置变量、内置函数和使用示例。 首先,awk的工作流程可以从读取...

    Oracle ass.awk工具

    Ass.Awk 脚本在LTOM的ltom431\ltom\tom_base\tom\src目录下,其名称是:ass109.awk。这个是目前的最新版本,ass.awk 脚本可以帮助我们分析和格式化system state dump。 LTOM的MOS说明: LTOM - TheOn-Board Monitor...

Global site tag (gtag.js) - Google Analytics