Giter Club home page Giter Club logo

apply-monitor's Introduction

项目介绍


本项目是一个完整的监控平台体系,项目信息收集 sdk、服务端接口 API 信息处理均已实现,监控后台信息平台管理还在实现中,采用 monorepo+pnpm 方式开发。

项目结构

├── .changeset 包版本维护
├── .github
    ├── .workflows  github-actions配置
├── .husky 发布到github校验
├── docs  静态资源
├── _tests sdk测试
├── packages *项目核心
    ├── eslint-config eslint通用规范
    ├── monitor 信息收集sdk
    ├── report  上传sourcemap插件
    ├── server 服务端处理平台
├── .eslintignore
├── .eslintrc
├── .npmrc
├── .nvmrc
├──.prettierrc
├── commitlint.config
├── pnpm-workspace.yaml
|── pnpm-lock.yaml
├── package.json
└── README.md

项目整体架构

整个监控体系核心部分主要分成三部分,首先是 sdk 植入到各个需要监控到的项目中,然后监控信息会上报到统一的的服务器进行处理存储,最后是统一的监控平台对监控信息进行展示

核心部分

信息收集 sdk:monitor
信息处理分析:server
信息管理平台(实现中):admin

整个 sdk 其实是做了俩部分工作,信息采集+信息上报

信息采集

信息采集包括三个部分:错误监控、行为监控、性能监控三个部分

信息采集

信息上报

上报方法

关于信息上报的方式有三种:sendBeacon>image>XMLHttpRequest,默认采用的 sendBeacon,如果不兼容这个 api,会选择 image 上报,最后才会选择 XMLHttpRequest 方式进行上传。当然也可以通过配置自行选择上报方式。

  • sendBeacon:该方法会将少量异步数据发送到后台,所以用这种方式传输时,不会影响页面本身加载的请求,同时这种是异步方式的。
  • image:采用的是 1*1 像素的透明 gif 进行上报,因为 gif 图片格式体积小,可以避免阻塞页面加载,影响用户体验,该方式也是支持跨域方式得。
  • XMLHttpRequest:该方式的问题主要是可能会占用页面本身请求,阻塞页面加载,同时也需要考虑跨域的问题

上报时机

  • 错误监控:触发时会直接上报
  • 其它:会把相应的信息上报加人一个队列里面进行缓存,然后在页面加载完成或页面隐藏时这些时机进行上报,这样可以避免监控 sdk 的请求阻塞页面加载。

服务端采用的 koa2+mysql+redis+typescript 方式开发,整个服务端可以分为俩部分,信息收集处理存储、提取存储数据分析。

存储部分

存储主要是指 sdk 上报的性能、行为、错误这三部分信息收集,拿到上报的信息之后,会首先对数据做个清洗,然后假如同时监控了多个项目,所以可能存在一下子发送过多的数据,导致服务端信息处理过载崩溃,所以在加入 mysql 存储之前,会对数据做层队列缓存,缓存方式采用的是 kue+redis。

数据分析

主要对项目上报的数据进行处理,然后展示在后台分析平台。

因为 sdk 上报的错误代码信息都是经过压缩处理的,是无法直观分析到代码具体报错位置的。可以通过匹配到相应的 source-map 文件,通过错误信息的行列数与对应的 source-map 文件,处理后得到源文件的具体错误信息。所以这里编写了个 webpack 插件,在代码打包完成后,会把相应的 source-map 文件上传到服务端。

  • webpack 打包生成文件触发 afterEmit 钩子,拿到相应的 source-map 文件资源,然后把它们以 form-data 的形式发送到服务端。
  • 然后再把相应的 source-map 文件资源删除,在 webpack 的 done 钩子阶段执行

apply-monitor's People

Contributors

lycarrot avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.