首页 > 其他分享 >网站监控系统最佳实践之静态资源采样上报

网站监控系统最佳实践之静态资源采样上报

时间:2024-01-27 16:06:13浏览次数:19  
标签:采样 网页 请求 静态 用户 过滤 上报 数据 event

作者 观测云 产品服务部门 深圳团队 朱端畅

背景说明

通过 RUM 采集前端数据时,若采集的数据过多,可能会导致占用过多的网络带宽以及其他资源。特别是刚进入首页加载数据时,可能会调用几十次甚至更多次 v1/write/rum?precision=ms数据采集接口。在这种情况下,一种优化思路是对前端资源采集进行筛选和过滤。

网站监控系统最佳实践之静态资源采样上报_性能优化

采集数据分类及过滤

数据分类

「观测云控制台」-「用户访问监测」-「查看器」,可以展示以下几种采集数据的分类:

查看器类型

概述

Session(会话)

查看用户访问的一系列详情,包括用户访问时间、访问页面路径、访问操作数、访问路径和出现的错误信息等。

View(页面)

查看用户访问环境、回溯用户的操作路径、分解用户操作的响应时间以及了解用户操作导致后端应用一系列调用链的性能指标情况。

Resource(资源)

查看网页上加载的各种资源信息,包括状态码、请求方式、资源地址,加载耗时等。

Action(操作)

查看用户在使用应用期间的操作交互,包括操作类型,页面操作详情,操作耗时等。

Long Task(长任务)

查看用户在使用应用期间,阻塞主线程超过 50ms 的长任务,包括页面地址、任务耗时等。

Error(错误)

查看用户在使用应用期间,浏览器发出的前端错误,包括错误类型、错误内容等。

数据过滤思路

如上大部分数据对于用户访问、性能分析都是非常有帮助的,比如 View 页面资源、Session 会话重放、Error 帮助分析前端错误等。因此,不建议过滤这些数据。

Resource(资源)包含的种类也非常多,其中一部分数据为静态资源数据,大致可以分为:

资源名称

描述

HTML(超文本标记语言)

HTML是网页的基础构建块,用于定义网页的结构和内容。

CSS(层叠样式表)

CSS用于定义网页的样式和布局,包括颜色、字体、布局等。

JavaScript(JS)

JavaScript是一种脚本语言,用于在网页中实现交互和动态功能,例如表单验证、页面操作等。

图像(Images)

图像文件,如JPEG、PNG、GIF等格式的图片,用于在网页中显示静态或动态图像。

字体(Fonts)

用于定义网页文本样式的字体文件,如TrueType(TTF)和可缩放矢量图形(SVG)字体。

样式表(Stylesheets)

除了CSS外,还包括其他类型的样式表,如Sass、Less等预处理器生成的样式表。

多媒体(Media)

音频和视频文件,如MP3、MP4等格式的音频和视频,用于在网页中嵌入音频和视频内容。

数据文件(Data Files)

用于存储网页或应用程序需要的数据的文件,如JSON、XML、CSV等格式的数据文件。

AJAX 请求(XHR/Fetch)

使用XMLHttpRequest或Fetch API发送的异步请求,用于从服务器获取数据或与后端进行交互。

矢量图形(Vector Graphics)

矢量图形文件,如SVG(可缩放矢量图形)格式的图形,用于在网页中显示可伸缩的矢量图形。

框架(Frameworks)

前端框架或库的文件,如React、Vue、Angular等的源代码文件。

通过「观测云控制台」-「用户访问监测」-「查看器」-「Resource」的可视化面板,也会展示这些不同的资源类型:

网站监控系统最佳实践之静态资源采样上报_监控_02

在 Resource(资源)中, xhr/fetch 的数据属于 Http 请求后端数据,需要与 View 页面及 APM 做关联,因此,不建议过滤这部分数据。而其他的资源数据,如 js、image、css、font 数据重要性相对较低,可以随机过滤。

配置方式

前置条件

  • 安装 DataKit
  • 开启 RUM 采集

数据过滤方式

在前端开发中,beforeSend 函数通常用于处理在发送网络请求之前的预处理逻辑。它是用于在请求发送之前进行一些操作的回调函数。

  • event:表示正在发送的请求对象(如 XHR 对象或 AJAX 对象),可以用于操作请求的相关属性或执行相关操作。
  • domainContext:表示请求的上下文环境,可能包含一些与请求相关的上下文信息。

下面以 NPM 接入 web 应用 SDK 为例,展示在 datafluxRum.init 中加入 beforeSend 方法,过滤掉 Resource(资源)中除了 xhr/fetch 的其他所有数据。

