名称: sentry性能监控 描述: 用于设置Sentry的性能监控、分布式追踪或性能分析。 允许工具:
- 读取
- 写入
- 编辑
- Bash
- Grep
- Glob
Sentry - 性能监控
使用事务、跨度和分布式追踪来追踪应用程序性能。
启用性能监控
import * as Sentry from "@sentry/browser";
Sentry.init({
dsn: "...",
tracesSampleRate: 0.2, // 20%的事务采样率
integrations: [
Sentry.browserTracingIntegration(),
],
});
事务
自动事务
// 浏览器:页面加载和导航
Sentry.init({
integrations: [
Sentry.browserTracingIntegration({
tracePropagationTargets: ["localhost", /^https:\/\/api\.example\.com/],
}),
],
});
手动事务
const transaction = Sentry.startTransaction({
op: "task",
name: "处理订单",
});
try {
// 你的代码在这里
processOrder(order);
transaction.setStatus("ok");
} catch (error) {
transaction.setStatus("internal_error");
throw error;
} finally {
transaction.finish();
}
跨度
创建子跨度
const transaction = Sentry.startTransaction({ name: "结账" });
const validationSpan = transaction.startChild({
op: "validation",
description: "验证购物车商品",
});
await validateCart(cart);
validationSpan.finish();
const paymentSpan = transaction.startChild({
op: "payment",
description: "处理支付",
});
await processPayment(payment);
paymentSpan.finish();
transaction.finish();
跨度数据
const span = transaction.startChild({
op: "db.query",
description: "SELECT * FROM users WHERE id = ?",
data: {
"db.system": "postgresql",
"db.name": "production",
},
});
分布式追踪
传播追踪上下文
// 前端
Sentry.init({
integrations: [
Sentry.browserTracingIntegration({
tracePropagationTargets: [
"localhost",
/^https:\/\/api\.yoursite\.com/,
],
}),
],
});
// 这自动添加 sentry-trace 和 baggage 头部
后端延续
// Express.js
import * as Sentry from "@sentry/node";
app.use(Sentry.Handlers.requestHandler());
app.use(Sentry.Handlers.tracingHandler());
// 事务从传入头部自动延续
采样
静态采样
Sentry.init({
tracesSampleRate: 0.1, // 10%的事务采样率
});
动态采样
Sentry.init({
tracesSampler: (samplingContext) => {
// 总是采样错误
if (samplingContext.parentSampled !== undefined) {
return samplingContext.parentSampled;
}
// 高优先级端点
if (samplingContext.name.includes("/checkout")) {
return 1.0;
}
// 不采样健康检查
if (samplingContext.name.includes("/health")) {
return 0;
}
// 默认采样率
return 0.1;
},
});
Web Vitals
// 自动通过 browserTracingIntegration 捕获
// LCP, FID, CLS, FCP, TTFB
Sentry.init({
integrations: [
Sentry.browserTracingIntegration({
enableLongTask: true, // 追踪长任务
}),
],
});
自定义指标
// 捕获自定义指标
Sentry.metrics.increment("按钮点击", 1, {
tags: { button: "结账" },
});
Sentry.metrics.distribution("购物车价值", cart.total, {
unit: "美元",
tags: { currency: "USD" },
});
Sentry.metrics.gauge("活跃用户", activeCount);
Sentry.metrics.set("唯一访客", visitorId);
性能分析
// Node.js
import * as Sentry from "@sentry/node";
import { nodeProfilingIntegration } from "@sentry/profiling-node";
Sentry.init({
dsn: "...",
integrations: [nodeProfilingIntegration()],
tracesSampleRate: 1.0,
profilesSampleRate: 1.0,
});
最佳实践
- 从低采样率开始,根据需要增加
- 使用动态采样处理重要事务
- 传播追踪上下文到所有服务
- 添加有意义的跨度描述
- 追踪业务关键用户流程
- 使用自定义指标监控业务KPI
- 为性能关键代码启用性能分析