手把手教你在 Vue 项目中集成 Sentry:从接入到私有部署全流程解析

878 阅读4分钟

背景:由于用户返回的问题在本地复现比较困难,于是想在平台接入监控系统,为什么要使用sentry?因为他支持用户操作的回放功能✌️

一、示例使用

  • 安装依赖
npm install @sentry/vue @sentry/tracing
  • 初始化配置
import * as Sentry from '@sentry/vue';
import { Integrations } from '@sentry/tracing';
import Vue from 'vue';
import router from './router';
import App from './App.vue';

Sentry.init({
  Vue,
  dsn: 'https://xxx.ingest.sentry.io/xxx',
  integrations: [
    new Integrations.BrowserTracing({
      routingInstrumentation: Sentry.vueRouterInstrumentation(router),
      tracingOrigins: ['localhost', 'yourdomain.com'],
    }),
  ],
  tracesSampleRate: 1.0,
});

  • 捕获异常
// 手动捕获

try {
  // ...
} catch (err) {
  Sentry.captureException(err);
}

// 捕获promise异常

window.addEventListener('unhandledrejection', (event) => {
  Sentry.captureException(event.reason);
});

  • 还支持自定义用户的上下文
Sentry.setUser({
  id: 'user-id',
  email: 'user@example.com',
});

二、项目中的使用

1.封装初始化sentry方法


import Vue from 'vue'
import * as Sentry from '@sentry/vue'

export default (router) => {
    const dsn = 'https://xxxxxx/123312312' // 项目唯一标识
    // 定义 Sentry 配置
    const sentryConfig = {
      Vue,
      dsn,
      integrations: [
        Sentry.browserTracingIntegration({
          router,
        }),
        Sentry.replayIntegration({
          maskAllText: false,
          blockAllMedia: false,
        }),
      ],
      tracePropagationTargets: [/^https:\/\/(\w+\.test|test|localhost)\.com\.cn(\/.*)?$/],
      tracesSampleRate: 1.0,
      replaysSessionSampleRate: 0.1,
      replaysOnErrorSampleRate: 1.0,
      release: process.env.SENTRY_RELEASE || 'development',
    }

    // 检查是否已经初始化 Sentry
    if (!window.SentryInitialized) {
      Sentry.init(sentryConfig)
      window.SentryInitialized = true // 标记 Sentry 已初始化
    }
  }
}
  • DSN:在 Sentry 中,DSN就像是一把“钥匙”,告诉 SDK 把错误数据发送到哪个项目。每个 Sentry 项目都有唯一的 DSN
  • browserTracingIntegration:
    • 用于前端性能监控,会记录页面加载时间、路由跳转耗时、XHR 请求等
    • 监听 Vue Router 的导航变更
  • replayIntegration:
    • 用于录制用户会话的插件
    • maskAllText:不对页面文字进行脱敏
    • blockAllMedia:不屏蔽页面上的媒体内容
  • tracePropagationTargets:正则匹配了 test.com.cn、其子域名和 localhost,确保 tracing 不泄露给其他域名
  • tracesSampleRate:设置前端性能数据的采样率(1.0 代表 100% 采样,适合初期调试,建议上线后设置为 0.1 ~ 0.2)
  • replaysSessionSampleRate:有 10% 的用户会被录制会话,无论是否报错
  • replaysOnErrorSampleRate: 所有发生错误的用户都会被录制,便于事后排查

2. 使用sentry

import useSentry from './sentry'
import router from './router'



useSentry(router)
  • ⚠️ 该router为VueRouter对象: 在这里插入图片描述

3. axios捕获异常

service.interceptors.response.use(
  response => {
    // 这里处理响应数据
    return response
  },
  error => {
    // 这里处理响应错误,比如上报 Sentry
    Sentry.captureException(error)
    return Promise.reject(error)
  }
)

4. 自定义用户的上下文

 Sentry.setUser({
    id: userInfo.id,
    username: userInfo.displayName,
    email: userInfo.email,
  })

设置之后,在私有化部署的sentry上,能按照特定用户来区分错误信息

在这里插入图片描述

三、私有化sentry(基于Docker)

1. 配置要求

  • Linux/macOS(推荐 Ubuntu 20.04+)
  • Docker(>= 20.10)
  • Docker Compose(v2+)
  • 至少 4核 CPU、16GB 内存
  • Python 环境(用于一些辅助脚本)

2. 获取 Sentry 源码

Sentry 官方提供了私有部署的专用 repo:

git clone https://github.com/getsentry/self-hosted.git
cd self-hosted
// 切换到最新稳定分支
git checkout master

3. 安装依赖并初始化配置

# 拉取镜像并创建配置文件,需要 root 权限
./install.sh

运行过程会执行:

  • 拉取 Docker 镜像
  • 自动创建 .env 配置文件
  • 自动生成密钥等必要配置

4. 修改配置

有需要可以在 .env 文件中修改默认设置:

  • SENTRY_ADMIN_EMAIL:默认管理员邮箱
  • SENTRY_DB_PASSWORD:PostgreSQL 密码

5. 启动服务

一切准备好后,运行:

docker compose up -d

6. 创建管理员账户

服务启动后,进入容器内执行命令创建管理员账号:

docker compose run --rm web createuser

根据提示输入邮箱、用户名、密码

然后就可以通过http://your-server-ip:9000来访问你私有化的sentry系统了

7. 上传 Source Map 到 Sentry 系统

为什么要上传source map:

构建后的 JavaScript 文件是压缩混淆的,直接查看错误堆栈会非常困难。为了解决这个问题,我们可以将构建产 物中的 Source Map 文件 上传至 私有化部署的 Sentry,这样就能准确还原源码中的报错位置

// 安装sentry-cli 工具
npm install --save-dev @sentry/cli

// 设置环境变量
export SENTRY_AUTH_TOKEN=xxx
# 私有部署的 Sentry 地址
export SENTRY_URL=https://sentry.your-company.com

// 上传Source Map
# 1. 创建一个新的版本(release)
sentry-cli releases new v1.0.0

# 2. 上传构建产物中的 Source Map 文件
sentry-cli releases files v1.0.0 upload-sourcemaps ./dist/js --rewrite

# 3. 结束发布
sentry-cli releases finalize v1.0.0

如何获取SENTRY_AUTH_TOKEN

  1. 进入右上角的用户头像 → Account Settings
  2. 点击左侧导航栏的 Auth Tokens
  3. 生成一个新的 Token(选择 "project:write" 权限即可)
  4. 将生成的 Token 用于环境变量 SENTRY_AUTH_TOKEN

在这里插入图片描述

8. 获取 DSN 并接入前端项目

    1. 在sentry系统中创建一个新项目
    1. 在项目设置中复制 DSN 在这里插入图片描述
  • 将该dsn替换掉(二.1封装初始化sentry方法)步里面的就ok了

已经接入的项目会发请求记录用户操作日志 在这里插入图片描述 具体用户操作回放过程涉及到公司隐私,就不做展示了