import { datafluxRum } from '@cloudcare/browser-rum';
datafluxRum.init({
    applicationId: 'ruoyi_web',
    datakitOrigin: '<DATAKIT ORIGIN>', // 协议(包括://),域名(或IP地址)[和端口号]
    env: 'production',
    version: '1.0.0',
    service: 'browser',
    sessionSampleRate: 100,
    sessionReplaySampleRate: 70,
    trackInteractions: true,
    traceType: 'ddtrace', // 非必填,默认为ddtrace,目前支持 ddtrace、zipkin、skywalking_v3、jaeger、zipkin_single_header、w3c_traceparent 6种类型
    allowedTracingOrigins: ['https://api.example.com',/https://.*.my-api-domain.com/],  // 非必填,允许注入trace采集器所需header头部的所有请求列表。可以是请求的origin,也可以是是正则
    //新增beforeSend函数过滤相应的资源数据
    beforeSend: function (event, domainContext) {
      if (event && event.type === 'resource') {
        if (
          event.resource &&
          ['xhr', 'fetch'].indexOf(event.resource.type) > -1
        ) {
          return true
        }
        return false
      }
      return true
    }
})

如果需要在此基础上再随机采样,可以使用 Math.random()(该方法的取值范围为 0-1)方式随机过滤。如下展示的是随机采集 10% 的数据:

beforeSend: function (event, domainContext) {
  if (event && event.type === 'resource') {
    if (
      event.resource &&
      ['xhr', 'fetch'].indexOf(event.resource.type) > -1
    ) {
      return true
    }
    if(Math.random()<0.1){
      return true
    }
    return false
  }
  return true
}

效果展示

过滤掉一些静态资源之后,数据采集接口请求只有两个,效果如下图所示,十分明显。

网站监控系统最佳实践之静态资源采样上报_监控_03

标签:采样,网页,请求,静态,用户,过滤,上报,数据,event
From: https://blog.51cto.com/u_12003135/9443848

相关文章

  • .net core 静态文件的访问权限控制(UseStaticFiles)
    官方文档:https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-8.0&viewFallbackFrom=aspnetcore-2.2wwwroot中的文件,可以在Startup类的Configure方法中添加以下语句:app.UseStaticFiles();默认情况下,诸如HTML、css、图像、js之类的静态资......
  • 静态库中单例不唯一的情况
    提出问题A作为共享库,封装了一个单例类,共享库B和共享库C使用A,D作为可执行程序,使用B和C,那么这个单例是否唯一?实验首先创建一个C++项目,项目结构如下.├──CMakeLists.txt├──MeyerSingleton.cpp├──MeyerSingleton.h├──testlib.cpp├──testlibheader1.cpp├......
  • Blazor Hybrid应用将非wwwroot目录下的文件加入静态资源
    以Winfrom为例,创建一个Class继承BlazorWebView这个类,重写CreateFileProvider这个方法就行。保存后,用新控件替换原来的控件,WPF,MAUI同理,但是MAUI只有Windows平台能用下面的代码。其他平台会报错,找不到文件。publicclassCustomBlazorWebView:BlazorWebView{......
  • STA(静态时序分析) 详解:如何计算最大时钟频率,以及判断电路是否出现时钟违例(timing viola
    1.什么是STA?     STA(静态时序分析)是时序验证的一种方法,用于计算和分析电路是否满足时序约束的要求。 2.为什么需要STA?    电路能否正常工作,其本质上是受最长逻辑通路(即关键路径)的限制,以及受芯片中存储器件的物理约束或工作环境的影响。    为了保......
  • 45从零开始用Rust编写nginx,静态文件服务器竟然还有这些细节
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,websocket代理,反向代理,静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透等,力争打造和nginx的性能。项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/tickbh/wmproxy静态文件服务器静态......
  • 29虚函数-静态绑定-动态绑定
    虚函数-静态绑定-动态绑定如果类中定义了虚函数,那么编译阶段,编译器会给这个类类型产生一个唯一的vftable虚函数表,其中主要存储的是RTTI指针和虚函数的地址。程序运行时,每一张虚函数表都会加载到内存的.rodata只读数据区。一个类中定义了虚函数,那么这个类的对象,其运行时,内存中开......
  • 静态路由基本配置
    拓扑:配置:查看代码[R1]discurrent-configuration[V200R003C00]#sysnameR1#boardadd0/12SA#snmp-agentlocal-engineid800007DB03000000000000snmp-agent#clocktimezoneChina-Standard-Timeminus08:00:00#portallocal-serverloadportalpage.......
  • 静态区间查询(条件动态)——ST表
    目录问题引入思路一览具体分析条件动态?问题引入给出一个长度为n的数组a,并且给出m咨询问,每次询问给出边间lt和rt,要求给出lt和rt之间的最大值思路一览暴力法:记录数组,对于每一次询问,就从lt到rt遍历一遍ST:对数组的区间做一个倍增处理,将每一个区间的答案记录下来,最后使用区间进行......
  • 内部类(匿名、成员、静态)
    1、匿名内部类匿名内部类在方法中创建,不能用public等来修饰在方法内部使用,此时,只需要声明一个Outer05对象,然后使用f1方法,就可以使用这个匿名内部类 类的匿名内部类,如果去掉大括号中的内容,则变成创建一个Father对象,但是有这个大括号,则是使用一个匿名内部类,如果类本身不是......
  • Linux-unbuntu里静态库、动态库
    静态库:特点:生成的可执行程序复制了一份整个库,以空间换取时间第一步:准备功能函数eg:add.c sub.c  div.c...第二步:把功能函数只编译不链接,得到.o文件gcc-cadd.c-oadd.o第三步:将功能函数的.o文件进行打包成库(打包完成会生成一个.a结尾的库,此库里已经把功能函数都封装进来了)ar......