四、前端监控之接入Sentry到项目

news2024/11/24 20:10:17

前言

一、前端监控之异常监控

二、前端监控之方案调研

三、前端监控之Sentry的介绍

以上是这个专题之前的几篇文章,欢迎观摩

Sentry的接入

1、新建项目

在sentry后台登陆后,进入监控项目的界面,如:

 点击右上角的  add new project ,我们可以创建一个新的项目。

 选择Vue,再做简单设置,project创建成功后会跳转到SDK安装方法。

新建完项目后,就会生成一个DSN串。这个DSN后面会应用到代码中,注意保管

 DSN是链接我们要上报的项目和sentry服务端的钥匙。每当我们在sentry服务端创建一个新的项目,都会得到一个独一无二的DSN。在项目初始化时需要配置DSN到项目。这样客户端报错,服务端就能抓到对应项目的错误了。

2SDK的安装

SDK的引用和我们平时项目引用第三方包的方式完全一样。有cdn引入和npm包注入两种方式,这两种引入方式配置也一样。

cdn引入:

<script src="https://browser.sentry-cdn.com/5.6.1/bundle.min.js" integrity="sha384-pGTFmbQfua2KiaV2+ZLlfowPdd5VMT2xU4zCBcuJr7TVQozMO+I1FmPuVHY3u8KB" crossorigin="anonymous"></script>

npm安装:

npm i @sentry/browser @sentry/integrations -S

3、应用与配置

// When using npm, import Sentry
import * as Sentry from '@sentry/browser';

Sentry.init({ dsn: 'https://e88fad1ac10a4d86ba291f17f54b653c@sentry.io/1509915' });

注意:

如果是Vue项目,请不要在开发环境使用sentry。
因为Vue项目使用sentry时,需要配置@sentry/integrations。而@sentry/integrations是通过自定义Vue的errorHandler hook实现的,这将会停止激活Vue原始logError。会导致Vue组件中的错误不被打印在控制台中。所以vue项目不要在开发环境使用sentry。


这里我再补充一下,为什么Vue项目要配置sentry集成器?
这里说的sentry集成器是用于增强sentry Api的SDK。 VUE项目配置了它, 就可以捕获引发错误的组件名称和props状态。

此外,Integrations.Vue有以下配置选项:
1. Vue:可选的,如果你不传入,则window.Vue必须存在;
2. attachProps:可选的,默认为true。如果将其设置为false,Sentry将禁止发送所有Vue组件的活动组件的名称和props状态。
3. logErrors:可选的,默认为false。如果设置为true,Sentry会调用原始Vue的logError功能。

示例

import Vue from 'vue'
import * as Sentry from '@sentry/browser'
import * as Integrations from '@sentry/integrations'

Sentry.init({
  release: VERSION,
  dsn: 'https://e88fad1ac10a4d86ba291f17f54b653c@sentry.io/1509916',
  integrations: [
    new Integrations.Vue({
      Vue,
      attachProps: true // 是否上报组件的 props    
    })
  ]
})

4、写段业务代码看看效果

写一段异常代码:

created() { 
  let a = null
  a.split('')
}

5、sentry后台查看

我们再进入sentry看看监控的效果:

 

Sentry的配置

API

常用选项

跨 SDK 的常用选项列表。这些在所有 SDK 中的工作方式或多或少都相同,但会存在一些细微的差异以更好地支持平台。可以从环境变量 ( SENTRY_DSNSENTRY_ENVIRONMENTSENTRY_RELEASE) 中读取的选项会被自动读取。

dsn

DSN告诉SDK何处发送事件。如果未提供此值,SDK 将尝试从SENTRY_DSN环境变量中读取它。如果该变量也不存在,SDK 将不会发送任何事件。

在没有回退的进程环境(例如浏览器)的运行时中不适用。

了解有关DSN 利用率的更多信息。

release

设置发布。主要是让上报的错误与 上传的 sourceMaps 的 release 对应上。

