访客路径分析-Druid实践

Alibaba Druid未授权访问漏洞记录(敏感目录,端口:不确定) 1.Druid是阿里巴巴数据库事业部出品,为监控而生的数据库连接池.2.Druid提供的监控功能,监控SQL的执行时间、监控Web URI的请求、Session监控. 阅读详情

一、背景

这里写图片描述

访客分析是常见数据分析的一种,通过如上图(Google Analytics)以比较直观的方式展现用户达到网站后各条访问路径的流失情况,帮助网站优化减少流失率。

访客路径分析有如下几个关键点:

  • 用户访问的路径通常有多级,默认展开包含着陆页在内的5级路径,支持往后每点击一次展开一级路径(最高支持到10级,再往后意义不大)。
  • 每级只展示top 5访问数的网页,每级路径网页之间连接线表示跳转情况。
  • 指标包含top 5网页的会话数、流失数和剩余网页的会话数。

通过上述分析,要实现访客路径分析需要完成如下几项工作:

  1. 计算每一级所有网页的会话总数。
  2. 计算每一级会话数top 5的网页。
  3. 计算每一级两两网页之间的跳转访问数。

本文提出一种基于druid的实现方案,将上述3个查询转化为druid中的Timeseries(求总数)、TopN(求前5)、GroupBy(求两两关联)查询。

二、技术方案

数据清洗(ETL)
将用户pv流水根据,聚合成一个session会话。session会话内用户的访问流水按时间排序,取前11个分别放于维度landing_page ~ path10,ETL处理后的数据表格示例如下:

hostlanding_pagepath1path2…path10
www.xxx.com/index.html/a/b…/e
www.xxx.com/product.html/c/d…null

数据入Druid供查询,schema设计如下

{
  "type" : "index_hadoop",
  "spec" : {
    "ioConfig" : {
      "type" : "hadoop",
      "inputSpec" : {
        "type" : "static",
        "paths" : ""
      }
    },
    "dataSchema" : {
      "dataSource" : "",
      "granularitySpec" : {
        "type" : "uniform",
        "segmentGranularity" : {"type":"period","period":"P1D","timeZone":"Asia/Shanghai"},
        "queryGranularity" : {"type":"period","period":"P1D","timeZone":"Asia/Shanghai"},
        "intervals" : []
      },
      "parser" : {
        "type" : "string",
        "parseSpec" : {
          "format" : "json",
          "dimensionsSpec" : {
            "dimensions": [
              "host",
              "landing_page",
              "path1",
               ...
              "path10"
            ]
          },
          "timestampSpec" : {
            "format" : "auto",
            "column" : "time"
          }
        }
      },
      "metricsSpec": [
        {
          "name": "count",
          "type": "count"
        }
      ]
    },
    "tuningConfig" : {
      "type" : "hadoop",
      "partitionsSpec" : {
        "type" : "hashed",
        "targetPartitionSize" : 5000000
      },
      "indexSpec" : {
        "bitmap" : { "type" : "roaring"},
        "dimensionCompression":"LZ4",
        "metricCompression" : "LZ4",
        "longEncoding" : "auto"
      }
    }
  }
}

三、具体实践

