SvelteKit集成Sentry缺失HTTP服务端元数据问题排查
IP地址捕获未启用:Sentry默认不会抓取用户IP,需要在
Sentry.init里添加两个关键配置:sendDefaultPii: true(允许发送包含IP的身份信息);如果你的应用运行在反向代理(如Nginx、Cloudflare)之后,还要加上trustProxy: true,这样才能获取到真实用户IP。handleError未传递完整请求上下文:你编写的
handleError自定义函数只解构了error参数,但SvelteKit的handleError还会传递包含请求信息的event对象。虽然Sentry.handleErrorWithSentry会自动处理流程,但漏传参数可能影响元数据捕获。可以修改为:export const handleError = Sentry.handleErrorWithSentry(async ({ error, event }) => { const eventId = Sentry.lastEventId(); if (eventId) { return { message: 'Internal Server Error', eventId }; } });要是不需要自定义返回逻辑,直接使用
export const handleError = Sentry.handleErrorWithSentry();更稳妥。sentryHandle中间件位置错误:虽然你代码里把
Sentry.sentryHandle()放在了sequence的第一个,但如果后续中间件修改了request的URL、Headers等核心属性,Sentry捕获的就是修改后的内容。务必确保它是第一个执行的中间件,以抓取原始请求数据。HTTP请求集成被覆盖:SvelteKit的Sentry SDK默认会集成HTTP请求捕获,但如果你在
Sentry.init里自定义了integrations配置,可能会丢失默认的Http集成。如果有自定义集成列表,要手动添加new Sentry.Integrations.Http({ tracing: true })。配置或环境变量异常:确认生产环境下
dev变量为false,env.SENTRY_DSN已正确加载;同时检查Sentry项目后台的设置,是否限制了请求元数据的接收权限。
内容的提问来源于stack exchange,提问作者Mikko Ohtamaa

