精华内容
下载资源
问答
  • 士 位 山 大学硕 学 论文 东 目 录 绪论 研 意 宄背景与 义 研 现 国 内外 究 状 工 主 本文的 要 作
  • 微信小程序获取用户在小程序内的操作日志,已经独立封装在此js文件。可以直接使用,不影响原来的项目架构。把这个功能封装成了一个独立的js工具。使用方法详见博客:...
  • 用户行为日志采集

    万次阅读 2015-02-10 16:49:01
    PC/WAP/APP各平台用户访问数据收集方案
    用户的行为日志,在现今以数据说话时代的重要性已经凸显地越来越明显.笔者从事相关一线工作(主要是数据处理及模型设计,离线及实时平台)三年,分享一些工作中的一些思考,这部分的内容比较偏向业务,希望不会写的太技术。

    首先,我们要先来看一下这个东东到底有啥重要的,为啥每个有点规模的公司都需要花费一定人力来搞这个东西呢?有的时候甚至只是一份日志真的能养活这么多人?

    想解释这个问题,必须回到一些基本运营的问题上来?
    1.公司靠客户转化来增加收入,没错吧?
    2.哪个公司都有产品经理吧?怎么知道他/她设计的这产品效果明显呢?万一正好搞啥活动或者公关的好,他这产品上线了,谁扯的清呢?
    3.公司运营除了增加收入外还得减少开支吧,每个月投baidu、360、各种网盟的钱有点割肉的感觉吧?我们期待啥?用最少的钱打最合算的广告!
    4.那些说什么老板拿这些数据做最后的决策,部分有点扯淡,不排除现在一些老大还是拍脑袋下决策,但是有一点一定是对的,就是你得知道自己公司一段时间的数据吧,不能闷头过日子啊。
    5...

    以上问题都是可以在用户数据中拿到对应的内容来说明。

    好了,在我们确定了这个东西的确是有价值、值得花人力去做之后,我们来聊聊怎么做?

    在这里需要细分一下目前用户访问的平台,根据目前以及短期内技术发展,可以分为三种APP|PC|WAP,其中PC/WAP可以算一种,都是传统web交互方式,APP(说的是Native APP,iOS、Android etc)
    • PC/WEB上实现一般有三种:
    1.web service记录
    2.js嵌入收集
    3.包嗅探器
      Web日志 JavaScript标记 包嗅探器
    优点 ・比较容易获取数据源
    ・方便对历史数据再处理
    ・可以记录搜索引擎爬虫的访问记录
    ・记录文件下载状况
    ・数据收集灵活,可定制性强
    ・可以记录缓存、代理服务器访问
    ・对访问者行动追踪更为准确
    ・对跨域访问的监测比较方便
    ・取得实时数据比较方便
    缺点 ・无法记录缓存、代理服务器访问
    ・无法捕获自定义的业务信息
    ・对访问者的定位过于模糊
    ・对跨域访问的监测比较麻烦
    ・用户端的JS设置会影响数据收集
    ・记录下载和重定向数据比较困难
    ・会增加网站的JS脚本负荷
    ・初期导入费用较高
    ・无法记录缓存、代理服务器访问
    ・对用户数据隐私有安全隐患
    目前第二种是最流行的收集方式。
    通过使用JS收集客户端的cookie信息,浏览器等,发送到后台一组服务器,找了几个网站查看他们的收集数据,请求格式譬如:
    唯品会:
    http://mar.vip.com/p?mars_br_pos=&mars_cid=1398657717000_d430514ae3ce8aab29178c11eba5dcb1&mars_sid=b01fc069abdd38df7bd359d6429184f4&pi=0&mars_vid=BD55BF35DADC6722D8D2B29B5C4054A3&lvm_id=83619272008072580001401328910640&mars_var=-&lg=0&wh=VIP_SH&in=0&sn=&url=http://www.vip.com/&sr=1366*768&rf=&bw=1286&bh=150&sc=24&bv=mozilla/5.0 (windows nt 6.3; wow64) applewebkit/537.36 (khtml, like gecko) chrome/40.0.2214.93 safari/537.36&ce=1&vs=&title=唯品会(原Vipshop.com)特卖会:一家专门做特卖的网站_确保正品_确保低价_货到付款&tab_page_id=1423478314979_0c4c3141-f350-79ec-2e58-1b5bafda3332&vip_qe=undefined&vip_qt=undefined&vip_xe=&vip_xt=&r=0.03680062713101506
    当当:
    http://click.dangdang.com/page_tracker.php?m_id=&o_id=®ion_ids=&out_refer=null&refer_url=&url=http://www.dangdang.com/&to_url=&type=1&visit_count=27&is_first_pv=0&ctr_type=&perm_id=20140430171404681303078869337380126&res=1366,768||1286,1518&r=0.9703021887689829&title=当当—网上购物中心:图书、母婴、美妆、家居、数码、家电、服装、鞋包等,正品低价,货到付款&trace_id=0.70&special=market=location:6;&cif=&rsv1=&rsv2=&rsv3=&rsv4=xxx
    淘宝:
    http://ac.mmstat.com/1.gif?uid=802662066&apply=vote&abbucket=_AB-M65_B6&com=02&acm=tt-1097039-36356.1.1003&cod=tt-1097039-36356&cache=1874351609&aldid=72SdnsDn&logtype=4&abtest=_AB-LR65-PR65&scm=1003.1.tt-1097039-36356&ip=210.13.117.180
    
    在服务器端如Nginx,进行query的parse配置,最后将数据以log方式存储。
    • 移动端的实现
    对移动开发不熟悉,了解到的是一般通过手动埋点,触发Event来实现,如友盟的自定义事件埋点:
    MobclickAgent.onEvent( this , Event.Start);
    可以下载具体的SDK文档看看,后续一样还是将query发到服务器,由服务器进行解析,存储

    本文为个人原创,转载请注明出处!原作者:Tony_老七


    展开全文
  • 网站用户行为日志采集和后台日志服务器搭建

    万次阅读 多人点赞 2018-07-04 00:50:16
    1.使用场景 2.设计架构 3.设计实现 3.1埋点JS 3.2数据采集JS 3.3后台脚本

    原文地址: 网站用户行为日志采集和后台日志服务器搭建

    1.简介

    网站流量数据统计分析,可以帮助网站管理员、运营人员、推广人员等实时获取网站流量信息,并从流量来源、网站内容、网站访客特性等多方面提供网站分析的数据依据。从而帮助提高网站流量,提升网站用户体验,让访客更多的沉淀下来变成会员或客户,通过更少的投入获取最大化的收入。
    访问日志指用户访问网站时的所有访问、浏览、点击行为数据。比如点击了 哪一个链接,打开了哪一个页面,采用了哪个搜索项、总体会话时间等。而所有 这些信息都可通过网站日志保存下来。通过分析这些数据,可以获知许多对网站 运营至关重要的信息。采集的数据越全面,分析就能越精准。

    日志的生成渠道分为以下两种:

    • web 服务器软件(httpd、nginx、tomcat)自带的日志记录功能,如 Nginx 的 access.log 日志;
    • 自定义采集用户行为数据,通过在页面嵌入自定义的 javascript 代码来 获取用户的访问行为(比如鼠标悬停的位置,点击的页面组件等),然后通过 ajax 请求到后台记录日志,这种方式所能采集的信息会更加全面。

    在实际操作中,有以下几个方面的数据可以自定义的采集:

    类型列举
    系统特征比如所采用的操作系统、浏览器、域名和访问速度等
    访问特征包括停留时间、点击的 URL、所点击的“页面标签”及标签的属性等
    来源特征包括来访 URL,来访 IP 等
    来源特征包括所访问的产品编号、产品类别、产品颜色、产品价格、产品 利润、产品数量和特价等级等

    下面是博主访问京东首页,其自定义采集的数据日志格式的截取部分:

    https://mercury.jd.com/log.gif?t=www.100000&m=UA-J2011-1&pin=zaomianbao&uid=1522992113160771150291522&sid=15229913133260771150291522|42&v=je=0$sc=24-bit$sr=1680x1050$ul=en-us$cs=UTF-8$dt=京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!$hn=www.jd.com$fl=-$os=mac$br=chrome
    

    2.设计架构

    这里写图片描述

    埋点是指:在网页中预先加入小段 javascript 代码,这个代码片段一般会 动态创建一个 script 标签,并将 src 属性指向一个单独的 js 文件,此时这个单 独的 js 文件会被浏览器请求到并执行,这个 js 往往就是真正 的数据收集脚本。
    数据收集完成后,js 会请求一个后端的数据收集脚本, 这个脚本一般是一个伪装成图片的动态脚本程序,js 会将收集到的数据通过 http 参数的方式传递给后端脚本,后端脚本解析参数并按固定格式记录到访问 日志,同时可能会在 http 响应中给客户端种植一些用于追踪的 cookie。

    番外:为什么使用请求图片的形式收集?

    • 这里收集的形式其实有很多种,比如ajax请求,但是在实际生产环境中服务一般都是分布式部署,ajax请求就会涉及到跨域的问题(具体详见:同源策略与通过跨域资源共享实现ajax跨域访问),而请求图片地址的形式则不在同源策略的限制范围内,即请求图片没有跨域限制。另一方面,请求一个静态资源的速率旺旺比请求一个动态接口要快得多。

    3.设计实现

    步骤:

    1. 确定想要收集的信息
    2. 确定埋点代码
    3. 编写JS前端日志收集脚本
    4. 确定日志格式
    5. 编写后台脚本
    6. 日志切分
    7. 在网站页面进行埋点
    8. 检测日志数据

    选型:这里我们选用Apache作为Web服务器,日志后台服务器使用Nginx处理日志请求,同时将JS前端日志收集脚本直接放置在Nginx服务器内(架构中将其单独部署一个服务器)。

    3.1确定收集的信息

    名称途径备注
    访问时间web serverNginx $msec
    IPweb serverNginx $remote_addr
    域名JavaScriptdocument.domain
    URLJavaScriptdocument.URL
    页面标题JavaScriptdocument.title
    分辨率JavaScriptwindow.screen.height & width
    颜色深度JavaScriptwindow.screen.colorDepth
    ReferrerJavaScriptdocument.referrer
    浏览客户端web serverNginx $http_user_agent
    客户端语言javascriptnavigator.language
    访客标识cookieNginx $http_cookie
    网站标识javascript自定义对象
    状态码web serverNginx $status
    发送内容量web serverNginx $body_bytes_sent

    3.2埋点代码

    埋点,是网站分析的一种常用的数据采集方法。核心就是在需要进行数据采 集的关键点植入统计代码,进行数据的采集。比如以谷歌分析原型来说,需要在 页面中插入一段它提供的 javascript 片段,这个片段往往被称为 。

    <script type="text/javascript">
    	var _maq = _maq || [];
    	_maq.push(['_setAccount', 'zaomianbao']);
    	(function() {
    		var ma = document.createElement('script'); 
    		ma.type = 'text/javascript';
    		ma.async = true;
    		ma.src = 'http://192.168.214.152/ma.js';
    		var s = document.getElementsByTagName('script')[0]; 
    		s.parentNode.insertBefore(ma, s);
    	})();
    </script>
    

    其中_maq 是全局数组,用于放置各种配置,其中每一条配置的格式为:

    • _maq.push([‘Action’, ‘param1’, ‘param2’, …]);

    _maq 的机制不是重点,重点是后面匿名函数的代码,这段代码的主要目的
    就是引入一个外部的 js 文件(ma.js),方式是通过 document.createElement 方法 创建一个 script 并根据协议(http 或 https)将 src 指向对应的 ma.js,最后将这个 元素插入页面的 dom 树上。
    注意 ma.async = true 的意思是异步调用外部 js 文件,即不阻塞浏览器的解 析,待外部 js 下载完成后异步执行。这个属性是 HTML5 新引入的。

    番外:js 自调用匿名函数

    • 格式: (function(){})();
    • 第一对括号向脚本返回未命名的函数;后一对空括号立即执行返回的未命名函数,括号内为匿名函数的参数。
    • 自调用匿名函数的好处是,避免重名,自调用匿名函数只会在运行时执行一 次,一般用于初始化。

    3.3前端数据收集脚本

    数据收集脚本(ma.js)被请求后会被执行,一般要做如下几件事:

    • 1、通过浏览器内置 javascript 对象收集信息,如页面 title(通过 document.title)、 referrer(上一跳 url,通过 document.referrer)、用户显示器分辨率(通过 windows.screen)、cookie 信息(通过 document.cookie)等等一些信息。
    • 2、解析_maq 数组,收集配置信息。这里面可能会包括用户自定义的事件跟 踪、业务数据(如电子商务网站的商品编号等)等。
    • 3、将上面两步收集的数据按预定义格式解析并拼接(get 请求参数)。
    • 4、请求一个后端脚本,将信息放在 http request 参数中携带给后端脚本。

    这里唯一的问题是步骤 4,javascript 请求后端脚本常用的方法是 ajax,但是ajax 是不能跨域请求的。一种通用的方法是 js 脚本创建一个 Image 对象,将 Image 对象的 src 属性指向后端脚本并携带参数,此时即实现了跨域请求后端。这也是 后端脚本为什么通常伪装成 gif 文件的原因。

    示例JS代码:

    (function () {
        var params = {};
        //Document对象数据
        if(document) {
            params.domain = document.domain || ''; 
            params.url = document.URL || ''; 
            params.title = document.title || ''; 
            params.referrer = document.referrer || ''; 
        }   
        //Window对象数据
        if(window && window.screen) {
            params.sh = window.screen.height || 0;
            params.sw = window.screen.width || 0;
            params.cd = window.screen.colorDepth || 0;
        }   
        //navigator对象数据
        if(navigator) {
            params.lang = navigator.language || ''; 
        }   
        //解析_maq配置
        if(_maq) {
            for(var i in _maq) {
                switch(_maq[i][0]) {
                    case '_setAccount':
                        params.account = _maq[i][1];
                        break;
                    default:
                        break;
                }   
            }   
        }   
        //拼接参数串
        var args = ''; 
        for(var i in params) {
            if(args != '') {
                args += '&';
            }   
            args += i + '=' + encodeURIComponent(params[i]);
        }   
     
        //通过Image对象请求后端脚本
        var img = new Image(1, 1); 
        img.src = 'http://192.168.214.152/log.gif?' + args;
    })();
    

    整个脚本放在匿名函数里,确保不会污染全局环境。其中 log.gif 表面上请求静态资源,到了Nginx后台实则为一个后台脚本

    3.4日志格式

    日志格式主要考虑日志分隔符,一般会有以下几种选择:固定数量的字符、制表符分隔符、空格分隔符、其他一个或多个字符、特定的开始和结束文本。
    我们在 nginx 的配置文件中定义日志格式:

    log_format
    "$msec||$remote_addr||$status||$body_bytes_sent||$u_domain||$u_url|
    |$u_title||$u_referrer||$u_sh||$u_sw||$u_cd||$u_lang||$http_user_ag
    ent||$u_account";
    

    注意这里以 u_开头的是我们待会会自己定义的变量,其它的是nginx内置变量

    3.5后台脚本

    log.gif 是后端脚本,是一个伪装成 gif 图片的脚本。后端脚本一般需要完 成以下几件事情:

    • 1、解析 http 请求参数得到信息。
    • 2、从 Web 服务器中获取一些客户端无法获取的信息,如访客 ip 等。
    • 3、将信息按格式写入 log。
    • 4、生成一副 1×1 的空 gif 图片作为响应内容并将响应头的 Content-type设为 image/gif。
    • 5、在响应头中通过 Set-cookie 设置一些需要的 cookie 信息。

    之所以要设置 cookie 是因为如果要跟踪唯一访客,通常做法是如果在请求 时发现客户端没有指定的跟踪 cookie,则根据规则生成一个全局唯一的 cookie 并 种植给用户,否则 Set-cookie 中放置获取到的跟踪 cookie 以保持同一用户 cookie 不变。这种做法虽然不是完美的(例如用户清掉 cookie 或更换浏览器会被认为是两个用户),但是目前被广泛使用的手段。
    我们使用 nginx 的 access_log 做日志收集,不过有个问题就是 nginx 配置本身的逻辑表达能力有限,所以选用 OpenResty 做这个事情。

    番外:什么是OpenResty?
    OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。其中的核心是通过 ngx_lua 模块集成了 Lua,从而在 nginx 配置文 件中可以通过 Lua 来表述业务。而Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

    这里给出Nginx配置文件

    worker_processes  2;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
    	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    					  
        log_format user_log_format "$msec||$remote_addr||$status||$body_bytes_sent||$u_domain||$u_url||$u_title||$u_referrer||$u_sh||$u_sw||$u_cd||$u_lang||$http_user_agent||$u_account";
        
        sendfile        on;  #允许sendfile方式传输文件,默认为off
    
        keepalive_timeout  65; #连接超时时间,默认为75s
    
        server {
            listen       80;
            server_name  localhost;
    		location /log.gif {
    			#伪装成gif文件
    			default_type image/gif;    
    			#nginx本身记录的access_log,日志格式为main
    			access_log  logs/access.log  main;
    		
    			access_by_lua "
    				-- 用户跟踪cookie名为__utrace
    				local uid = ngx.var.cookie___utrace        
    				if not uid then
    					-- 如果没有则生成一个跟踪cookie,算法为md5(时间戳+IP+客户端信息)
    					uid = ngx.md5(ngx.now() .. ngx.var.remote_addr .. ngx.var.http_user_agent)
    				end 
    				ngx.header['Set-Cookie'] = {'__utrace=' .. uid .. '; path=/'}
    				if ngx.var.arg_domain then
    				-- 通过subrequest到/i-log记录日志,将参数和用户跟踪cookie带过去
    					ngx.location.capture('/i-log?' .. ngx.var.args .. '&utrace=' .. uid)
    				end 
    			";  
    		
    			#此请求资源本地不缓存
    			add_header Expires "Fri, 01 Jan 1980 00:00:00 GMT";
    			add_header Pragma "no-cache";
    			add_header Cache-Control "no-cache, max-age=0, must-revalidate";
    		
    			#返回一个1×1的空gif图片
    			empty_gif;
    		}   
    	
    		location /i-log {
    			#内部location,不允许外部直接访问
    			internal;
    		
    			#设置变量,注意需要unescape
    			set_unescape_uri $u_domain $arg_domain;
    			set_unescape_uri $u_url $arg_url;
    			set_unescape_uri $u_title $arg_title;
    			set_unescape_uri $u_referrer $arg_referrer;
    			set_unescape_uri $u_sh $arg_sh;
    			set_unescape_uri $u_sw $arg_sw;
    			set_unescape_uri $u_cd $arg_cd;
    			set_unescape_uri $u_lang $arg_lang;
    			set_unescape_uri $u_account $arg_account;
    
    		
    			#打开subrequest(子请求)日志
    			log_subrequest on;
    			#自定义采集的日志,记录数据到user_defined.log
    			access_log logs/user_defined.log user_log_format;
    		
    			#输出空字符串
    			echo '';
    		}	
    	
        }
    }
    

    4.系统环境搭建部署

    注:这里是对192.168.214.152日志处理Nignx服务器的搭建,对于web服务器,直接在192.168.214.150服务器上执行yum install httpd即可安装成功。

    4.1准备安装包并上传服务器

    这里自己准备需要的安装包——注:Linux上传方式:三种方式实现Linux的文件上传下载

    [root@centos6-3 software]# cd /export/software/
    [root@centos6-3 software]# ll
    total 5900
    //一个Lua包,一个nginx包,一个openresty包,4个nginx模块包
    -rw-r--r--. 1 root root   64779 Jun 26 08:38 echo-nginx-module-0.58.tar.gz
    -rw-r--r--. 1 root root  847615 Jun 26 08:38 LuaJIT-2.0.4.tar.gz
    -rw-r--r--. 1 root root  569372 Jun 26 08:41 lua-nginx-module-0.10.0.tar.gz
    -rw-r--r--. 1 root root  833473 Jun 26 08:38 nginx-1.8.1.tar.gz
    -rw-r--r--. 1 root root   65029 Jun 26 08:38 ngx_devel_kit-0.2.19.tar.gz
    -rw-r--r--. 1 root root 3616491 Jun 26 08:40 openresty-1.9.7.3.tar.gz
    -rw-r--r--. 1 root root   35495 Jun 26 08:38 set-misc-nginx-module-0.29.tar.gz
    [root@centos6-3 software]# 
    

    4.2依赖安装

    [root@centos6-3 software]# yum -y install gcc perl pcre-devel openssl openssl-devel
    

    4.3解压编译安装LuaJIT

    [root@centos6-3 software]#  tar -zxvf LuaJIT-2.0.4.tar.gz -C /usr/local/src/
    LuaJIT-2.0.4/
    LuaJIT-2.0.4/COPYRIGHT
    LuaJIT-2.0.4/Makefile
    LuaJIT-2.0.4/README
    LuaJIT-2.0.4/doc/
    LuaJIT-2.0.4/doc/bluequad-print.css
    ....
    [root@centos6-3 software]# cd /usr/local/src/LuaJIT-2.0.4/
    [root@centos6-3 LuaJIT-2.0.4]# make && make install PREFIX=/usr/local/luajit
    ==== Building LuaJIT 2.0.4 ====
    make -C src
    ...
    [root@centos6-3 LuaJIT-2.0.4]# 
    

    4.4设置LuaJIT环境变量

    [root@centos6-3 LuaJIT-2.0.4]# vi /etc/profile
    //文件末尾追加以下内容
    export LUAJIT_LIB=/usr/local/luajit/lib
    export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
    //更新环境变量
    [root@centos6-3 LuaJIT-2.0.4]#  source /etc/profile
    [root@centos6-3 LuaJIT-2.0.4]# 
    

    4.5解压modules

    [root@centos6-3 LuaJIT-2.0.4]# mkdir -p /usr/local/nginx/modules
    [root@centos6-3 LuaJIT-2.0.4]# cd /export/software/
    [root@centos6-3 software]# mv set-misc-nginx-module-0.29.tar.gz /usr/local/nginx/modules/
    [root@centos6-3 software]# mv lua-nginx-module-0.10.0.tar.gz /usr/local/nginx/modules/
    [root@centos6-3 software]# mv ngx_devel_kit-0.2.19.tar.gz /usr/local/nginx/modules/
    [root@centos6-3 software]# mv echo-nginx-module-0.58.tar.gz /usr/local/nginx/modules/
    [root@centos6-3 software]# cd /usr/local/nginx/modules/
    [root@centos6-3 modules]# ll
    total 724
    -rw-r--r--. 1 root root  64779 Jun 26 08:38 echo-nginx-module-0.58.tar.gz
    -rw-r--r--. 1 root root 569372 Jun 26 08:41 lua-nginx-module-0.10.0.tar.gz
    -rw-r--r--. 1 root root  65029 Jun 26 08:38 ngx_devel_kit-0.2.19.tar.gz
    -rw-r--r--. 1 root root  35495 Jun 26 08:38 set-misc-nginx-module-0.29.tar.gz
    [root@centos6-3 modules]# tar -zxvf lua-nginx-module-0.10.0.tar.gz
    [root@centos6-3 modules]# tar -zxvf set-misc-nginx-module-0.29.tar.gz
    [root@centos6-3 modules]# tar -zxvf ngx_devel_kit-0.2.19.tar.gz
    [root@centos6-3 modules]# tar -zxvf echo-nginx-module-0.58.tar.gz
    [root@centos6-3 modules]# ll
    total 740
    drwxrwxr-x. 6 root root   4096 Jun 22  2015 echo-nginx-module-0.58
    -rw-r--r--. 1 root root  64779 Jun 26 08:38 echo-nginx-module-0.58.tar.gz
    drwxrwxr-x. 9 root root   4096 Jan 12  2016 lua-nginx-module-0.10.0
    -rw-r--r--. 1 root root 569372 Jun 26 08:41 lua-nginx-module-0.10.0.tar.gz
    drwxrwxr-x. 9 root root   4096 Sep 26  2013 ngx_devel_kit-0.2.19
    -rw-r--r--. 1 root root  65029 Jun 26 08:38 ngx_devel_kit-0.2.19.tar.gz
    drwxrwxr-x. 6 root root   4096 Jun 22  2015 set-misc-nginx-module-0.29
    -rw-r--r--. 1 root root  35495 Jun 26 08:38 set-misc-nginx-module-0.29.tar.gz
    [root@centos6-3 modules]# rm -rf *.tar.gz
    [root@centos6-3 modules]# ll
    total 16
    drwxrwxr-x. 6 root root 4096 Jun 22  2015 echo-nginx-module-0.58
    drwxrwxr-x. 9 root root 4096 Jan 12  2016 lua-nginx-module-0.10.0
    drwxrwxr-x. 9 root root 4096 Sep 26  2013 ngx_devel_kit-0.2.19
    drwxrwxr-x. 6 root root 4096 Jun 22  2015 set-misc-nginx-module-0.29
    [root@centos6-3 modules]# 
    

    4.6安装OpenResty

    [root@centos6-3 modules]# cd /export/software/
    [root@centos6-3 software]# ll
    total 5176
    -rw-r--r--. 1 root root  847615 Jun 26 08:38 LuaJIT-2.0.4.tar.gz
    -rw-r--r--. 1 root root  833473 Jun 26 08:38 nginx-1.8.1.tar.gz
    -rw-r--r--. 1 root root 3616491 Jun 26 08:40 openresty-1.9.7.3.tar.gz
    [root@centos6-3 software]# tar -zxvf openresty-1.9.7.3.tar.gz -C /usr/local/src/
    [root@centos6-3 software]# cd /usr/local/src/openresty-1.9.7.3/
    [root@centos6-3 openresty-1.9.7.3]# ./configure --prefix=/usr/local/openresty --with-luajit && make && make install
    [root@centos6-3 openresty-1.9.7.3]#
    

    4.7解压编译安装Nginx

    [root@centos6-3 openresty-1.9.7.3]# cd /export/software/
    [root@centos6-3 software]# ll
    total 5176
    -rw-r--r--. 1 root root  847615 Jun 26 08:38 LuaJIT-2.0.4.tar.gz
    -rw-r--r--. 1 root root  833473 Jun 26 08:38 nginx-1.8.1.tar.gz
    -rw-r--r--. 1 root root 3616491 Jun 26 08:40 openresty-1.9.7.3.tar.gz
    [root@centos6-3 software]# tar -zxvf nginx-1.8.1.tar.gz -C /usr/local/src/
    [root@centos6-3 software]# cd /usr/local/src/nginx-1.8.1/
    [root@centos6-3 nginx-1.8.1]# ./configure --prefix=/usr/local/nginx \
    > --with-ld-opt="-Wl,-rpath,/usr/local/luajit/lib" \
    > --add-module=/usr/local/nginx/modules/ngx_devel_kit-0.2.19 \
    > --add-module=/usr/local/nginx/modules/lua-nginx-module-0.10.0 \
    > --add-module=/usr/local/nginx/modules/set-misc-nginx-module-0.29 \
    > --add-module=/usr/local/nginx/modules/echo-nginx-module-0.58
    make -j2
    [root@centos6-3 nginx-1.8.1]# make install
    

    4.8启动检测安装

    [root@centos6-3 nginx-1.8.1]# cd /usr/local/nginx/
    [root@centos6-3 nginx]# ll
    total 20
    drwxr-xr-x. 2 root root 4096 Jul  3 17:09 conf
    drwxr-xr-x. 2 root root 4096 Jul  3 17:09 html
    drwxr-xr-x. 2 root root 4096 Jul  3 17:09 logs
    drwxr-xr-x. 6 root root 4096 Jul  3 16:59 modules
    drwxr-xr-x. 2 root root 4096 Jul  3 17:09 sbin
    [root@centos6-3 nginx]# ./sbin/nginx -c conf/nginx.conf
    [root@centos6-3 nginx]# 
    

    访问192.168.214.152(默认80端口)

    这里写图片描述

    后台日志处理Nginx服务器搭建成功!

    5.实施采集测试

    5.1编写index.html

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title>枣面包的面包坊</title>
    	
    		<script type="text/javascript">
    			var _maq = _maq || [];
    			_maq.push(['_setAccount', 'zaomianbao']);
    	 
    			(function() {
    				var ma = document.createElement('script'); 
    				ma.type = 'text/javascript';
    				ma.async = true;
    				ma.src = 'http://192.168.214.152/ma.js';
    				var s = document.getElementsByTagName('script')[0]; 
    				s.parentNode.insertBefore(ma, s);
    			})();
    		</script>	
    	</head>
    	<body>
    		<h1 align="center">枣面包的面包坊</h1>
    	</body>
    </html>
    

    5.2部署index.html和ma.js

    在192.168.214.150的Apache服务器部署index.html
    上传index.html到Apache目录下:/var/www/html
    注:Linux上传方式:三种方式实现Linux的文件上传下载

    [root@centos6-1 html]# rz
    rz waiting to receive.
    Starting zmodem transfer.  Press Ctrl+C to cancel.
    Transferring index.html...
      100%     568 bytes  568 bytes/sec 00:00:01       0 Errors  
    [root@centos6-1 html]# ls
    index.html
    [root@centos6-1 html]#
    

    在192.168.214.152的Nginx服务器部署ma.js
    上传ma.js到Nginx目录下:/usr/local/nginx/html

    [root@centos6-3 html]# rz
    rz waiting to receive.
    Starting zmodem transfer.  Press Ctrl+C to cancel.
    Transferring ma.js...
      100%       1 KB       1 KB/sec    00:00:01       0 Errors  
    
    [root@centos6-3 html]# ll
    total 11
    -rw-r--r--. 1 root root  537 Jul  3 17:09 50x.html
    -rw-r--r--. 1 root root 1249 Jul  3  2018 ma.js
    

    5.3修改Nginx配置文件

    将nginx.conf文件修改成上面3.5的内容,这里不做重复,读者在按照博主上面系统环境搭建部署完成后,可以直接复制配置内容使用,可以不必对配置中使用到的lua语义过分深究

    5.4启动Apache,Nginx

    启动192.168.214.150下的Apache

    [root@centos6-1 html]# httpd
    [root@centos6-1 html]# ps -ef|grep httpd
    root      42392      1  0 19:41 ?        00:00:00 httpd
    apache    42393  42392  0 19:41 ?        00:00:00 httpd
    apache    42394  42392  0 19:41 ?        00:00:00 httpd
    apache    42395  42392  0 19:41 ?        00:00:00 httpd
    apache    42396  42392  0 19:41 ?        00:00:00 httpd
    apache    42397  42392  0 19:41 ?        00:00:00 httpd
    apache    42398  42392  0 19:41 ?        00:00:00 httpd
    apache    42399  42392  0 19:41 ?        00:00:00 httpd
    apache    42400  42392  0 19:41 ?        00:00:00 httpd
    root      42404  42010  0 19:42 pts/0    00:00:00 grep httpd
    [root@centos6-1 html]# 
    

    启动192.168.214.152下的Nginx

    [root@centos6-3 nginx]# sbin/nginx -c conf/nginx.conf
    [root@centos6-3 nginx]# ps -ef|grep nginx
    root      50763      1  0 19:31 ?        00:00:00 nginx: master process sbin/nginx -c conf/nginx.conf
    nobody    50764  50763  0 19:31 ?        00:00:00 nginx: worker process        
    nobody    50765  50763  0 19:31 ?        00:00:00 nginx: worker process        
    root      50792  50325  0 19:43 pts/0    00:00:00 grep nginx
    

    5.5请求测试观察

    在192.168.214.152的nginx目录下执行命令实时观察日志变化

    [root@centos6-3 nginx]# tail -f logs/user_defined.log 
    

    页面访问192.168.214.150的index.html页面触发
    这里写图片描述
    发现请求到了ma.js文件,同时发送了log.gif请求并且状态为200,即请求成功。再去刚才实时观察的shell窗口发现日志已经被收集

    [root@centos6-3 nginx]# tail -f logs/user_defined.log
    1530618381.695||192.168.214.1||200||0||192.168.214.150||http://192.168.214.150/||\xE6\x9E\xA3\xE9\x9D\xA2\xE5\x8C\x85\xE7\x9A\x84\xE9\x9D\xA2\xE5\x8C\x85\xE5\x9D\x8A||||1050||1680||24||en-US||Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36||zaomianbao
    

    6.总结

    到这里一个整体的结构就成功构建好了,后面使用就行了,当然,这里只有访问页面的触发,并没有添加用户点击事件,这个留给读者在使用中根据业务添加即可。以上内容并没有假如日志切分的展现,读者直接添加即可。本篇博客的架构设计经过优化是可以运用到生产实际当中的。如有错误,欢迎指正。


    参考资料:

    http://openresty.org/en/
    http://nginx.org/en/download.html
    https://blog.csdn.net/weixin_37490221/article/details/80849163
    http://www.lua.org/about.html
    http://www.runoob.com/lua/lua-tutorial.html
    以及博主学习使用的PDF文档
    
    展开全文
  • 日志服务数据的开放性以及与云产品、开源社区相结合,在实时计算、可视化、采集上为用户提供的丰富选择。 Kubernetes容器技术促进了技术栈的去耦合,通过引入栈的分层使得开发者可以更加关注自身的应用程序和业务...
  • 目录1 概述1.1 页面浏览日志采集1.2 页面交互日志采集2 页面浏览日志采集流程2.1 页面访问过程3 页面交互日志采集流程 1 概述 浏览器的页面日志采集分两大类:页面浏览日志采集、页面交互日志采集。 1.1 页面浏览...

    1 概述

    浏览器的页面日志采集分两大类:页面浏览日志采集、页面交互日志采集。

    1.1 页面浏览日志采集

    1. 页面浏览日志采集指采集当一个页面被浏览器加载呈现时的日志;
    2. 此类日志是最基础的互联网日志,也是当前所有互联网产品的两大基本指标:页面浏览量(Page View,PV)和访客数(Unique Visitors,UV)的统计基础;
    3. 页面浏览日志是目前成熟度和完备度最高、同时也是最具挑战性的日志采集任务;

    1.2 页面交互日志采集

    1. 当页面加载和渲染完成后,用户可以在页面上执行各类操作;
    2. 随着前端技术的发展,用户在浏览器上与网页的互动越来越丰富,互动设计要求用户的互动行为数据,以便通过量化获知用户的兴趣点和体验优化点;
    3. 交互日志采集就是因此类业务场景而生的;

    2 页面浏览日志采集流程

    2.1 页面访问过程

    概述

    1. 典型的页面访问过程是以浏览器请求、服务器响应并返回所请求的内容(大多以HTML文档的形式)这种模式进行的;
    2. 浏览器和服务器之间的通信普遍遵守HTTP协议(超文本传输协议,目前以HTTP1.1为主,逐渐向最新的HTTP2.0过渡);
    3. 浏览器发起的请求被称为HTTP请求(HTTP Request),服务器的返回则被称为HTTP响应(HTTP Response);

    示例:访问淘宝首页

    在这里插入图片描述

    1. 用户在浏览器内点击淘宝首页链接(或在地址栏输入www.taobao.com并回车);
    2. 浏览器向淘宝服务器发起HTTP请求。在本例中,用户可以看见的内容只是显示在浏览器地址栏内的http://www.taobao.com,而浏览器在执行时,会解析用户请求并按照HTTP协议中约定的格式将其转化为一个HTTP请求发送出去,一个标准HTTP请求由以下三部分构成:
      1. 请求行(HTTP Request Line):请求行内有三个要素,分别是请求方法、所请求资源的URL及HTTP协议版本号。在本例中,三者分别是GET、http://www.taobao.com/以及HTTP1.1;
      2. 请求报头(HTTP Message Header):请求报头是浏览器在请求时向服务器提交的附加信息,请求报头一般会附加很多内容项,每项内容被称为一个头域(Header Field)。如果用户在本次页面访问之前已经到访过网站或者已经登录,则一般都会在请求头中附加一个或多个被称为Cookie的数据项,其中记录了用户上一次访问时的状态或身份信息;
      3. 请求正文(HTTP Message Body):这部分可选,一般而言,HTTP请求的正文都是空的,可以忽略;
    3. 服务器接收并解析请求。服务器端业务处理模块按业务逻辑处理本次请求并按照HTTP协议规定的格式,将处理结果以HTTP响应形式发回浏览器。一个标准的HTTP响应也由三部分组成:
      1. 状态行。状态行标识了服务器对于此次HTTP请求的处理结果,状态行内的主要内容是一个由三位数字构成的状态码,例如代表成功响应的200(OK)和代表请求资源没有找到的404(Not Found);
      2. 响应报头。服务器在执行响应时,同样可以附加一些数据项,这些数据项将在浏览器端被读取和使用,响应报头内的内容在确保页面正确显示和业务正常进行方面发挥着重要作用。其中最重要的一类Header即上面提到的Cookie,浏览器记录的Cookie,其实是由服务器在响应报头内指令浏览器记录的。如果用户在页面登录,则服务器会在登录请求的响应报头内指示浏览器新增一个名为userid的Cookie项,其中记录了登录用户的id。如此一来,当用户随后再次访问该网站时,浏览器将自动在请求报头内附加这个Cookie,服务器由此即可得知本次请求对应的用户是谁;如果服务器发现浏览器在请求时传递过来的Cookie有缺失、错误或需要更新,则会在响应报头内指令浏览器增加或更新对应的Cookie;
      3. 响应正文。浏览器请求的文档、图片、脚本等,就是被包装在正文内返回浏览器的。本例中,服务器会将淘宝首页对应的HTML文档封装在正文内;
    4. 浏览器接收到服务器的响应内容,并将其按照文档规范展现给用户,从而完成一次请求。在本例中,浏览器请求淘宝首页,服务器返回对应的HTML文档,浏览器即按照HTML文档规范解析文档并将整个页面渲染在屏幕上。

    2.2 日志采集思路

    1. 上面描述了一次典型的网页浏览过程,如果需要记录这次浏览行为,则采集日志的动作必然是附加在上述四个步骤中的某环节内完成的。在第一步和第二步,用户的请求尚未抵达服务器;而直到第三步完成,我们也只能认为服务器处理了请求,不能保证浏览器能够正确地解析和渲染页面,尚不能确保用户已确实打开页面,因此在前三步是无法采集用户的浏览日志的。那么采集日志的动作,需要在第四步,也就是浏览器开始解析文档时才能进行;
    2. 思路:在 HTML 文档内的适当位置增加一个日志采集节点,当浏览器解析到这个节点时,将自动触发一个特定HTTP 请求到日志采集服务器。如此一来,当日志采集服务器接收到这个请求时,就可以确定浏览器已经成功地接收和打开了页面。

    2.3 日志采集方案

    1. 客户端日志采集。日志采集工作由一小段被植入页面HTML 文档内的JavaScript 脚本来执行。采集脚本被浏览器加载解析后执行,在执行时采集当前页面参数、浏览行为的上下文信息(如读取用户访问当前页面时的上一步页面)以及一些运行环境信息(如当前的浏览器和分辨率等)。在 HTML 文档内植入日志采集脚本的动作可以由业务服务器在响应业务请求时动态执行,也可以在开发页面时由开发人员手动植入;
      在这里插入图片描述
    2. 客户端日志发送。采集脚本执行时,会向日志服务器发起请求,以将采集到的数据发送到日志服务器。在大多数情况下,采集完成之后会立即执行发送;但在个别场景下,日志采集之后可能会经过一段时间的延迟才被发出。日志采集和发送模块一般会集成在同一个JavaScript 脚本文件内,且通过互联网浏览器必然支持的 HTTP 协议与日志服务器通信,采集到的日志信息一般以 URL 参数形式放在 HTTP日志请求的请求行内;
    3. 服务器端日志收集。日志服务器接收到客户端发来的日志请求后,一般会立即向浏览器发回一个请求成功的响应,以免对页面的正常加载造成影响;同时,日志服务器的日志收集模块会将日志请求内容写入一个日志缓冲区内,完成此条浏览日志的收集;
    4. 服务器端日志解析存档。服务器接收到的浏览日志进人缓冲区后,会被一段专门的日志处理程序顺序读出并按照约定的日志处理逻辑解析。由日志采集脚本记录在日志请求行内的参数,将在这个环节被解析(有时候伴随着转义和解码)出来,转存入标准的日志文件中并注入实时消息通道内供其他后端程序读取和进一步加工处理;

    3 页面交互日志采集流程

    1. PV日志的采集解决了页面流量和流量来源统计的问题,但随着互联网业务的发展,仅了解用户到访过的页面和访问路径,已经远远不能满足用户细分研究的需求;
    2. 在很多场合下,需要了解用户在访问某个页面时具体的互动行为特征,比如鼠标或输入焦点的移动变化(代表用户关注内容的变化)、对某些页面交互的反应(可借此判断用户是否对某些页面元素发生认知困难)等;
    3. 由于这些行为往往并不触发浏览器加载新页面,所以无法通过常规的日志采集方法来收集;
    4. 阿里通过一套名为“黄金令箭”的采集方案来解决交互日志的采集问题;
    5. 因为终端类型页面内容、交互方式和用户实际行为的千变万化不可预估,交互日志的采集和日志的采集不同,无法规定统一的采集内容,呈现出高度自定义的业务特征。与之相适应,在阿里巴巴的日志采集实践中,交互日志的采集(即“黄金令箭”)是以技术服务的形式呈现的;

    具体而言,“黄金令箭”是一个开放的基于 HTTP 协议的日志服务,需要采集交互日志的业务(下文简称“业务方”),经过如下步骤即可将自助采集的交互日志发送到日志服务器:

    1. 业务方在“黄金令箭”的元数据管理界面依次注册需要采集交互日志的业务、具体的业务场景以及场景下的具体交互采集点,在注册完成之后,系统将生成与之对应的交互日志采集代码模板;
    2. 业务方将交互日志采集代码植入目标页面,并将采集代码与需监测的交互行为做绑定;
    3. 当用户在页面上产生指定行为时,采集代码和正常的业务互动代码一起被触发和执行;
    4. 采集代码在采集动作完成后将对应的日志通过 HTTP 协议发送到日志服务器,日志服务器接收到日志后,对于保存在 HTTP 请求参数部分的自定义数据(即用户上传的数据),原则上不做解析处理,只做简单的转储;
    5. 经过上述步骤采集到日志服务器的业务随后可被业务方按需自行解析处理,并可与正常的 PV 日志做关联运算;

    4 页面日志的服务器端清洗和预处理

    上面介绍了阿里巴巴的两类浏览器页面日志的采集方案,并粗略介绍了日志到达日志服务器之后的解析处理。但在大部分场合下,经过上述解析处理之后的日志并不直接提供给下游使用。基于如下几个原因,对时效要求较宽松的应用场合下,一般还需要进行相应的离线预处理:

    1. 识别流量攻击、网络爬虫和流量作弊(虚假流量)。页面日志是互联网分析和大数据应用的基础源数据,在实际应用中,往往存在占一定比例的虚假或者恶意流量日志,导致日志相关指标的统计发生偏差或明显谬误。为此,需要对所采集的日志进行合法性校验,依托算法识别非正常的流量并归纳出对应的过滤规则集加以滤除。这是一个长期而艰苦的对抗过程;
    2. 数据缺项补正。为了便利后续的日志应用和保证基本的数据统计口径一致,在大多数情况下,需要对日志中的某些公用且重要的数据项做取值归一、标准化处理或反向补正。反向补正,即根据新日志对稍早收集的日志中的个别数据项做回补或修订(例如,在用户登录后,对登录前页面日志做身份信息的回补);
    3. 无效数据剔除。在某些情况下,因业务变更或配置不当,在采集到的日志中会存在一些无意义、已经失效或者冗余的数据项。这些数据项不仅消耗存储空间和运算能力,而且在偶然的情况下还可能干扰正常计算的进行。为了避免此类异常的发生,需要定时检查配置并依照配置将此类数据项剔除;
    4. 日志隔离分发。基于数据安全或者业务特性的考虑,某些日志在进入公共数据环境之前需要做隔离;

    原始日志经过上述的清洗、修正,并结构化变形处理之后, Web页面日志的采集流程就算完成了。此时的日志已经具备了结构化或者半结构化的特征,可以方便地被关系型数据库装载和使用。

    展开全文
  • 日志采集之移动端日志采集

    千次阅读 2019-10-31 09:11:45
    2)移动端日志采集通过采集SDK完成,根据不同的用户行为分成不同的事件,事件是移动端日志采集的最小单位,基于常用的分析,把事件分为页面事件和控件点击事件等。 页面事件: 1)SDK提供三个接口,三种接口配合...

    移动端日志采集:
    1)除了web页面日志采集的相关内容来提升用户体验外,还需要采集各种设备信息,以及各种设备的运行情况,协助开发者分析各类设备特有问题

    2)移动端日志采集通过采集SDK完成,根据不同的用户行为分成不同的事件,事件是移动端日志采集的最小单位,基于常用的分析,把事件分为页面事件和控件点击事件等。

    页面事件:
    在这里插入图片描述
    1)SDK提供三个接口,三种接口配合使用:

    ①页面展现接口,在进入页面时调用,记录相关状态信息

    ②页面扩展信息接口,给记录添加相关参数

    ③页面退出接口,在点击详情页 / 点击返回 / 退出软件时调用,用于发送日志给采集服务器

    2) 渗透参数:把当前页面的某些信息传递到之后浏览的页面,用于用户行为路径的还原。

    控件事件:
    1)采集用户交互信息,只需要把控件相关信息告诉采集SDK即可,具体包括:

    在这里插入图片描述
    2)用户自定义埋点类:包含事件名称、事件时长、事件携带的属性、事件对应的页面

    3)采集SDK默认埋点:包含自动捕捉应用崩溃、自动捕捉应用退出、自动捕捉应用前后台切换等与业务不相关但对于分析存在价值的数据捕捉

    特殊场景:
    在日志数据量巨大时,为了减少采集请求次数、采集服务器的压力以及网络压力,常常在采集SDK利用页面的生命周期进行聚合并选择适当的时机向采集服务器发送聚合请求。

    案例说明:购物主会场页面 >> 女装分会场 >> 女装店铺A >> (返回)女装分会场 >> 女装店铺B

    存在问题:第二次女装分会场的来源会被识别为女装店铺A,干扰用户行为分析

    解决方法:利用页面生命周期,识别页面复用,配合栈来识别是否是回退行为

    H5 & Native 日志:

    1)app分两种:

    ① Native app:纯app页面

    ② Hybrid app: 既有Native app页面,也有H5嵌入app

    2)由于Native页面与H5页面的采集方式、采集的内容以及采集服务器均分离开,需要对两种数据进行关联后在统一分析

    3)考虑到采集SDK可以采集更多移动设备信息;采集SDK 采集到数据后先还存在本地再择机请求,选择把H5日志归一到Native页面的方式

    H5 & Native 日志统一流程:
    1)H5特面中的日志采集与浏览器页面采集完全相同

    2)浏览器把javascript脚本采集到的数据打包成对象,调用WebView框架的JSBridge接口,把数据对象当作参数传入移动端采集SDK

    3)采集SDK把传入的对象数据转换成移动端日志格式,在app端统一进行日志处理缓存到本地然后择机上传

    日志传输:
    1)采集SDK日志收集完日志之后,进行日志择机上传:

    在这里插入图片描述
    2)移动端数据通过post请求发送给服务器,服务器对数据进行验证后,以Nginx的access_log方式存储

    3)考虑到后续数据处理以及特定时期的日志级别保障,根据应用、日志类型对日志数据进行分流。分流的好处在于双十一等日志数据量巨大的时期,可以集中资源处理日志级别高的日志数据。

    展开全文
  • 只要你输入一个QQ空间日志的地址,就能够采集出在这篇日志中点过赞的、转载过的、留言过的QQ用户
  • 日志采集用户行为链路跟踪

    万次阅读 2017-08-22 09:20:23
    日志采集这部分内容,其实在上一篇文章 阿里巴巴大数据实践-读书笔记 里面多多少少已经提到了一些。不过正如前文提到的,这部分内容,从技术的角度来说,未必有多么高深,但是从业务角度来说,要做到完善却也很难...
  • 兼容神策开源埋点SDK,采用Nginx+Flume+kafka实现日志收集。包括nginx环境配置、Flume解密和日志格式处理、将明文数据存放到kafka的Topic下、Flink写入HDFS。
  • 日志采集之浏览器日志采集

    千次阅读 2019-10-31 09:08:55
    2)页面交互日志采集:用来获取用户兴趣或者优化用户体验 页面请求流程: 1)用户在浏览器地址栏输入地址:如淘宝 2)浏览器解析用户请求,按照HTTP协议中约定的格式将请求转化为HTTP请求发送给淘宝服务器 一个标准...
  • 日志采集的几种方式

    千次阅读 2020-05-06 15:06:59
    而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。本文通过几个实例来介绍如何通过filebeat、logstash、rsysl...
  • 基于Kafka的服务端用户行为日志采集

    千次阅读 2018-09-03 14:22:14
    本文来自网易云社区作者:李勇背景随着互联网的不断发展,用户所产生的行为数据被越来越多的网站重视,那么什么是用户行为呢?所谓的用户行为主要由五种元素组成:时间、地点、人物、行为、行为对应的内容。为什么要...
  • 一种日志采集装置和日志采集方法

    千次阅读 2016-01-09 10:42:29
    本发明涉及一种日志采集装置和方法。其中装置包括至少一个用于日志收集的客户端和至少一个用于日志记录的服务器;所述客户端和服务器之间通过网络进行实时的日志信息发送。方法包括:客户端生成日志信息并将日志信息...
  • 针对如何采集必要的日志数据同时尽可能降低其运行期开销的问题,文章首先提出日志采集粒度的概念,然后设计并编程实现一个面向云计算的粒度自配置日志采集平台。其中,平台构成模块包括:日志采集工具、存储日志采集粒度...
  • 系统日志采集方法

    千次阅读 2020-07-18 22:53:30
    系统日志采集方法特征 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦。 支持近实时的在线分析系统和分布式并发的离线分析系统。 具有高可扩展性,也就是说,当数据量增加时,可以通过增加节点进行水平扩展...
  • Flume日志采集

    万次阅读 多人点赞 2018-08-08 15:21:36
    目录 一 前言 ...3.2 Flume采集结构图 3.2.1 简单结构 3.2.2 复杂结构 4 Flume实战案例 4.1 Flume的安装部署 4.2 采集案例 4.2.1 采集目录到HDFS 4.2.2 采集文件到HDFS 4.3 更多source和si...
  • 绿盟日志审计系统用户手册-V2.0R00F02.pdf
  • 小程序获取用户的操作轨迹日志

    万次阅读 2018-12-29 18:09:54
    用户操作轨迹的日志 log: 传给后端的数据参数说明: 参数 参数说明 pagePath 页面路径 intoId 进入小程序的场景值ID originId 来源ID userToken 用户标识 upTime 上传信息的时间戳 userTrajectoryArr 用户操作轨迹...
  • 日志采集系统都用到哪些技术?

    千次阅读 2020-06-18 08:50:00
    点击上方“朱小厮的博客”,选择“设为星标”后台回复"加群",加入新技术来源:8rr.co/85Mc概述日志从最初面向人类演变到现在的面向机器发生了巨大的变化。最初的日志主...
  • 好久没写博客了,做了一段时间的日志采集和流处理,总结一下自己的工作吧。本人只涉及了日志埋点流处理,监控系统相关的内容不在本文,我也没有涉及到。 很有幸的是,在大数据前我负责了内部 debezium 相关的维护...
  • 第二部分将分别详细介绍基于Fluentd的Sidecar模式日志采集部署方案和基于filebeat集成应用基础镜像的日志采集方案。注意:本文重心在于介绍容器内应用日志的收集方案,并不针对于对于容器引擎或者kubernetes本生系统...
  • 我在使用spring完成项目的时候需要完成记录日志,我开始以为Spring 的AOP功能,就可以轻松解决,半个小时都不用,可是经过一番了解过后,发现一般的日志记录,只能记录一些简单的操作,例如表名、表名称等记录不到。...
  • 通过系统日志采集大数据

    千次阅读 2019-06-25 21:59:58
    许多公司的平台每天都会产生大量的日志,并且一般为流式数据,如搜索引擎的 pv 和查询等。处理这些日志需要特定的日志系统,这些系统需要具有以下...目前使用最广泛的、用于系统日志采集的海量数据采集工具有 Had...
  • Android 自定义优质精准的用户行为和日志打捞方案说到app优化方案,大家很可能第一想到关于GPU和CPU渲染问题,而这两大方案确实是优化app的两把尖刀,让一个app提升用户量和体验度有较高的推动力。然后在我们无法...
  • 基于Flume的日志采集

    2019-04-03 18:12:14
    大数据系统中通常需要采集日志有: 系统访问日志 用户点击日志 其他业务日志(比如推荐系统的点击日志) 在收集日志的时候,一般分为三层结构:采集层、汇总层和存储层,而不是直接从采集端将数据发送到存储端...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,655
精华内容 21,062
关键字:

用户日志采集