查询语句示例
计算每一级所有网页的会话总数(默认展示前5级),过滤掉为null的情况(用户只访问到上一级就跳出)。
{
  "queryType": "timeseries",
  "dataSource": "visit_path_analysis",
  "granularity": "all",
  "filter": {
    "type": "and",
    "fields": [{"type": "selector", "dimension": "host", "value": "www.xxx.com"}]
  },
  "aggregations": [
    { 
      "type": "filtered",
      "filter": { 
        "type": "not", 
        "field": { "type": "selector", "dimension": "landing_page", "value": null }
      },
      "aggregator": { "type": "longSum", "name": "count0", "fieldName": "count" }
    },
    { 
      "type": "filtered",
      "filter": {
        "type": "not", 
        "field": { "type": "selector", "dimension": "path1", "value": null }
      },
      "aggregator": { "type": "longSum", "name": "count1", "fieldName": "count" }
    },
    {
      "type": "filtered",
      "filter": {
        "type": "not", 
        "field": { "type": "selector", "dimension": "path2", "value": null }
      },
      "aggregator": { "type": "longSum", "name": "count2", "fieldName": "count" }
    },
    { 
      "type": "filtered",
      "filter": { 
        "type": "not", 
        "field": { "type": "selector", "dimension": "path3", "value": null }
      },
      "aggregator": { "type": "longSum", "name": "count3", "fieldName": "count" }
    },
    { 
      "type": "filtered",
      "filter": { 
        "type": "not", 
        "field": { "type": "selector", "dimension": "path4", "value": null }
      },
      "aggregator": { "type": "longSum", "name": "count4", "fieldName": "count" }
    }
  ],
  "intervals": []
}
计算每一级会话数top5的网页,过滤掉为null的情况(用户只访问到上一级就跳出)。
{
  "queryType": "topN",
  "dataSource": "visit_path_analysis",
  "granularity": "all",
  "dimension": "landing_page",
  "filter": {
    "type": "and",
    "fields": [
      {"type": "selector", "dimension": "host", "value": "www.xxx.com"},
      {
        "type": "not", 
        "field": { "type": "selector", "dimension": "landing_page", "value": null }
      }
    ]
  },
  "threshold": 5,
  "metric": {
    "type": "numeric",
    "metric": "count"
  },
  "aggregations": [{ "type": "longSum", "name": "count", "fieldName": "count" }],
  "intervals": []
}
计算每一级两两网页之间的跳转访问数,后一级的null用来计算流水数。
{
  "queryType": "groupBy",
  "dataSource": "visit_path_analysis",
  "granularity": "all",
  "dimensions": ["landing_page", "path1"],
  "filter": {
    "type": "and",
    "fields": [
      {"type": "selector", "dimension": "host", "value": "www.xxx.com"},
      {
        "type": "in",
        "dimension": "landing_page",
        "values": ["/a", "/b", "/c", "/d", "e"]
      },
      {
        "type": "in",
        "dimension": "path1",
        "values": ["/f", "/g", "/h", "/i", "/j", null]
      }
    ]
  },
  "aggregations": [{ "type": "longSum", "name": "count", "fieldName": "count" }],
  "intervals": []
}

四、总结分析

本文提出基于Druid来做访客路径分析的方案需由多个请求来完成。

  • 计算每一级所有网页的会话总数和计算每一级会话数top5的网页,在默认展示的时候可以先并行向druid发起请求。获取每级总会话数后再减去top5的会话数就是剩余其他网页的会话数。

  • 当得到每一级top5的路径后,只需要相邻两级路径做GroupBy查询即可获得转化数与流水数。

  • 当需要展示往后一级路径流转时,只需要基于当前最后一级的top5与下一级别top5做GroupBy计算即可。

  • 从数据分布来看,大部分流水集中在前几步,往后有数据级的差距。

  • 该方案最大挑战来着对Druid的并发请求,一个页面展示会扩大为多个Druid并发语句请求。

代码实现ROS2bag录制数据和回放数据(C++) ROS2的ROS2bag功能可以将指定Topic中的数据以.db3的格式(不同于ROS)保存到本地文件中。读取文件数据可以实现数据回放。 阅读详情

相关推荐

保姆级教程:用杰理701N可视化SDK搞定ANC降噪配置(从工具到代码全流程)

本文提供了一份详细的杰理701N可视化SDK配置ANC降噪功能的教程,涵盖从开发环境搭建到代码集成的全流程。通过图形化工具和代码示例,帮助开发者快速掌握ANC参数配置技巧,优化降噪效果,解决常见问题。

weixin_30616969的博客 450

Druid(德鲁伊)数据库连接池

忙忙碌碌

weixin_49756058的博客 967

S7-1200控制S120变频器

