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

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
应用实时监控服务-应用监控,每月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,拉你进群交流。



相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
相关文章
|
2月前
|
移动开发 监控 Android开发
Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。
341 13
|
4月前
|
运维 监控 数据可视化
ARMS的微服务监控
【8月更文挑战第23天】
77 6
|
18天前
|
缓存 监控 前端开发
基于 CoffeeScript 的内网管理监控软件前端代码优化
本文探讨了基于CoffeeScript的内网管理监控软件前端代码优化方法,包括数据请求缓存、界面更新采用虚拟DOM技术以及增强错误处理机制,旨在提升软件性能、响应速度和用户体验。
28 4
|
4月前
|
监控 前端开发 JavaScript
ARMS的Web应用监控
【8月更文挑战第23天】
72 8
|
4月前
|
监控 JavaScript 前端开发
ARMS的移动应用监控
【8月更文挑战第23天】
90 6
|
13天前
|
监控 开发工具 Android开发
ARMS 用户体验监控正式发布原生鸿蒙应用 SDK
阿里云 ARMS 用户体验监控(RUM)推出了针对原生鸿蒙应用的 SDK。SDK 使用 ArkTS 语言开发,支持页面采集、资源加载采集、异常采集及自定义采集等功能,能够全面监控鸿蒙应用的表现。集成简单,只需几步即可将 SDK 接入项目中,为鸿蒙应用的开发者提供了强有力的支持。
|
16天前
|
监控 前端开发 JavaScript
OCamlScript 用于局域网电脑监控软件前端开发的探索
在数字化时代,局域网电脑监控软件广泛应用于企业管理和教育机构。OCamlScript 作为新兴技术,在此类软件的前端开发中展现出独特潜力,特别是在网络请求、界面更新及用户交互处理方面。通过合理利用其特性,可构建高效稳定的前端应用,提升用户体验,具有广阔的应用前景。
31 9
|
1月前
|
小程序 前端开发 数据可视化
作为一个前端小白,我竟然搞定了一个小程序的交付
作为一名刚毕业的前端码农,今年毕业后就加入了一家初创公司。入职不久便接到了一个小程序开发项目,客户特别强调必须使用小程序原生语言进行开发。由于时间紧迫而合适的后端开发者暂时还没到位,老板决定让我边学边做,承担起整个项目的前后端开发工作。对于初出茅庐的我来说,这无疑是一个巨大的挑战。不仅要掌握一门新的编程语言,还要学习数据库设计、服务器部署等一系列后端技术,任务艰巨。正当我为此感到头疼时,一位前辈向我推荐了极态云。经过一番调研后发现,它简直就是为像我这样缺乏后端经验但又急需快速完成项目的人量身定做的解决方案!
作为一个前端小白,我竟然搞定了一个小程序的交付
|
27天前
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
34 3
|
1月前
|
监控 前端开发 JavaScript
前端稳定性工具-Sentry
【11月更文挑战第9天】Sentry 是一个开源的错误和性能监控平台,支持多种编程语言和框架。它能够捕获前端应用中的各种错误和性能问题,提供详细的错误信息和用户行为关联,帮助开发团队快速定位和解决问题,优化应用性能。但需注意隐私保护、数据准确性和成本控制。