Sentry 与 Bugsnag 事件不上报:后台打不开、DSN 区域与接入超时全解
接错误监控时,页面上的异常明明已经抛出,Sentry 项目里的 Issues 却始终是空的;或者 Bugsnag 的 Error inbox 停在很久以前,新版本崩溃根本不出现。与此同时,浏览器打开 sentry.io 或 app.bugsnag.com 会一直转圈,组织切换器出不来,设置页里的 Client Keys 也点不进去。
空列表有三类原因,不要混在一起改代码。第一类是人打不开后台,所以你根本不知道事件有没有到。第二类是应用所在网络到不了接入域名,SDK 初始化成功但发送失败。第三类是 DSN、区域和 API key 配错,服务端直接丢弃。下面按这个顺序处理。套餐配额、保留天数和区域节点以官方最新条款为准。
两家后台和接入域名并不一样
DSN 不是普通网址。它形如 https://密钥@o组织.ingest.us.sentry.io/项目号。密钥、组织编号、区域和项目号任何一段抄错,后台都不会出现事件,SDK 侧常常只在调试日志里写 discarded 或 403。欧洲项目的 DSN 不能拿去对美国接入点。Bugsnag 同理:通知用的 API key 和后台登录不是同一把钥匙。
| 对比项 | Sentry | Bugsnag |
|---|---|---|
| 后台 | sentry.io,左上角切换组织 | app.bugsnag.com 的项目列表 |
| 凭证位置 | Settings、Projects、Client Keys(DSN) | Project settings 里的 API key |
| 美国接入 | o 数字.ingest.us.sentry.io | notify.bugsnag.com |
| 欧洲接入 | ingest.de.sentry.io 一类域名 | 按数据驻留区域的通知域名 |
| 会话与性能 | 同一 DSN 下的 envelope | sessions.bugsnag.com |
| 自建 | 自建 Sentry 的 Relay 地址 | 自建通知端点,不再走公有云 |
从后台打不开到事件进列表:分步操作
- 第一步:先把线路准备好,连上刺猬VPN。自定义用户名和密码即可匿名注册,不需要邮箱、也不需要手机号;免费节点永久免费、不限流量、不限速,注册即用。全程 HTTPS+AES 加密传输。打开后台和让本机 SDK 把事件送出,都要走这条线路;
- 第二步:浏览器无痕窗口打开 sentry.io,确认能看到组织名和 Issues、Performance、Replays。若停在登录页转圈,先不要改项目配置;
- 第三步:进入 Settings、Projects,点开项目,打开 Client Keys(DSN)。复制完整 DSN,不要只抄公钥那一段。区域对不上时,页面上会有 US 或 EU 标识;
- 第四步:在开发机用调试开关把 SDK 的 debug 打开,故意抛一个测试异常。日志里应出现向 ingest 域名发送 envelope 的记录。只有 “Invalid DSN” 或 403 时,回到第三步重抄;
- 第五步:Bugsnag 打开 app.bugsnag.com,进入对应 Project settings,核对 Notifier API key。示例代码里的 key 必须和这个项目一致,从别的项目复制过来会返回 Invalid API key;
- 第六步:上传符号表或 source map 时单独测一次。Sentry 用 sentry-cli,先 sentry-cli info 看登录是否成功,再执行 releases files upload。上传失败和事件发送失败不是同一个域名;
- 第七步:自建实例不要连公有云 DSN。Sentry 自建把 DSN 主机改成你的 Relay;Bugsnag 自建把 notify 端点改成部署文档里的地址。混用会得到项目不存在;
- 第八步:CI 里上报要给运行器单独配线路。人能打开网页,不代表 GitLab Runner 或 GitHub 托管运行器出得去。运行器网络见 GitLab 与 Bitbucket 访问 里关于克隆和拉取超时的处理,思路相同:构建机也要能解析并连上接入域名;
- 第九步:确认 Issues 或 Error inbox 出现测试事件后,再关掉调试日志,避免生产环境把面包屑打满配额。
按现象排查:后台、发送、配额
先区分「人进不去」和「程序送不出去」。前者改节点,后者查 DSN 主机和运行环境的出口。
- sentry.io 空白或登录回调停住:后台域名没走线路。换节点后无痕重开,不要先改 SDK;
- SDK 日志 “Invalid DSN”:字符串被截断,或把欧盟 DSN 填进了美国项目。整段重抄;
- HTTP 403,正文 project not found:项目号或组织编号不对,也可能用了已禁用的 key。到 Client Keys 看状态是不是 Active;
- HTTP 429,rate limit exceeded:项目配额用尽,事件被丢弃。到后台的 Stats 看丢弃原因,而不是加长重试;
- Bugsnag 返回 Invalid API key:key 属于另一个项目,或复制时混入了引号和空格;
- Payload too large:单条事件把请求体、面包屑塞得过大。减少附件后再发,否则服务端直接拒;
- sentry-cli 提示 error: API request failed:上传符号表的 API 主机和 ingest 不是同一个。cli 登录用的 auth token 过期也会是这句,到 Settings、Account、API、Auth Tokens 重新生成;
- 本地能上报、生产不能:生产机器的出口没有走线路,或防火墙只放行了 443 到部分域名。把 ingest 与 notify 域名单独放进允许列表。
人看后台和程序上报,线路怎么配
错误监控的流量远小于视频,失败点在域名到不了。免费节点适合先打开后台、发送一条测试异常。每天上传符号表、挂着会话回放,用时长套餐按周期计费,期间不限流量、不限速。实际可用性取决于当前网络环境。
| 对比项 | 会员节点 | 免费节点 | 不连线路 |
|---|---|---|---|
| 打开 SaaS 后台 | 组织页和设置页能进 | 适合先试能否登录 | 页面常转圈 |
| SDK 发送事件 | 开发机到接入点的请求能完成 | 调试一条测试事件够用 | 事件停在本地队列 |
| 符号表上传 | sentry-cli 与发布 API 能连通 | 偶发超时要重试 | releases 一直是空的 |
| 配额 | 不改变厂商的事件配额 | 同左 | 同左 |
| 长时间挂代理的构建 | 时长套餐期间不限流量、不限速 | 永久免费、不限流量、不限速 | CI 步骤超时 |
| 适合场景 | 每天看告警、传符号表 | 确认 DSN 是否写对 | 只能看离线日志 |
本机、CI 和自建实例要分开配
笔记本上 sentry.io 能开,不代表流水线里的 sentry-cli 能登录。人用的图形客户端和 CI 的环境变量是两套出口。给运行器配线路时,只保证 git clone 成功还不够,还要能访问 sentry.io 的 API 和 ingest 主机。认证令牌放在 CI 的密钥里,不要写进仓库。
自建 Sentry 若装在境外云上,团队成员打开自建域名和打开公有云是同一类问题:域名不同,照样可能被中途重置。把自建主机名单独验证一次,不要用公有云 DSN 去对自建项目。Bugsnag 自建的通知端点同样单独测,curl 能到登录页,不代表 notify 路径返回 200。
手机崩溃要等 App 下次启动才上传。系统杀掉进程后,事件留在本地磁盘。人在国内打开后台看空列表,有时只是手机那一侧还没把队列送出。让测试机走同一条线路,再冷启动一次 App,Issues 里才出现刚才那条崩溃。
浏览器能开 Issues,不代表信封已经进了项目。调试日志里如果只有正在发送、却没有状态码,请求多半停在解析或连接被重置。对接入主机做一次解析,看它有没有被指到局域网或明显错误的地址。解析正常仍发送失败,再换节点。不要先把采样率拉满,线路一旦恢复,配额会被测试流量打满。
性能事务和会话回放共用这一条 DSN,体积却差很多。回放文件大,弱链路上会先超时,错误事件却可能已经在 Issues 里。看到测试异常到了、回放仍是空的,不要认定整条线路都坏了。先关掉回放采样,确认错误稳定,再单独开回放。Bugsnag 的面包屑过多会直接报载荷过大,标题本身其实已经够定位。
组织邀请和单点登录走的是回调,不是接入域名。队友点邮件里的邀请,跳回后台时线路断了,页面会空白,成员列表里这个人仍停在已邀请。让对方用能打开后台的同一条节点重开邀请链接。人能进后台之后,仍然要单独发一条测试事件,回调通了不等于接入通了。
自建和公有云不要在同一台构建机上混用环境变量。DSN 若还指向旧项目,新项目的 Issues 会一直是空的,旧项目却多出测试异常。发布前先看当前组织,再发测试事件。Bugsnag 的通知密钥也要和你正在看的那个项目一致。预发和正式分成两个项目时,看错项目会以为线上没有崩溃。
告警配在 Alerts 里。测试事件已经在 Issues 里,邮箱却没有信,先查垃圾箱和通知渠道,不要连续再抛异常。浏览器里的通知和邮件不是同一条通道。线路只负责把事件送进项目,信能不能进邮箱是邮件服务商的事。配额页已经标出丢弃时,被丢掉的事件不会触发告警,要先处理配额再谈通知。打开统计页时把时间范围改到今天,避免把上周的空窗误看成当前没有流量。项目切换器也要停在你正在测的那个项目上。
和代码托管、模型接口怎么分工
仓库克隆、流水线拉依赖超时,处理顺序见 GitLab、Bitbucket 国内访问慢怎么办。模型接口的密钥、区域和超时是另一类请求,见 OpenAI API 开发者访问。Sentry 的 DSN 不能拿去调对话接口,仓库的访问令牌也不能填进 Client Keys。
三件事可以共用一条线路,但凭证必须各用各的。先让浏览器能打开后台,再让 SDK 打到 ingest,最后才让 CI 上传符号表。跳过第一步直接改采样率,空列表不会因此出现。
采样率、beforeSend 过滤和配额丢弃也会让 Issues 变空。线路通了以后,如果调试日志明确写了 discarded by sampling,再去改 tracesSampleRate,不要继续换节点。
常见报错速查表
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 后台一直转圈 | 控制台域名未走线路 | 换节点,无痕窗口重开 |
| Invalid DSN | DSN 被截断或区域抄错 | 从 Client Keys 整段重抄 |
| 403 project not found | 项目号或 key 已禁用 | 核对 Active 状态的 DSN |
| 429 rate limit exceeded | 配额用尽 | 看 Stats 里的丢弃原因 |
| Invalid API key | Bugsnag 用了别的项目的 key | 从当前 Project settings 重抄 |
| Payload too large | 面包屑或附件过大 | 减掉附件后再发 |
| API request failed | 符号表 API 或令牌失败 | 重做 Auth Token 后再上传 |
高频问答
- 问:SDK 初始化没有报错,为什么 Issues 还是空的?答:初始化只检查 DSN 格式,发送是另一次请求。看调试日志里有没有打到 ingest 域名;
- 问:美国项目和欧洲项目能共用 DSN 吗?答:不能。主机名里的区域不同,抄错会被丢弃;
- 问:免费节点够不够排查?答:打开后台、发一条测试事件够用。每天传符号表用时长套餐,期间不限流量、不限速;
- 问:自建 Sentry 还要不要管公有云?答:DSN 主机改成你的 Relay 之后,要单独验证那个主机名,不要再连 ingest.sentry.io;
- 问:Bugsnag 的登录密码能当 API key 吗?答:不能。通知 key 在 Project settings,和账号密码不是同一个字段;
- 问:手机上崩溃了,后台要等多久?答:多数 SDK 在下次启动时补发。让手机走同一条线路再冷启动一次。
把上报链路固定成三步
Sentry 打不开、事件不上报、DSN 区域抄错、429 被丢弃,以及 Bugsnag 的 Invalid API key、载荷过大,都要先确认请求有没有离开本机。人看后台、程序打 ingest、命令行传符号表,是三个域名。测试异常用固定节点发,确认 Issues 里出现之后再关调试。
刺猬VPN 采用 HTTPS+AES 加密传输,支持按域名的智能分流和断线保护。自定义用户名和密码即可匿名注册,不需要邮箱和手机号。免费节点永久免费、不限流量、不限速;时长套餐按周期计费,期间不限流量、不限速。一个账号支持多设备同时在线。厂商的配额和区域策略以官方最新条款为准。实际可用性取决于当前网络环境。
开始使用刺猬VPN:免费节点即刻体验,全球会员线路
刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。