大型网站重构指南 第1.3部分:前端监控和小程序监控 Sentry

本文涉及的产品
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
简介: 大型网站重构指南 第1.3部分:前端监控和小程序监控 Sentry

在前面的文章中我们介绍了 ichati.cn 用到的代码静态质量检查的工具 SonarQube,和 Nodejs 系统可观测性的工具 OpenTelemetry 和 SigNoz。

这篇文章我们来介绍一下 ichati.cn 前端所用到的监控系统 Sentry。

前端的监控相比较后端来说会更加简单一些。

ichati.cn 只关注两个地方。

  • 异常
  • 性能

原理我就不讲了,很简单。

异常通过 window.onerror、try-catch、error 事件、unhandledrejection 事件等等来实现。

性能可以通过 preformance API 来实现。


Sentry 介绍


Sentry 是前端监控领域最强大的开源库之一。

当然它不仅限于前端,还可以监控客户端和服务端。但它最擅长的仍然是前端。所以 ichati.cn 选择在后端使用 OpenTelemetry,选择在前端和小程序使用 Sentry。

Sentry 的体积很小,只有 20kb,所以对加载速度影响不大。

它的异常监控功能非常强大,支持多环境、多版本的管理。

性能检测方面,支持自动监测、手动检测和指标的可视化。

在监测之外,还支持报告和告警。比如通过邮箱等方式提醒对应的负责人。同时告警的规则还可以自定义。

Sentry 支持私有化部署。私有化部署可以避免数据泄露的风险。

和后端的可观测性生态不同,由于前端的监控比较简单,所以并不像 OpenTelemetry 和 SigZon 那样各司其职。

Sentry 是一个集多种功能于一体的开源框架。涵盖了数据的采集、数据的存储、数据的分析和可视化。所以它的架构非常复杂,利用了一大堆中间件来实现,比如 Zookeeper、Kafka、ClickHouse 等。


部署 Sentry


Sentry 有两种使用方式。一种是官方的云服务,一种是私有部署。

这里我们演示私有部署的用法。

私有部署需要使用 Docker。

首先在 Github 下载最新的源代码。

github.com/getsentry/s…

然后运行解压后的 install.sh 文件,它会帮我们处理所有的事情。

稍等片刻,Docker 镜像启动成功后,会监听 9000 端口,我们可以通过 http://127.0.0.1:9000 访问 Dashboard。

刚开始 ichati.cn 使用的是私有部署,但很快就发现 sentry 很吃服务器资源。觉得并不划算,所以后面换成官方的云服务了。

官方的 Sentry Team 订阅每个月 29 美元,约等于 210 元。并不算贵。


前端项目接入


在之前,Sentry 比较麻烦,需要在前端项目中安装依赖库,在项目启动的入口处初始化 Sentry 等等。

但是现在在项目中集成 Sentry 非常简单了。

第一步:在控制台创建项目。

image.png

点击 Create Project。

第二步:集成 SDK。

然后在项目中运行命令:

bash

复制代码

npx @sentry/wizard -i nextjs

选择几个选项之后,sentry 的脚手架会帮我们把默认的配置都处理好。

最后我们启动项目:

访问 http://127.0.0.1:port/sentry-example-page 就可以进入到测试页面。

image.png

在测试页面点击抛出异常就可以向 Sentry 发送错误。


Sentry 配置项


sentry 的配置项有很多,这里对它们进行展开介绍。

  • release:应用的版本号
  • environment:环境
  • servername:服务名
  • tags:标签
  • extra:附加信息
  • user:用户

以下是一个简单的示例:


Sentry.init({
  dsn: process.env.SENTRY_DSN,
  environment: process.env.BUILD_ENV,
});
Sentry.setTag("app", "trace");
Sentry.setTag("platform", "wechat");
Sentry.setTag("framework", "taro");
Sentry.setExtra("frameworkVersion", process.env.TARO_VERSION);
Sentry.setExtra("buildTime", process.env.BUILD_TIME);
Sentry.setExtra("buildCommit", process.env.BUILD_COMMIT);
Sentry.setExtra("buildBranch", process.env.BUILD_BRANCH);
Sentry.setExtra("buildTag", process.env.BUILD_TAG);
Sentry.setExtra("buildNumber", process.env.BUILD_NUMBER);
Sentry.setExtra("buildType", process.env.BUILD_TYPE);
Sentry.setExtra("buildEnv", process.env.BUILD_ENV);
Sentry.setUser({
  id: 'xxx',
  username: 'xxx',
  email: 'xxx',
  ip_address: 'xxx',
});
除了这些配置项,我们还可以使用事务手动上报错误,并且设置错误的作用域:
ts
复制代码
const transaction = Sentry.startTransaction({
  name: "Example Frontend Transaction",
});
Sentry.configureScope((scope) => {
  scope.setSpan(transaction);
});
transaction.finish();


Sentry Dashboard


通过上一步骤的接入,现在我们可以在 Sentry Dashboard 中查看和管理错误了。

首先来看 Issues。

image.png