②:硬件目录下,添加实物S120设备进行组态(其它现场设备--PROFINET IO--DRIVES......②:双击S120进行IP地址和设备名称设置(注:此处要与STATER软件设置S120一致)M10.0接通时,电机开始运行,M10.0断开,电机停止,调试完成。①:将S7-1200与S120进行通讯连线。④:STATER软件下设置与组态一致的报文。①:点击添加新设备,按实物进行设备组态。②:打开OB1,编写启动停止程序。①:查看S120报文地址。②:模块下添加DO矢量。③:子模块下添加报文。

weixin_38261173的博客 4867

SpringBoot数据访问之Druid数据源的使用

数据源是提高数据库连接性能的常规手段,数据源会负责维持一个数据连接池,当程序创建数据源实例时,系统会一次性地创建多个数据库连接,并把这些数据库连接保存在连接池中。 ​ 当程序需要进行数据库访问时,无须重新获得数据库连接,而是从连接池中取出一个空闲的数据库连接。 ​ 当程序使用数据库连接访问数据库结束后,无须关闭数据库连接,而是将数据库连接归还给连接池即可。 ​ 通过这种方式,就可避免频繁地获取数据库连接、关闭数据库连接所导致的性能下降

2401_83384536的博客 2404

网络工程师的Python入门实战:手把手教你写交换机配置备份脚本

本文详细介绍了如何利用Python为网络工程师开发一个高效的交换机配置备份脚本,涵盖环境搭建、设备连接方案、智能设备发现、多因素认证、异常处理、配置差异对比等关键步骤。通过实战案例展示如何将备份时间从4小时缩短至15分钟,显著提升运维效率,特别适用于华为交换机等设备的配置导出与备份需求。

weixin_30291791的博客 304

从d、q轴电流到电机性能:FOC控制中角度偏移的实战影响与调试策略

本文深入探讨了永磁同步电机FOC控制中d、q轴电流与角度偏移对电机性能的影响及调试策略。通过分析角度偏移导致的效率下降、电流异常等问题,提供了实用的四步调试法和参数优化技巧,帮助工程师有效提升电机控制精度和效率。

weixin_29264201的博客 294

解决Maven中Druid加载properties文件找不到路径问题

然后在使用类加载器将properties文件流对象加载为properties对象。方案是将properties文件放在src/main/resoure的目录下。

weixin_55354507的博客 465

华为OD技术面八股文_C++_01

汇总华为OD技术面C++方向八股文真题,并提供详细解答。

qq_45776114的博客 1884

阿里数据库连接池 druid 配置详解

1.1Druid概念: Druid(德鲁伊)是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid地址:https://github.com/alibaba...

huangyh技术栈 2930

【C++】ROS:ROS1环境配置与基础示例

ROS1环境配置与基础示例

DevFrank的博客 2103

车载以太网:PHY(物理层)介绍

本文以TJA1101芯片为实例介绍了车载以太网PHY(物理层)组成。

kevin1499的博客 6231

JDBC之德鲁伊连接池(Druid)介绍下载,配置,使用

数据库连接池是一个存储数据库连接的缓冲区,用于重复使用这些连接,以避免在每次请求时都创建新的数据库连接。连接到数据库的过程是相对耗时的,因此连接池可以显著提高应用程序的性能。它们还有助于防止应用程序超负荷地创建太多数据库连接,从而减轻数据库服务器的负担。Druid是一个功能强大且高性能的JDBC数据库连接池,它提供了丰富的功能和配置选项。通过使用Druid连接池,您可以更有效地管理数据库连接,提高应用程序性能,并且可以监控数据库连接的使用情况。

qq_71443736的博客 3715

我装了10个ClawHub技能,这些最好用!

ClawHub就是Clawdbot的"应用商店"。Clawdbot是手机ClawHub是App Store技能就是各种App装了技能,Clawdbot才能干更多事。这个技能解决了我的信息过载问题。为什么装我订阅了很多Newsletter。每天收到一堆长文章,根本看不完。怎么用“总结这篇文章的核心观点”“把这个Newsletter提炼成3个要点”“这篇技术博客有哪些可以实践的建议?安装命令真实体验现在我收到长文章,直接转发给Clawdbot。它会提炼出核心要点和行动清单。

Maynor的博客 6100

Apache Druid教程:使用Theta Sketch进行近似计数分析

在实时数据分析领域,精确计算唯一值(如独立访客数)一直是个挑战。传统方法需要扫描全部原始数据,这在数据量巨大时会严重影响查询性能。Apache Druid通过Theta Sketch技术提供了一种高效的近似解决方案,本文将深入解析其原理和应用。 ## 核心问题:大数据场景下的基数统计 假设我们需要分析电视剧观看情况: - 第一集有1000名独立观众 - 第二集有800名独立观众 传统方法无法

gitblog_00667的博客 377

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

在线教育之采集系统 day01

本文介绍了数据仓库的基本概念及在线教育数据分析项目的整体架构设计。数据仓库主要整合业务数据、用户行为数据等为企业决策提供支持。项目需求包括搭建数据采集平台(用户行为数据和业务数据)、构建数据仓库、开发近百个教育主题分析指标,并实现即席查询、集群监控等功能。技术选型涵盖数据采集(Flume/Kafka)、存储(HDFS/HBase)、计算(Hive/Spark)、查询(Presto)等全流程组件,采用Apache开源框架。

记录学习点滴,分享实战干货,一起奔赴技术之路 258

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

druid连接池访问地址(监控平台)

druid连接池访问地址(监控平台) http://localhost:8080/项目名/druid/login.html

此时彼刻的蜗牛 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

配置Druid的监控页面和WebStatFilter,以通过指定的路径访问Druid的监控页面,并且采集web-jdbc关联监控的数据

综合来说,这段代码的作用是配置Druid的监控页面和WebStatFilter,使得可以通过指定的路径访问Druid的监控页面,并且采集web-jdbc关联监控的数据。将其注册到Servlet容器中,设置了URL模式为 "/*",并且设置了一些排除项,例如排除了一些静态资源和Druid监控页面的访问路径。同时,设置了监控页面的登录用户名和密码为 "admin" 和 "123456"。这样的配置方式更加直观和易于理解,可以方便地配置Druid的监控页面和过滤器功能。方法用于配置Druid的监控页面功能。

qq_61818443的博客 3073

druid uri不显示访问路径

<!-- Druid,监控数据库,以及WEB访问连接信息 --><filter> <filter-name>DruidWebStatFilter</filter-name> <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class&g...

qq_19461357的博客 1092

alibaba/druid 常见问题

1,363 Fork895 renfufei edited this page on 16 Sep 2014 · 51 revisions  Pages 54 Benchmark_aliyunContributorsDBCP迁移Druid Change Logdruid m

codepython的专栏 3万+

Druid 数据源配置

源码参考: https://github.com/Viviennechenwei/Learning_SpringBoot/tree/master/ch10-springboot-mybatis 一、SpringBoot自动配置 springBoot 版本2.2.6 需要导入druid启动器 <!-- https://mvnrepository.com/artifact/c...

Vivienne_ChenW的博客 765

Druid的使用详解

一、关于Druid Druid是一个JDBC组件,它包括三部分:  DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。  DruidDataSource 高效可管理的数据库连接池。  SQLParser  Druid可以做什么?  1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,...

jokeMqc的博客 1万+

druid配置参数详解

【代码】druid配置参数详解。

爱思考的People 9614

druid监控找不到路径问题

http://127.0.0.1:8080/druid/index.html,找不到路径,或者被引导回项目首页。可能性1:你改了端口。解决:改成你web容器配置的端口。可能性2:用了shiro框架,或者其他权限拦截器的,此时会被引导回项目首页。解决:将/druid路径加入白名单。shiro配置:filterChainDefinitionMap.put("/druid/**", "anon");...

north hunter 3427

druid简单教程

转自:http://blog.youkuaiyun.com/yunnysunny/article/details/8657095 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池。数据库连接池有很多选择,c3p、dhcp、proxool等,druid作为一名后起之秀,凭借其出色的性能,也逐渐印入了大家的眼帘。接下来本教程就说一下druid的简单使用。 首先从ht...

weixin_30673715的博客 258

用Druid连接池遇到“\src\druid.properties (系统找不到指定的路径。)”问题的解决方案

Druid连接池报错处理

Program_girl_Qi的博客 1683

程序员必看内容连续集之 SpringBoot05 整合Druid&Redis

Springboot整合Druid以及整合Redis 包括druid的介绍以及使用合作,介绍了Druid到底是个啥

weixin_66110079的博客 1489
上一篇: 有序漏斗分析-Druid实践
EricGogh
博客等级 码龄19年 24粉丝 32原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值