首页 > 其他 > 详细

日志离线收集处理方案——2.数据清理和计算

时间:2019-07-29 21:05:24      阅读:117      评论:0      收藏:0      [点我收藏+]

接上文,本文采用Hive相关的技术来完成数据清理和计算

一. 原始日志信息的存储

hive的表支持正则式的方式进行存储和读取,如下:

CREATE EXTERNAL TABLE nginxlog (
  ip STRING,
  time STRING,
  request STRING,
  status STRING,
  size STRING,
  referer STRING,
  agent STRING)
ROW FORMAT SERDE org.apache.hadoop.hive.serde2.RegexSerDe
WITH SERDEPROPERTIES (
  "input.regex" = "([^ ]*) (\\[[^\\]]*\\]) (\"[^\"]*\") (-|[0-9]*) (-|[0-9]*) (\"[^ ]*\") (\"[^\\\"]*\")"
)
STORED AS TEXTFILE LOCATION ‘/test‘ ;

我们的access.log的日志数据格式如下:

192.168.111.1 [29/Jul/2019:19:58:55 +0800] "GET /big.png?url=http://127.0.0.1/a.html&urlname=a.html&scr=1366x768&ce=1&cnv=0.6735760053703803&ref=http://127.0.0.1/b.html&stat_uv=67256303183188720208&stat_ss=6553789412_7_1564401535833 HTTP/1.0" 200 37700 "http://127.0.0.1/a.html" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"

所以建表语句中的正则式 

([^ ]*) (\\[[^\\]]*\\]) (\"[^\"]*\") (-|[0-9]*) (-|[0-9]*) (\"[^ ]*\") (\"[^\\\"]*\") 必须要和上述的数据匹配,
首先要先理解这个正则式中每个分组匹配的意义:
  ([^ ]*) //表示匹配除了空格之外的其他字符,^在方括号表达式中使用,此时它表示不接受该字符集合。
   (-|[0-9]*)  //表示匹配-或者0到9的多个数字
  (\"[^\\\"]*\")  // \" 表示实际的双引号字符 ,引号前的\符是java语言为了转义它之后的双引号符,与正则式并无关系

(\\[[^\\]]*\\]) //
\\[ 是为了表示正则式的 \[ ,即正则式中的实际的左中括号符号

此外在Hive中正式应用这个正则式前,最好在JAAV的单元测试代码中进行验证:

@Test
    public void testLog(){

        String regex =  "(([^ ]*) (\\[[^\\]]*\\]) (\"[^\"]*\") (-|[0-9]*) (-|[0-9]*) (\"[^ ]*\") (\"[^\\\"]*\"))" ;
        Pattern pattern = Pattern.compile( regex);
        String data = "192.168.111.1 [21/Jul/2019:15:53:07 } +0800] \"GET /favicon.ico HTTP/1.1\" 404 555 \"http://192.168.111.123/\" \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36\"" ;
        Matcher matcher = pattern.matcher(data);
        
     //注意: matches()方法表示匹配整个串, find()方法表示匹配子串就可以
if(matcher.matches()) { for(int i=0;i<matcher.groupCount();i++){ System.out.println(matcher.group(i+1)) ; } }else{ System.out.println("No match found.%n"); } }

 


 

 

 

 

二. 原始日志信息的处理——>产生中间处理数据

 

 

 

三.根据中间处理数据产生最终的KPI指标统计数据

 

日志离线收集处理方案——2.数据清理和计算

原文:https://www.cnblogs.com/hzhuxin/p/11266385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!