一些 SDK 会尝试自动配置开箱即用的发布,但最好手动设置它以确保发布与您的部署集成或源地图上传同步。发布名称是字符串,但 Sentry 会检测到某些格式,并且可能会以不同的方式呈现。了解有关如何发送发布数据的更多信息,以便 Sentry 可以告诉您发布之间的回归并在发布文档沙箱中识别潜在来源 。

默认情况下,SDK 将尝试从SENTRY_RELEASE环境变量中读取此值(在浏览器 SDK 中,window.SENTRY_RELEASE如果可用,则会读取此值)。

发布是部署到环境中的代码版本。当您向 Sentry 提供有关您的版本的信息时,您可以:

  1. 确定新版本中引入的问题和回归
  2. 预测哪个提交导致了问题以及谁可能负责
  3. 通过在提交消息中包含问题编号来解决问题
  4. 部署代码时接收电子邮件通知

此外,发布用于将源映射应用到缩小的 JavaScript 以查看原始的、未转换的源代码。

配置客户端 SDK 时,请包含发布 ID(通常称为“版本”)。

版本名称不能:

  1. 包含换行符、制表符、正斜杠 ( /) 或反斜杠 ( \)
  2. 是(全部)句号(.)、双句号(..)或空格( 
  3. 超过 200 个字符

该值可以是任意的,但我们建议使用以下任一命名策略:

  1. 语义版本控制package@versionpackage@version+build(例如,my.project.name@2.3.12+1234
  • package是项目/应用程序的唯一标识符(CFBundleIdentifier在 iOS 上,packageName在 Android 上)
  • version是类似 semver 的结构<major>.<minor?>.<patch?>.<revision?>-<prerelease?>CFBundleShortVersionString在 iOS 上,versionName在 Android 上)
  • build是标识应用迭代的数字(CFBundleVersion在 iOS 上,versionCode在 Android 上)
  1. 提交 SHA:如果您使用 DVCS,我们建议使用标识哈希(例如,提交 SHA,da39a3ee5e6b4b0d3255bfef95601890afd80709)。您可以让 Sentry CLI 为支持的版本控制系统自动确定此哈希,使用sentry-cli releases propose-version.

每个组织的发布都是全球性的;在它们前面加上一些特定于项目的东西,以便于区分。

Sentry.init({
  release: "my-project-name@2.3.12",
});

在 Node/npm 环境中使用 JavaScript 执行此操作的一种常见方法是使用process.env.npm_package_version类似的方法:

Sentry.init({
  release: "my-project-name@" + process.env.npm_package_version,
});

 如何使版本可用于您的代码取决于您。例如,您可以使用在构建过程中设置的环境变量。

这将使用发布值标记每个事件。我们建议您在部署新版本之前将其告知 Sentry,因为这将解锁更多功能,如我们关于版本的文档中所述。但如果您不这样做,Sentry 将在第一次看到具有该发布 ID 的事件时在系统中自动创建一个发布实体。

配置 SDK 后,您可以安装存储库集成或手动为 Sentry 提供您自己的提交元数据。阅读我们有关设置发布的文档,以获取有关集成、关联提交以及在部署发布时告诉 Sentry 的更多信息。

更多:Releases | Sentry Documentation

environment

设置环境。此字符串是自由格式的,默认情况下未设置。

主要是为了区分错误出现的 不同环境。

一个版本可以与多个环境相关联,以便在 UI 中将它们分开(想想stagingvsprod或类似的)。

默认情况下,SDK 会尝试从SENTRY_ENVIRONMENT环境变量中读取这个值(浏览器 SDK 除外,因为它不适用)。

Environment是 Sentry 支持的标签,您可以(并且应该)将其添加到您的 SDK。通常,标签接受任何值,但它旨在引用您的代码部署的命名约定,例如development、testing、staging或production。

使用项目来分隔不同的服务或应用程序,使用环境来分隔不同的环境或每个环境中的发布阶段。如果您在 Sentry 的 Web UI 的全局标题中选择了一个或多个项目,则环境选择器仅显示与所选项目中的事件关联的环境。

 

attachStacktrace

启用后,堆栈跟踪会自动附加到所有记录的消息。堆栈跟踪总是附加到异常上;但是,当设置此选项时,堆栈跟踪也会随消息一起发送。例如,此选项意味着堆栈跟踪出现在所有日志消息旁边。

此选项是 off 默认设置。

对于有堆栈跟踪和没有堆栈跟踪的事件,Sentry 中的分组是不同的。因此,当您为某些事件启用或禁用此标志时,您将获得新组。

tunnel

设置将用于传输捕获事件的 URL,而不是使用 DSN。这可用于解决广告拦截器或对发送到 Sentry 的事件进行更精细的控制。此选项需要实现自定义服务器端点。在处理广告拦截器中了解更多信息并查找示例。

denyUrls

与不应发送到 Sentry 的错误 URL 匹配的字符串或正则表达式模式列表。默认情况下,将发送所有错误。这是对整个文件 URL 的“包含”匹配。结果,如果你添加foo.com它,它也会匹配上https://bar.com/myfile/foo.com。

默认情况下,将发送所有错误。

allowUrls

与错误 URL 匹配的字符串或正则表达式模式列表,应该专门发送到 Sentry。默认情况下,将发送所有错误。这是对整个文件 URL 的“包含”匹配。结果,如果你添加foo.com它,它也会匹配上https://bar.com/myfile/foo.com。

默认情况下,将发送所有错误。

maxBreadcrumbs

此变量控制应捕获的面包屑的总量。这默认为100.

autoSessionTracking

当设置为 时true,SDK 将向 Sentry 发送会话事件。所有浏览器 SDK 都支持这一点,每次页面加载和页面导航向 Sentry 发出一个会话。在移动 SDK 中,当应用程序进入后台超过 30 秒时,会话将结束。

initialScope

要设置为初始范围的数据。初始作用域可以定义为对象或回调函数,如下所示。

对象:

Sentry.init({
  dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
  debug: true,
  initialScope: {
    tags: {"my-tag": "my value"},
    user: {id: 42, email: "john.doe@example.com"},
  }
});

回调函数:

Sentry.init({
  dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
  debug: true,
  initialScope: scope => {
    scope.setTags({ a: 'b' });
    return scope;
  },
});

maxValueLength

单个值在被截断之前可以包含的最大字符数(默认为250)。

normalizeDepth

Sentry SDK 将任何上下文数据标准化到给定的深度。任何包含结构比这更深的数据的键都将被修剪并使用其类型([Object][Array])进行标记,而无需进一步遍历树。默认情况下,步行执行3深度级别。

debug

打开或关闭调试模式。如果启用调试,如果发送事件出现问题,SDK 将尝试打印有用的调试信息。默认值为始终false。通常不建议在生产中打开它,尽管打开debug模式不会引起任何安全问题。

集成配置

对于许多平台 SDK 集成,可以与其一起配置。在作为init()调用的一部分发生的某些平台上,在其他一些平台上,应用不同的模式。

资料:集成(有一些特别的功能):Integrations for Browser JavaScript | Sentry Documentation

integrations

在某些 SDK 中,通过库初始化时的此参数配置集成。有关详细信息,请参阅我们的特定集成文档。

Automatic Instrumentation 自动仪表

捕获事务要求您首先在您的应用程序中设置跟踪(如果您还没有)。

该@sentry/tracing软件包提供了一个BrowserTracing集成,以添加用于监视浏览器应用程序性能的自动检测。

该BrowserTracing集成会为每个页面加载和导航事件一个新的事务,并为每创建一个子跨度XMLHttpRequest或fetch发生而这些交易是开放的要求。了解有关跟踪、事务和跨度的更多信息。

启用检测

要启用跟踪,请BrowserTracing在您的 SDK 配置选项中包含集成。(注意,使用 ESM 模块时,@sentry/*主导入必须在@sentry/tracing导入之前。)

配置完成后,您将在 Sentry UI 中看到pageload和navigation transactions。

// If you're using one of our integration packages, like `@sentry/angular`,// substitute its name for `@sentry/browser` here
import * as Sentry from "@sentry/browser";
import { Integrations as TracingIntegrations } from "@sentry/tracing"; // Must import second
Sentry.init({
  dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
  integrations: [
    new TracingIntegrations.BrowserTracing({
      tracingOrigins: ["localhost", "my-site-url.com", /^\//],
      // ... other options
    }),
  ],
  // We recommend adjusting this value in production, or using tracesSampler
  // for finer control
  tracesSampleRate: 1.0,
});

配置选项:

Automatic Instrumentation for Browser JavaScript | Sentry Documentation

tracingOrigins

如果您的前端正在向不同的域发出请求,则需要将其添加到该域以将sentry-trace标头传播到后端服务,这是将事务链接在一起作为单个跟踪的一部分所必需的。

默认值是['localhost', /^\//]

例如:

前端应用程序由example.com.

后端服务由 提供api.example.com。

前端应用程序对后端进行 API 调用。

将tracingOrigins选项设置为['api.example.com']。

现在传出的 XHR/fetch 请求api.example.com将sentry-trace附加标头。

Sentry.init({
  // ...
  integrations: [
    new Integrations.BrowserTracing({
      tracingOrigins: ["api.example.com"], // 可以监听与后端通迅的api接口
    }),
  ],
});

beforeNavigate

beforeNavigate在每个pageload或navigation事务开始时调用,并传递一个包含事务数据的对象。可以选择修改该数据,或通过返回完全删除事务undefined。

shouldCreateSpanForRequest

过滤掉request中的空白字符是XHR的健康检查

Sentry.init({
  // ...
  integrations: [
    new Integrations.BrowserTracing({
      shouldCreateSpanForRequest: url => {
        // Do not create spans for outgoing requests to a `/health/` endpoint
        return !url.match(/\/health\/?$/);
      },
    }),
  ],
});

idleTimeout

等待事务完成的空闲时间(以毫秒为单位)。

默认值为1000

startTransactionOnLocationChange

此标志启用或禁用navigation在历史更改时创建事务。

默认值为true

startTransactionOnPageLoad

此标志启用或禁用pageload在第一次页面加载时创建事务。

默认值为true

maxTransactionDuration

在将其标记为“deadline_exceeded”之前,交易的最长持续时间(以秒为单位)。如果您不希望以这种方式标记事务,请设置maxTransactionDuration为 0。

默认值为600

markBackgroundTransactions

此选项标记当Jabs移动到背景时的事务与“已取消”。由于浏览器后台选项卡计时不适合精确测量操作,并且可能以不确定的方式影响您的统计信息,因此我们建议启用此选项。

默认值为true

defaultIntegrations

这可用于禁用默认添加的集成。当设置为 时false,不添加默认集成。

子函数

这些选项可用于以各种方式挂钩 SDK 以自定义事件报告。

beforeSend

此函数使用 SDK 特定的事件对象调用,并且可以返回修改后的事件对象或不返回任何内容以跳过报告事件。例如,这可用于在发送前手动剥离 PII。

通过使用beforeSend回调方法和配置、启用或禁用集成,配置您的 SDK 以过滤错误事件。

更多:Filtering for Browser JavaScript | Sentry Documentation

beforeBreadcrumb

在将面包屑添加到范围之前,使用特定于 SDK 的面包屑对象调用此函数。当函数没有返回任何内容时,面包屑被丢弃。要传递面包屑,请返回包含面包屑对象的第一个参数。回调通常会获取第二个参数(称为“提示”),其中包含创建面包屑的原始对象,以进一步自定义面包屑的外观。

转换

传输用于向 Sentry 发送事件。传输可以在某种程度上进行定制,以更好地支持高度特定的部署。

transport

切换用于发送事件的传输。其工作原理取决于 SDK。例如,它可以用于捕获事件以进行单元测试或通过一些需要代理身份验证的更复杂的设置来发送它。

采样率

更多:Sampling for Browser JavaScript | Sentry Documentation

sampleRate

配置错误事件的采样率,范围为0.01.0。默认值1.0表示发送 100% 的错误事件。如果设置为0.1仅发送 10% 的错误事件。事件是随机挑选的。

tracesSampleRate

一个介于 0 和 1 之间的数字,控制给定交易将被发送到 Sentry 的百分比机会。(0 代表 0%,1 代表 100%。)同样适用于应用程序中创建的所有交易。tracesSampler必须定义此或必须定义以启用跟踪。

tracesSampler

负责确定给定交易将被发送到 Sentry 的百分比机会的函数。它将自动传递有关事务和创建它的上下文的信息,并且必须返回一个介于0(0% 被发送的机会)和1(100% 被发送的机会)之间的数字。也可用于过滤交易,为不需要的交易返回 0。tracesSampleRate必须定义此或必须定义以启用跟踪。

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

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

相关文章

用Go编写ChatGPT插件

ChatGPT插件平台有望成为影响深远的"下一件大事"&#xff0c;因此对于开发者来说&#xff0c;有必要对ChatGPT插件的开发有一定的了解。原文: Writing a ChatGPT Plugin With Go[1] 我工作的附带福利之一是偶尔可以接触试用一些很酷的新技术&#xff0c;最近的一项技…

详细介绍如何基于ESP32实现低功耗的电子纸天气显示器--附完整源码

实现界面展示 这是一款天气显示器,由支持 wifi 的 ESP32 微控制器和 7.5 英寸电子纸(又名电子墨水)显示器供电。当前和预测的天气数据是从 OpenWeatherMap API 获取的。传感器为显示屏提供准确的室内温度和湿度。 该项目在睡眠时消耗约 14μA,在约 10 秒的清醒期…

Tomcat 部署时 war 和 war exploded区别

在 Tomcat 调试部署的时候&#xff0c;我们通常会看到有下面 2 个选项。 是选择war还是war exploded 这里首先看一下他们两个的区别&#xff1a; war 模式&#xff1a;将WEB工程以包的形式上传到服务器 &#xff1b;war exploded 模式&#xff1a;将WEB工程以当前文件夹的位置…

Qt 查找文件夹下指定类型的文件及删除特定文件

一 查找文件 bool MyXML::findFolderFileNames() {//指定文件夹名QDir dir("xml");if(!dir.exists()){qDebug()<<"folder does not exist!";return false;}//指定文件后缀名&#xff0c;可指定多种类型QStringList filter("*.xml");//指定…

js中迭代器和可迭代对象

一、迭代器 在JavaScript中&#xff0c;迭代器也是一个具体的对象&#xff0c;这个对象需要符合迭代器协议&#xff08;iterator protocol&#xff09; 迭代器协议定义了产生一系列值&#xff08;无论是有限还是无限个&#xff09;的标准方式&#xff1b; 在JavaScript中这个…

Linux安装FRP(内网穿透)

项目简介需求背景 1.FileBrowser访问地址&#xff1a;http://X.X.X.X:8181&#xff0c;该地址只能在局域网内部访问而无法通过互联网访问&#xff0c;想要通过互联网 访问到该地址需要通过公网IP来进行端口转发&#xff0c;通常家里的路由器IP都不是公网IP&#xff0c;通常公司…

2023年6月GESP C++ 一级试卷解析

2023年6月GESP C 一级试卷解析 一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 1.以下不属于计算机输出设备的有&#xff08; &#xff09;。 A.麦克风 B.音箱 C.打印机 D.显示器 【答案】A【考纲知识点】计算机基础&#xff08;一级&#xff09; 【解析…

科大讯飞永久免费GPT入口来了!!!

讯飞GPT永久免费使用入口注册链接&#xff1a;讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞。 登录讯飞账号后&#xff0c;点击进入体验。 进入体验页面后&#xff0c;选择景点推荐。 笔者让其写一篇关于讯飞GPT介绍的文案。 讯飞GPT是一款由讯飞公司推出的人工智能语…

14. 完整模型验证套路

14.1 GPU训练30轮次 import torchvision import torch from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter import time# 定义训练的设备 #device torch.device("cpu") device torch.device("…

第七周第六天学习总结 | MySQL入门及练习学习第一天

实操练习&#xff1a; 1.查看数据库 2.查询当前数据库 3.创建一个名为 lianxi 的数据库 4.删除一个名为 shanchu 的数据库&#xff08;如果存在就删除&#xff0c;不存在不删除&#xff09; 5.切换至 lianxi 数据库下&#xff0c;并验证 6.查询 lainxi 数据库下的所有数据…

DMK5框选变量之后不显示其他位置的此变量高亮

使用软件MDK5.3.8版本 如下在2的位置选择之后&#xff0c;其他同样的变量没有高亮&#xff0c;因为1的原因折叠了&#xff1b; 展开折叠之后就可以了

Android学习之路(10) setContentView详解

一、简介 setContentView我们在Activity中经常见到&#xff0c;它的作用就是把我们的布局文件放在Activity中显示&#xff0c;下面我们根据源码分析setContentView是如何做到的 二、源码分析 1.两种setContentView 注意Activity的setContentView和AppCompatActivity的setCo…

【SpringBoot】如何使用 HandlerInterceptor 拦截器? 为什么不使用 SpingAOP ?

文章目录 前言一、为什么不使用 SpringAOP ?1, 需求分析2, SpringAOP 能实现吗? 二、使用 HandlerInterceptor1, 实现 HandlerInterceptor 接口2, 将自定义拦截器加入到系统配置 三、HandlerInterceptor 实现原理源码分析 总结 前言 各位读者好, 我是小陈, 这是我的个人主页,…

基于全新电脑环境安装pytorch的GPU版本

前言&#xff1a; 距离第一次安装深度学习的GPU环境已经过去了4年多&#xff08;当时TensorFlow特别麻烦&#xff09;&#xff0c;现在发现安装pytorch的GPU版本还是很简单方便的&#xff0c;流程记录如下。 安装步骤&#xff1a; 步骤一&#xff1a;官网下载Anaconda Free…

【无法联网】电脑wifi列表为空的解决方案

打开电脑, 发现wifi列表为空, 点击设置显示未连接 首先检查是不是网卡驱动有问题, cmd, devmgmt.msc 找到网络适配器, 看看网卡前面是否有感叹号, 如果没有则说明网卡没问题, 有问题则重装驱动 看看网络协议是否设置正确 找到"控制面板\所有控制面板项\网络和共享中心&…

微服务通信[HTTP|RPC同步通信、MQ异步通信]

概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范&#xff0c;将服务对外暴露的HTTP调用方式为REST API(如GET…

飞腾FT-2000/4、D2000 log报错指导(3)

在爱好者群中遇见了很多的固件问题,这里总结记录了大家的交流内容和调试心得。主要是飞腾桌面CPU FT-2000/4 D2000相关的,包含uboot和UEFI。希望对大家调试有所帮助。 这个专题会持续更新,凑够一些就发。 23 在s3 唤醒时报错如下 check suspend ,Platform exception report…

你对SPA单页面的理解,它的优缺点分别是什么?如何实现SPA应用呢?

一、什么是SPA SPA&#xff08;single-page application&#xff09;&#xff0c;翻译过来就是单页应用SPA是一种网络应用程序或网站的模型&#xff0c;它通过动态重写当前页面来与用户交互&#xff0c;这种方法避免了页面之间切换打断用户体验在单页应用中&#xff0c;所有必…

【kubernetes】使用KubeSphere devops部署我的微服务系统

KubeSphere Devops 入门使用KubeSphere的Devops功能部署"我的微服务系统" &#xff08;内容学习于尚硅谷云原生课程&#xff09; kubesphere devops官方文档&#xff1a; https://v3-1.docs.kubesphere.io/zh/docs/devops-user-guide/how-to-use/create-a-pipeline-u…

nginx调优(二)

一、event模块: 用于配置服务器的事件驱动机制的模块。它定义了 Nginx 如何处理并发连接和网络事件&#xff0c;以及如何与底层操作系统的事件机制交互。 1.最大并发连接数&#xff1a; worker_connections 65536; 2.选择事件驱动&#xff1a; nginx默认使用epoll时间驱动类…