前端监控及搭建前端监控

 前端监控怎么做?

前端也需要监控?技术人不可忽视的前端监控最全指南 

一.前端监控的目的 

为什么要进行前端监控?

是一种用于捕获,分析和报告网站或应用程序中存在异常,错误和性能问题的方法。通过监控,我们可以实时了解用户在使用我们产品时可能遇到的问题,从而快速解决和响应问题

前端监控分3大类:数据监控、性能监控和异常监控

数据监控:常说的埋点统计,用于监听用户的操作行为。常见的数据监控包括:

  • PV / UV:PV 即 Page View ,也就是页面的浏览数量,没打开页面一次就会统计一次;UV 即 User View ,也就是不同用户访问的次数,在 PV 的基础上根据 User 信息的不同做了去重操作;
  • 用户在每个页面停留的时间信息。即从用户打开该页面到用户离开该页面的时间差,用于表示该页面对用户的留存程度;
  • 用户的来处。即从什么入口或什么渠道来到了当前页面,通常会在 URL 中添加查询参数来做区分统计;
  • 用户的页面操作行为。即用户在该页面点击了哪些按钮,或者从什么链接去到了某些页面等等,来分析用户的去向。

性能监控:监听前端项目在用户端展示的性能,这将直接关乎到用户的体验效果。监控这些数据,将能够是我们更好的去优化用户体验。常见的性能监控指标包括以下数据:

  • 不同用户和不同设备下的首屏加载时间,包括白屏时间;
  • HTTP 接口的响应时间;
  • 静态资源、包括图片的下载时间;

错误监控:指代码在个别特殊场景下,会出现异常报错,很有可能会引发线上的故障。而这部分异常,如果没有异常监控,则只能在用户发现的情况下进行选择性的上报,并不能让我们及时去发现和解决问题。这一部分的错误信息主要分为下面几类:

  • JS 代码运行错误、语法错误等;
  • AJAX 请求错误;
  • 静态资源加载错误;
  • Promise 异步函数错误;

二:错误信息采集

错误信息监控简单来说就是要搜集报错信息的发生的位置,以及报错的类型,进行上报,便于我们能够更好的掌握错误信息,从而能够对症下药。按照 5W1H 的法则来说,我们需要关注以下的几项信息: 

自己搭建前端监控

搭建前端
1.定义监控指标:确定要监控的指标,例如页面加载时间,资源加载情况,错误信息等

2.收集监控数据:通过前端代码或后端接口等方式,收集客户端和服务端的监控数据,并将其发送到监控服务器

3.存储监控数据:将收集到的监控数据存储8到数据库或其他持久化存储中,以便后续分析和查询

4.分析监控数据:根据业务需求和监控指标,对监控数据进行分析和统计,包括数据可视化、异常检测、趋势分析等

5.**报警机制**:实现异常报警机制,及时通知开发人员和运维人员进行处理。

6.**优化方案**:根据监控数据的分析结果,提出相应的优化方案,包括前端代码优化、服务器端性能优化等。

