当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

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

发表于: 2015-04-14   作者:cfyme   来源:转载   浏览次数:
awk
摘要:   工作上有这样一个需求:    服务端每天产生的埋点日志比较多>200万行,凌晨2点将这个日志的数据入库到数据库,便于BI分析。      最初我的思路是:写一个shell脚本,将入库的逻辑放入shell脚本中,再将这个shell脚本放入到linux服务器crontab任务中。    说起来简单,但在编

  工作上有这样一个需求:

   服务端每天产生的埋点日志比较多>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脚本快速入库

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1、为何要 BulkLoad 导入?传统的 HTableOutputFormat 写 HBase 有什么问题? 我们先看下 HBase 的
目录[-] 1、为何要 BulkLoad 导入?传统的 HTableOutputFormat 写 HBase 有什么问题? 2、bulkload
目录[-] 1、为何要 BulkLoad 导入?传统的 HTableOutputFormat 写 HBase 有什么问题? 2、bulkload
1、为何要 BulkLoad 导入?传统的 HTableOutputFormat 写 HBase 有什么问题? 我们先看下 HBase 的
埋点的作用是把客户端每次访问服务端的操作记录下来,包括请求连接 请求者ip 请求参数 请求结果等等,
移动端无痕埋点的架构及实践 移动端无痕埋点的自动化采集技术,降低开发成本、提高采集效率和数据质
greenplum数据入库,采用的书文件入表,可支持文件类型为txt或者csv文件。 文件入库需要先启动后台
一、功能   1、系统设置     1)设置源数据FTP连接     2)设置SDE连接信息     3)
目录: 一、概述 二、awk基本语法格式 三、awk基本操作 四、awk条件及循环语句 五、awk函数 六、awk
日志样本: 囧,日志格式是我随便定得(莫喷,在明珠时有专门的数据组统计日志,日志都非常规范,在
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号