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

接上文,本文采用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指标统计数据

猜你喜欢

转载自www.cnblogs.com/hzhuxin/p/11266385.html