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

news2024/11/24 23:05:47

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

背景说明

通过 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」的可视化面板,也会展示这些不同的资源类型:

在 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 的其他所有数据。

 

php

复制代码

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% 的数据:

 

csharp

复制代码

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 }

效果展示

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/970328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spacy安装旧版本en_core_web_sm的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Navicat Premium 16.2.7 数据库管理教程

Navicat Premium 16.2.7是一款功能强大的数据库管理工具&#xff0c;支持多种数据库类型&#xff0c;包括MySQL、Oracle、SQL Server等。以下是使用Navicat Premium的基本步骤&#xff1a; 安装Navicat Premium软件。打开Navicat Premium&#xff0c;在主界面上选择“新建连接…

实现高效数据存储:OpenStack Swift与本地文件系统的完美对接

文章目录 Swift对接本地文件系统前言控制节点新增20G磁盘针对磁盘做分区&#xff08;2个&#xff09;针对磁盘格式化卸载原有的 Swift 虚拟设备创建两个目录并挂载更改权限创建builder创建ring再平衡测试配合glance对接swiftglance对接swift测试 Swift对接本地文件系统 前言 实…

OpenCV实战(31)——基于级联Haar特征的目标检测

OpenCV实战&#xff08;31&#xff09;——基于级联Haar特征的目标检测 0. 前言1. Haar 特征图像表示2. 基于级联 Haar 特征的二分类分类器3. 级联分类器算法流程4. 使用 Haar 级联检测器进行人脸检测5. 完整代码小结系列链接 0. 前言 在机器学习基础一节中&#xff0c;我们介…

【Linux】文件缓冲区

目录 一、缓冲区图解二、自定义实现文件操作函数三、强制刷新内核缓冲区&#xff08;fsync&#xff09; 提到文件缓冲区这个概念我们好像并不陌生&#xff0c;但是我们对于这个概念好像又是模糊的存在脑海中&#xff0c;之间我们在介绍c语言文件操作已经简单的提过这个概念&…

NoSQL MongoDB Redis E-R图 UML类图概述

NoSQL NoSQL(Not only SQL)是对不同于传统的关系数据库的数据库管理系统的统称&#xff0c;即广义地来说可以把所有不是关系型数据库的数据库统称为NoSQL。 NoSQL 数据库专门构建用于特定的数据模型&#xff0c;并且具有灵活的架构来构建现代应用程序。NoSQL 数据库使用各种数…

CIM和websockt-实现实时消息通信:双人聊天和消息列表展示

欢迎大佬的来访&#xff0c;给大佬奉茶 一、文章背景 有一个业务需求是&#xff1a;实现一个聊天室&#xff0c;我和对方可以聊天&#xff1b;以及有一个消息列表展示我和对方&#xff08;多个人&#xff09;的聊天信息和及时接收到对方发来的消息并展示在列表上。 项目框架概…

SNP 分享:SAP S/4HANA Cloud 私有云版本及其独特优势

近几年来&#xff0c;SAP一直强调其愿景是帮助客户达成智慧型企业(Intelligent Enterprise)&#xff0c;为此其相关产品也在不断进行快速迭代&#xff0c;其核心就是S4HANA。同时SAP一直强调其要成为一家云计算公司&#xff0c;近些年也一直在推行云优先战略(Cloud First)。因此…

指针(通过指针间接访问内存)

#include <iostream> #include <algorithm> using namespace std; int main() { int a 2;//定义指针 &#xff1a; 数据类型 *指针变量名;int *p &a;cout << &a << " " << p << endl;//使用指针 &#xff1a; 可以通过…

怎么把表情包做成动态?分享一个简单的方法

表情包在我们的日常交流中已经成为了一种非常流行的表达方式&#xff0c;而将表情包做成动态则可以让它更加生动有趣。本文将介绍如何将表情包制作成动态图&#xff0c;以及一些简单的方法和制作注意事项。 制作动态表情包的方法有很多种&#xff0c;以下是其中两种简单易行的方…

