Sentry JS消息是否受采样率过滤?如何配置消息上报与流量控制?
Sentry消息上报问题解答
问题根源
是的,你设置的全局sampleRate: 0.01会作用于所有Sentry事件,包括captureMessage发送的消息,这就是只有1%的消息被上报的原因。
实现全量发送消息的两种方式
1. 全局设置全量采样率
直接修改初始化代码中的sampleRate配置,将其设为1:
const client = new BrowserClient({ // 其他配置保持不变 sampleRate: 1, // 覆盖原有0.01的采样率 beforeSend(event) { console.warn("Event", event); lastEvent = event; return event; } });
这种方式会让所有事件(错误+消息)都全量上报。
2. 仅针对消息设置全量采样率
如果想保留错误事件的低采样率,只让消息全量发送,可以在调用captureMessage时单独指定采样率:
scope.captureMessage(message, { sampleRate: 1 });
这样全局的sampleRate仍会作用于错误事件,消息则不受限制。
仅在特定错误发生时发送消息(减少流量)
可以通过beforeSend回调或者调用captureMessage时的参数实现精准过滤:
方式一:在beforeSend中直接过滤事件
beforeSend(event) { // 仅保留需要上报的消息事件 if (event.type === 'message') { // 示例:仅保留包含"error-pre-"前缀的关联消息 if (!event.message.includes('error-pre-')) { return null; // 返回null会直接丢弃该事件 } } // 错误事件正常上报 return event; }
方式二:给消息打标签后过滤
调用captureMessage时添加自定义标签:
scope.captureMessage(message, { tags: { isErrorRelated: 'true' } });
然后在beforeSend中根据标签过滤:
beforeSend(event) { if (event.type === 'message' && event.tags?.isErrorRelated !== 'true') { return null; } return event; }
Sentry消息的配额与计费限制
- 免费版Sentry有固定的月事件配额(通常为10,000条),超出后会限制接收事件,直到下一个计费周期。
- 付费版采用按量计费模式,费用取决于每月发送的事件总量、数据保留时长、附加功能等维度。
- 注意:消息事件和错误事件都会计入配额/计费统计,全量发送消息会快速消耗配额,建议结合上述过滤策略减少不必要的上报。
内容的提问来源于stack exchange,提问作者4ntoine
相关产品推荐
相关产品推荐