// 1.引入监控脚本:在HTML页面中引入监控脚本,例如
<script src="monitor.js"></script>// 2.收集监控数据:在监控脚本中,监听页面加载、资源加载、错误等事件,并将监控数据发送到监控服务器。例如
window.addEventListener("load", function() {// 加载时间:可以使用performance.timing API获取加载时间// 响应时间:可以使用performance.now() API获取响应时间// 错误率:可以使用console.error事件监听器获取错误率// 页面加载完成,记录页面加载时间并发送监控数据var loadTime = new Date() - performance.timing.navigationStart;sendMonitorData('loadTime', loadTime);
});window.addEventListener("error", function(e) {// 发生错误,记录错误信息并发送监控数据var message = e.message;var url = e.filename;var line = e.lineno;sendMonitorData('error', {message, url, line});
});// 监听其他事件,例如资源加载情况等,收集相应的监控数据并发送
// ...function sendMonitorData(type, data) {// 发送监控数据到监控服务器var xhr = new XMLHttpRequest();xhr.open("POST", "/monitor", true);xhr.setRequestHeader("Content-type", "application/json");xhr.send(JSON.stringify({type, data}));
}3.存储监控数据:在监控服务器中,将收集到的监控数据存储到数据库或其他持久化存储中,例如:
// 监控服务器接口,用于接收前端发送的监控数据并存储到数据库
app.post('/monitor', function(req, res) {var type = req.body.type;var data = req.body.data;// 将监控数据存储到数据库中db.collection('monitor').insertOne({type, data});res.send('OK');
});4.分析监控数据:从数据库中查询监控数据,并对其进行分析和统计,例如:
// 在监控服务器中,查询并统计错误信息
app.get('/monitor/errors', function(req, res) {db.collection('monitor').find({type: 'error'}).toArray(function(err, docs) {var messages = docs.map(doc => doc.data.message);var urls = docs.map(doc => doc.data.url);var lines = docs.map(doc => doc.data.line);// 对 error 相关数据进行分析和统计...});
});5.报警机制:根据业务需求和监控指标,实现异常检测和报警机制,例如:
// 在监控服务器中,实现错误报警机制
app.get('/monitor/alerts/errors', function(req, res) {db.collection('monitor').find({type: 'error'}).toArray(function(err, docs) {var count = docs.length;if (count > 10) {sendAlertEmail('错误数量超过阈值:' + count);}res.send('OK');});
});function sendAlertEmail(message) {// 发送邮件通知开发人员或运维人员// ...
}

 

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

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

相关文章

java界面代码

package day02;import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class lei4j extends JFrame implements ActionListener {//创建文本框JTextField tiaomu new JTextField(40);//创建密码文本框JPasswordField JK ne…

Java——数组的定义与使用

目录 一.数组的基本概念 1.什么是数组 2.数组的创建及初始化 3.数组的使用 二.数组是引用类型 1.初始JVM的内存分布 2.基本类型变量与引用类型变量的区别 3.再谈引用变量 4.认识 null 三.数组的应用场景 1.保存数据 2.作为函数的参数 2.1参数传基本数据类型 2.…

centos8安装xrdp

centos8安装xrdp 1、安装桌面服务2、关闭selinux3、安装xrdp4、创建root用户4.1 创建普通用户4.2 更改为超级用户 5、连接 xrdp是可以提供远程桌面服务&#xff0c;让linux系统也可以像windows一样&#xff0c;进行远程连接 1、安装桌面服务 Linux服务器没有安装桌面环境。如…

学习vue3第二节(使用vite 创建vue3项目)

使用vite 创建vue3项目 node 安装请移步 node官网&#xff1a; https://nodejs.p2hp.com/ node 版本控制 请移步 nvm官网&#xff1a;https://nvm.uihtm.com/ vite 生成vue项目完整版 请移步 vite官网&#xff1a;https://cn.vitejs.dev/ 1、使用 npm 或者 yarn 创建vue3 项目…

nwjs做自动化测试

分别是2个常用的自动化测试化框架 GitHub - nwutils/nw-selenium-javascript-example: An example of end-to-end testing with Selenium for NW.js apps via JavaScript GitHub - nwutils/nw-puppeteer-example: An example of using NW.js via Puppeteer. 看习惯使用哪个&…

Vue3使用jsx和render函数动态插入组件和元素

定义弹框组件&#xff08;只实现功能&#xff0c;不管样式&#xff09; import {render} from vue export function SingPop(content,handler) {const div document.createElement(div);let pop <div><div>{content}</div><div><button onClick{…

AI场景文件系统全景对比分析

针对AI场景下的文件系统&#xff0c;我们可以考虑几种常见的解决方案&#xff0c;如传统的网络附属存储&#xff08;NAS&#xff09;、高性能并行文件系统&#xff08;如Lustre和IBM Spectrum Scale&#xff09;&#xff0c;以及Hammerspace的Hyperscale NAS。下面是对这几种文…

NXP实战笔记(十一):32K3xx基于RTD-SDK在S32DS上配置DFLASH、MemAcc、Fee

目录 1、概述 2、RTD-SDK配置之Cache_Ip 3、RTD-SDK配置之Mem_43_InFls 4、RTD-SDK配置之MemAcc 5、RTD-SDK配置之Fee 6、代码示例 1、概述 S32K3目前安装的RTD普遍使用的是R22-11版本的AUTOSAR规范&#xff0c;作为一直使用AUTOSAR4.2.2的程序员来讲&#xff0c;属实迭代…

东方博宜 1511. 数字之和为13的整数

东方博宜 1511. 数字之和为13的整数 #include<iostream> using namespace std; int main() {int n ;cin >> n ;int cnt 0 ;for(int i 1 ; i < n ; i){int sum 0 ;int y ;y i ;while(true){sum y%10;y y / 10 ;if(y0)break; }if(sum 13)cnt 1 ; }cout…

leetcode-70. 爬楼梯

题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示…

QT之QSharedMemory共享内存

QSharedMemory是qt提供对共享内存操作的类&#xff0c;主要用来对内存卡写数据和读数据。 常用api: 1、void QSharedMemory::setKey(const QString &key) 为共享内存设置键值。如何当前的内存共享对象已经链接到底层的共享内存段&#xff08;isAttached&#xff09;&…

脚手架工程使用ElementUI

在终端中执行以下指令 npm install --save element-ui 在终端中显示added 9 packages in 10s 说明安装完成 在工程的main.js中 导入并使用ElementUI: import ElementUI from element-ui import element-ui/lib/theme-chalk/index.css Vue.use(ElementUI) 可以在*.vue页面中…

91、在推理流程中加载动态库中的Infer函数

注:建议在 new_version_with_notes 目录下尝试本节内容,有更为丰富的细节输出。 在上一节将生成的代码编译成一个动态链接库之后,接下来需要加载动态链接库中写好的推理入口函数,完成推理。 在生成的代码中,在 codegen 目录下,有一个 codegen.cc 文件,里面是一个 Infe…

二、TensorFlow结构分析(2)

目录 1、会话 1.1 __init__(target,graphNone,configNone) 1.2 会话的run() 1.3 feed操作 TF数据流图图与TensorBoard会话张量变量OP高级API 1、会话 1.1 __init__(target,graphNone,configNone) def session_demo():# 会话的演示# Tensorflow实现加法运算a_t tf.constan…

Appium + mitmProxy 实现APP接口稳定性测试

随着 App 用户量的不断增长&#xff0c;任何小的问题都可能放大成严重的线上事故&#xff0c;为了避免对App造成损害的任何可能性&#xff0c;我们必须从各个方面去思考 App 的稳定性建设&#xff0c;尽可能减少任何潜在的威胁。 1.背景介绍 为了保障 App 的稳定性&#xff0…

【Docker】前端基于dockerfiel构建镜像部署,实现在容器启动时传递环境变量, 请求不同服务地址

前端部署采用 docker 的方式&#xff0c; 实现在容器启动时传递环境变量&#xff0c; 请求不同服务地址 实现思路&#xff1a; 定义.env.xxx 文件&#xff08;环境变量赋值&#xff09;&#xff0c;在compose.yml中引入.env.xxx 文件&#xff0c;环境变量通过nginx的sub_filte…

算法基础(三)(模拟)

1.模拟算法介绍&#xff1a; 模拟算法通过模拟实际情况来解决问题&#xff0c;一般容易理解但是实现起来比较复杂&#xff0c;有很多需要注意的细节&#xff0c;或者是一些所谓很“麻烦”的东西。模拟题一般不涉及太难的算法&#xff0c;一般就是由较多的简单但是不好处理的部…

redis启动错误

错误&#xff1a; Creating Server TCP listening socket 127.0.0.1:6379: bind: No error redis-server.exe redis.windows.conf redis-cli.exe shutdown auth "yourpassword"

深基杨辉三角

题目描述 给出 n(n≤20)&#xff0c;输出杨辉三角的前 n 行。 如果你不知道什么是杨辉三角&#xff0c;可以观察样例找找规律。 输入格式 无 输出格式 无 输入输出样例 输入 #1 6 输出 #1 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 解 #include<iostream&g…

深基蛇形方阵

题目描述 给出一个不大于 9 的正整数 n&#xff0c;输出 nn 的蛇形方阵。 从左上角填上 1 开始&#xff0c;顺时针方向依次填入数字&#xff0c;如同样例所示。注意每个数字有都会占用 3 个字符&#xff0c;前面使用空格补齐。 输入格式 输入一个正整数 nn&#xff0c;含义…