SpringCloud面试题大全(Netflix+Alibaba)

SpringCloud面试题大全 ​ Spring cloud 是一个基于 Spring Boot 实现的服务治理工具包&#xff0c;用于微服务架构中管理和协调服务的。Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注…

华为云云服务器评测 | 3分钟搞懂如何在华为云服务器安装Nginx并配置静态访问页面

文章目录 一、什么是Nginx&#xff1f;二、申请华为云服务器三、使用XShell连接华为云服务器并安装Nginx四、FileZilla连接服务器五、Linux下安装Nginx❇️配置80端口并关闭Linux防火墙✳️测试 六、配置静态html至华为云服务器并访问⚠️在华为服务器新建路径⏰使用Filezilla上…

java+ssm+mysql电费管理系统

项目介绍&#xff1a; 使用javassmmysql开发的用户电费管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理、用户管理、用电管理&#xff08;用电记录、缴费提醒&#xff09;、电费…

C++多态案例-设计计算器类

1.前置知识点 多态是面向对象的三大特性之一 多态分为两类 静态多态&#xff1a;函数重载和运算符重载都属于静态多态&#xff0c;复用函数名动态多态&#xff1a;派生类和虚函数实现运行时多态 静态多态和动态多态的区别 静态多态的函数地址早绑定-----编译阶段确定函数地…

Navicat Premium 16.2.7 for Mac

Navicat Premium 16是一款功能强大的跨平台数据库管理工具&#xff0c;支持多种数据库类型&#xff0c;如MySQL、MariaDB、Oracle、SQLite、PostgreSQL等等。它提供了丰富的数据库管理功能和工具&#xff0c;可以帮助开发人员和数据库管理员快速地创建、管理和维护数据库。 Nav…

采用第11代Intel®Core处理器的多网口嵌入式边缘计算平台

Intel Core™ 11th i7/i5/i3/Celeron 处理器 及 8GB DDR4 3200Mb/s 内存4 x GbE, 3 x USB 3.2 Gen2, 1 x USB2.0, 1 x HDMI 1.4, 1 x DP 1.4a, 4 x RS232/422/485可选的第二堆栈支持多达2 x iDoor扩展&#xff0c;用于扩展无线连接、工业现场总线或更多I/O紧凑型无风扇设计零电…

1.15 自实现GetProcAddress

在正常情况下&#xff0c;要想使用GetProcAddress函数&#xff0c;需要首先调用LoadLibraryA函数获取到kernel32.dll动态链接库的内存地址&#xff0c;接着在调用GetProcAddress函数时传入模块基址以及模块中函数名即可动态获取到特定函数的内存地址&#xff0c;但在有时这个函…

做答题小程序前期需要准备哪些工作

做一个答题小程序前期需要做哪些准备工作呢&#xff1f; 第一、要有明确的答题活动规则需求&#xff0c;比如是想用个人答题形式、还是pk答题形式&#xff0c;每个模式具体的出题规则和得分规则&#xff0c;这些要计划清楚&#xff0c;让开发答题小程序的公司能够充分理解你的需…

vue3哪个数组方法在vue2上做了升级处理

在 Vue 3 中&#xff0c;v-for 指令的数组更新行为进行了升级处理。在 Vue 2 中&#xff0c;当使用 v-for 渲染数组时&#xff0c;如果对数组进行了以下操作&#xff0c;Vue 无法检测到变化&#xff1a; 直接通过索引修改数组元素&#xff0c;例如 arr[0] newValue修改数组的…

MySQL 存储引擎,你了解几个?

引言 MySQL是一种流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它支持多种不同的数据库引擎。数据库引擎是用于存储、管理和检索数据的核心组件&#xff0c;它们直接影响着数据库的性能、可靠性和功能&#xff0c;接下来本文介绍下一些常见的MySQL数据…