Issues 里面是问题列表,展示了错误的名字、详细信息,以及哪个文件中抛出的错误、什么时候发生的错误、错误的发展趋势、错误的次数、出现错误的用户数、分配的错误处理人等。

点击某条 Issue,我们可以看到更加详细的错误信息。

image.png

信息的内容非常全面,包括:

  • Tag
  • 错误堆栈
  • 错误文件/行数(需要使用 sourcemap)
  • 用户的运行环境/浏览器/操作系统/IP 等
  • 用户行为分析

甚至还支持用户屏幕重放。


微信小程序接入 Sentry


ichati 除了前端外,还有另外一个入口,就是微信小程序。

相对于前端来说,sentry 官方并没有对微信小程序的支持。

所以我们采用了第三方方案。

微信小程序所有的请求域名都必须经过 IPC 备案,但 sentry.io 并没有备案,也就是说我们无法直接将数据上报到 sentry。

但也并非不能解决,使用一个已经备案过的域名进行代理即可。虽然麻烦,但并不复杂。

代理可以使用 nodejs、或者直接使用 nginx。

以下是示例代码:


const express = require("express");
const { createProxyMiddleware } = require("http-proxy-middleware");
const chalk = require("chalk");
const dotenv = require("dotenv");
dotenv.config();
const app = express();
const port = process.env.PORT || 9000;
if (!process.env.TARGET) {
  console.error(chalk.red("Please set TARGET in .env file"));
  process.exit(1);
}
app.use(
  "/",
  createProxyMiddleware({
    target: process.env.TARGET,
    changeOrigin: true,
    onProxyReq: (proxyReq, req, res) => {
      proxyReq.path = req.originalUrl;
    },
    onProxyRes: function (proxyRes, req, res) {
      proxyRes.headers["Access-Control-Allow-Origin"] = "*";
    },
  })
);
app.listen(port, () => {
  console.log(
    chalk.green(`Proxy server listening at http://localhost:${port}`)
  );
});

以上就是关于 sentry 的简要介绍。

篇幅所限,本文暂时结束。

后面会持续更新,让我们一起期待《大型网站重构指南》的下一篇。

如果你对最新的技术感兴趣,特别是对 Web3、AI 相关的内容感兴趣,可以添加我的微信 LZQ20130415,拉你进群交流。



相关文章
|
2月前
|
监控 Java 索引
|
2月前
|
Kubernetes 监控 安全
Kustomize 生产实战 - 注入监控 APM Agent
Kustomize 生产实战 - 注入监控 APM Agent
|
1月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的新冠病毒校园监控平台附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的新冠病毒校园监控平台附带文章和源代码部署视频讲解等
39 11
|
1月前
|
存储 前端开发 小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
|
16天前
|
缓存 监控 前端开发
前端性能监控:从Lighthouse到Real User Monitoring
**前端性能监控关乎用户体验。Lighthouse是自动化审计工具,评估网页性能、最佳实践、可访问性等,通过CLI或Chrome DevTools使用。RUM则实时监控用户与网站互动,收集性能数据。两者结合,从开发到生产环境,全面优化前端性能,包括资源加载、代码优化、网络性能和用户体验。使用Lighthouse和RUM数据,结合CI/CD,持续改进并设定性能预算,采用SSR、Service Worker、Code Splitting等高级策略,确保高性能和用户满意度。**
23 2
|
1月前
|
前端开发 小程序
新版校园跑腿外卖独立版+APP+小程序前端外卖配送平台源码
同城校园跑腿外卖配送平台源码,支持自定义diy 你可以设计你的页面,设计你自己的风格,支持多校园,独立版本,多商户,有用户端,骑手端,商家端,强大的功能
53 3
|
1月前
|
监控 前端开发 JavaScript
|
2月前
|
小程序 前端开发 JavaScript
小程序全栈开发:前端与后端的完美结合
【4月更文挑战第12天】本文介绍了小程序全栈开发,涵盖前端和后端的关键点。前端使用WXML和WXSS进行页面结构和样式设计,JavaScript处理逻辑及组件使用;后端采用Node.js等语言处理业务逻辑、数据库设计和API接口开发。前端与后端通过数据交互实现结合,采用前后端分离模式,支持跨平台运行。调试测试后,提交微信审核并上线运营。掌握前端后端结合是小程序成功的关键。
|
2月前
|
小程序 前端开发 API
快递平台独立版小程序源码|带cps推广营销流量主+前端
快递平台独立版小程序源码|带cps推广营销流量主+前端
105 7
快递平台独立版小程序源码|带cps推广营销流量主+前端
|
2月前
|
监控 前端开发 小程序
微信小程序全栈开发中的前端工程化实践
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的前端工程化实践,旨在提升开发效率和体验。重点包括代码规范与架构设计(模块化、组件化、MVC模式)、自动化构建与部署(使用Webpack、Git和CI工具)、前端框架与库(如Vue.js、React、Angular)以及性能优化策略(代码、资源优化和性能监控)。通过这些实践,开发者能更高效地掌握小程序开发,打造高质量应用。