前端开发 React 结合Sentry 实现性能监控

Sentry 是一个强大的错误跟踪和性能监控工具,能够帮助开发者在 React 应用中监控并诊断问题。它可以记录和报告前端应用中的错误和性能瓶颈,使开发者能够快速识别和解决问题。以下是关于 Sentry 在 React 应用中集成和使用的详细说明。

1. 创建 Sentry 项目

访问 Sentry 官网 并注册一个账号。

登录后,创建一个新项目,选择平台为 JavaScript 或 React 。

创建完成后,Sentry 会给出一段初始化代码,稍后会在代码中用到。

2. 安装 Sentry SDK

在你的 React 项目根目录下,运行以下命令来安装 Sentry SDK:

javascript 复制代码
npm install @sentry/react @sentry/tracing

3. 配置 Sentry

在应用的入口文件中(如 index.js 或 App.js),进行 Sentry 的初始化配置。使用 Sentry 提供的代码模板进行初始化,并配置必要的参数。

javascript 复制代码
// index.js 或 App.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import * as Sentry from '@sentry/react';
import { BrowserTracing } from '@sentry/tracing';

sentry.init({
  dsn: 'YOUR_SENTRY_DSN', // 替换为你的 DSN 地址
  integrations: [new BrowserTracing()],
  // 设置跟踪采样率, 介于 0.0 到 1.0 之间
  tracesSampleRate: 1.0,
  // 设置发布版本, 可选
  release: 'my-project-name@1.0.0',
});

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);
  • dsn:用于指定你的 Sentry DSN 地址,这个在创建项目时会提供。

  • integrations:Sentry 提供的集成工具,这里包括了 BrowserTracing,用于性能监控。

  • tracesSampleRate:用于指定性能跟踪的采样率,1.0 表示 100% 采样,可以根据需要调整。

  • release:可以用来标识当前发布的版本,便于错误管理。

4. 在应用中捕获错误

通过 ErrorBoundary 捕获错误并将其上传到 Sentry。Sentry 自带一个 ErrorBoundary 组件,可以直接用于 React 应用中。

javascript 复制代码
import * as Sentry from '@sentry/react';

function App() {
  return (
    <Sentry.ErrorBoundary fallback={<p>出现错误,请稍后再试。</p>}>
      <YourMainComponent />
    </Sentry.ErrorBoundary>
  );
}

export default App;

5. 手动捕获错误

如果需要手动捕获某些自定义错误,可以使用 Sentry.captureException 方法。

javascript 复制代码
try {
  // 某些可能抛出异常的代码
} catch (error) {
  Sentry.captureException(error);
}

6. 捕获日志信息

除了捕获异常,Sentry 还支持捕获普通日志信息:

javascript 复制代码
Sentry.captureMessage('This is a log message.');

7. 添加上下文信息

Breadcrumbs 可以在错误发生前记录用户的操作路径。可以手动添加自定义 Breadcrumb:

javascript 复制代码
Sentry.addBreadcrumb({
  category: 'auth',
  message: 'User logged in',
  level: 'info',
});

8. 调试与验证

集成完成后,最好进行测试和验证,确保错误能够正确地发送到 Sentry。可以在应用中故意触发一个错误并检查 Sentry 控制台。

javascript 复制代码
// 模拟错误
throw new Error('this is a test error!');

9. 监控性能(可选)

Sentry 的性能监控功能可以帮助你了解前端应用的性能表现。确保 tracesSampleRate 被正确配置,然后你可以在 Sentry 的性能监控页面查看页面加载时间、API 请求等详细信息。

Sentry 提供了强大的性能监控功能,不仅可以自动捕获页面加载、路由变更、API 请求等性能数据,还支持自定义性能指标和预警设置。以下是如何在 React 应用中启用性能监控、自定义性能指标以及设置预警的详细步骤。

10. 性能监控与自定义性能指标

10.1. 启用自动性能监控

在 Sentry 的 init 配置中,已经通过 BrowserTracing 集成了基本的性能监控功能。Sentry 会自动捕获页面加载时间、路由变更时间和 XHR/FETCH 请求的性能数据。

10.2. 自定义性能事务

在一些复杂场景中(例如,用户交互、复杂逻辑计算),你可能需要手动创建自定义事务。以下是如何在 React 应用中添加自定义性能事务的示例:

javascript 复制代码
import * as Sentry from '@sentry/react';

// 创建一个自定义事务
const transaction = Sentry.startTransaction({ name: 'Custom Transaction Name' });

// 自定义 span, 用于跟踪一个函数的执行时间
const span = transaction.startChild({ op: 'function', description: 'customFunction' });

// 模拟函数的执行
setTimeout(() => {
  span.finish(); // 完成 span
  transaction.finish(); // 完成事务
}, 2000);

10.3. 自定义性能指标

Spans 是事务的组成部分,用于测量应用内不同操作的耗时。你可以通过 startChild 方法来创建自定义的 span。

javascript 复制代码
// 定义一个自定义的 span
const span = transaction.startChild({
  op: 'db.query',
  description: 'Fetching data from database',
});

// 模拟数据库查询操作
fetch('/api/data')
  .then((response) => response.json())
  .then((data) => {
    // 结束 span
    span.finish();
  });

11. 预警设置

Sentry 提供了强大的预警系统,你可以根据错误类型、事务性能等设置自定义预警。预警设置分为 错误预警 和 性能预警 。

11.1. 设置错误预警

在 Sentry 控制台中:

  1. 进入项目,点击左侧的 Alerts 。

  2. 点击 Create Alert,选择 Issue Alert 。

  3. 选择触发条件,例如:error.type = UnhandledException 。

  4. 设置频率和通知渠道,如电子邮件、Slack 或 Webhook。

  5. 点击 Save Rule 保存预警规则。

11.2. 设置性能预警

性能预警帮助你监控应用的性能问题,例如页面加载过慢、API 响应时间过长等。

  1. 在 Sentry 控制台中,点击 Performance -> Alerts 。

  2. 点击 Create Alert,选择 Performance Alert 。

  3. 设置条件,例如:transaction.duration > 1000ms 。

  4. 选择预警应用范围和通知渠道。

  5. 保存预警规则。

11.3. 配置自定义预警(高级)

你可以基于自定义事务和指标配置更加细粒度的预警。例如,监控特定 API 的响应时间:

  1. 在 Performance Alerts 中设置条件:transaction.op = "http.client" 且 transaction.url = "/api/specific-endpoint"。

  2. 设置阈值,例如:响应时间超过 500ms。

  3. 配置通知和其他参数后保存规则。

12. 总结

通过启用 Sentry 的性能监控功能和自定义性能事务,你可以全面了解应用的性能瓶颈。结合 Sentry 的预警机制,可以在问题出现时立即收到通知,从而快速响应和优化系统。