Sentry 私有部署和配置笔记

  • 官方 SaaS SDK:需付费。
  • 自行搭建:需满足资源配置(建议 4 CPU、16 GB 内存、20 GB 存储),并安装 Docker 19.03.6及以上, Docker Compose 2.32.2 及以上。

私有化部署步骤

Github 地址:https://github.com/getsentry/self-hosted

  1. 下载 Release 版本源码并解压。
  2. 在项目根目录执行 ./install.sh 完成安装。
  3. 执行 docker-compose up -d 启动服务。
  4. 服务会监听宿主机 9000 端口,并重定向到容器内 80 端口。
  5. 将启动以下组件:Web、Nginx、Worker、API、PostgreSQL 数据库。
  6. 首次访问需创建管理员账号与密码并登录。
  7. 进入 Settings 页面创建 Team。
  8. Project 中创建项目,按技术栈选择对应语言/框架配置。
  9. 创建项目后会给到对应的依赖 sentry-sdk安装方案 、配置说明,以及生成 http:<id>@<域名> 配置 DSN 地址
  10. 在业务项目中集成对应 SDK,并按需配置采样率与 PII 等选项:
    • traceSampleRate0-1.0 性能日志采样率,可以调小,避免生产环境访问频繁占用过多的性能
    • sendDefaultPii(Send Default Personal Identification Information):boolean, ,是否发送个人的标识信息,主要后台日志聚类,比如根据用户名、浏览器版本、操作系统做错误日志聚类分析

ISSUE 界面

常用界面,可以看到内容:

  • 相同日志的出现次数
  • 用户 IP 、浏览器、操作系统版本
  • 错误接口、用户 IP 、用户信息
  • 堆栈信息,可以看到哪个脚本那行代码出错
  • 每种出错类型的日志占比
  • Cookie、头部类型消息

性能分析界面

  • 页面加载时间
  • P50 线:数据从小到大排序后 50%位置的内容
  • P95 线:数据从小到大排序后 90% 位置的内容,通常比 P50 大

自行捕获错误

使用 sentry 的 captureException / captureMessage 向sentry 推送错误或者消息

Vue 环境版本集成

下载 @sentry/vue 插件,集成了 @sentry/browser 和 Vue 功能的集成强化

javascript 复制代码
import { createApp } from "vue";
import * as Sentry from "@sentry/vue";

const app = createApp({
  // 根组件配置
});

// 初始化 Sentry,dsn 为事件上报地址
Sentry.init({
  app,
  dsn: "__PUBLIC_DSN__", // 上面部署后配置得到的 DSN 
  integrations: [
    // 集成 Vue Router,用于路由级别的性能追踪与错误关联
    Sentry.browserTracingIntegration({ router }),
  ],
});

SourceMap 映射

通过官方向导可快速接入 SourceMap 上传与校验,会引导完成构建配置调整:

bash 复制代码
npx @sentry/wizard@latest -i sourcemaps

SourceMap 在构建阶段生成并上传,开发环境通常不用上传源映射。

SouceMap 未生效排查

  1. 未正确构建和上传 SourceMap
  2. sentry 会在每个源码里添加 e._sentryDebugIds=e._sentryDebugIds||{} 用于源映射
  3. 可以通过 --validate 验证源码文件正常
  4. map 文件被 gzip 压缩,sentry 目前不支持解析

Vite 配置

  1. 额外安装

    npm install @sentry/vite-plugin --save-dev

  2. .env 配置

    SENTRY_AUTH_TOKEN=sentry_token

  3. 在 Vite 中配置 sentry-vite-plugin,在上传完成后删除本地源映射表的内容,也可以在配置服务器拒绝 js.map 被访问和请求

javascript 复制代码
import { defineConfig } from "vite";
import { sentryVitePlugin } from "@sentry/vite-plugin";
export default defineConfig({
  build: {
   // 配置 hiddden 或者 true,Sentry 通过 debug_id 关联源码,hidden 可不暴露 .map 请求
    sourcemap: "hidden", 
  },
  plugins: [
    // 把插件放在最后方
    sentryVitePlugin({
      org: "org", // sentry 上配置的组织名称
      project: "project",  // sentry上配置的项目名称
      authToken: process.env.SENTRY_AUTH_TOKEN, // 上传 token
      sourcemaps: {
        // 构建后上传,并删除相关 .map 文件,避免部署后暴露
        filesToDeleteAfterUpload: [
          "./**/*.map",
          "./dist/**/*.map",
        ],
      },
    }),
  ],
});

参考内容

相关推荐
艾莉丝努力练剑4 分钟前
【Linux系统:信号】线程安全不等于可重入:深度拆解变量作用域与原子操作
java·linux·运维·服务器·开发语言·c++·学习
笑鸿的学习笔记5 分钟前
Qt与CMake笔记之option、宏传递与Qt Creator项目设置
开发语言·笔记·qt
red_redemption8 分钟前
自由学习记录(155)
学习
北京理工大学软件工程11 分钟前
九支-听课笔记(9-12节)
笔记
青葱味奶糖15 分钟前
管理学之深度管理21法则--笔记1
笔记·深度管理·陈浩老师
菜鸟‍26 分钟前
【论文学习】Disco:基于邻接感知协同着色的密集重叠细胞实例分割方法
人工智能·学习·算法
凉、介27 分钟前
Flash 块设备驱动开发
c语言·驱动开发·笔记·学习·操作系统·嵌入式
-Springer-42 分钟前
STM32 学习 —— 个人学习笔记10-2(I2C 通信外设 & 硬件 I2C 读写 MPU6050)
笔记·stm32·学习
chushiyunen43 分钟前
ai人工智能笔记(二)
笔记
爱吃生蚝的于勒1 小时前
【Linux】重中之重!TCP协议
linux·运维·服务器·网络·学习·tcp/ip