Sentry 错误分析器
分析 Sentry 错误数据以找到真正重要的错误。解析错误事件,按根因分组,按用户影响排名,并产生可行的修复建议 —— 不仅仅是一个堆栈跟踪列表。当您需要“分析我们的 Sentry 错误”,“哪些应该先修复”,“分类这些崩溃”,“找到这个错误激增的根因”,“哪些错误影响最多用户”,或者您有 Sentry 导出数据或 API 响应需要分析时使用。
这很重要
大多数团队被 Sentry 的噪音淹没。成千上万的问题中,大多数是无关紧要的。一个好团队和一个伟大团队的区别在于知道哪 5 个错误应该在这个 sprint 中修复。这项技能将原始错误数据转换为优先级的操作计划。
输入格式
此技能适用于以下任何格式:
Sentry API JSON —— 来自 /api/0/projects/{org}/{project}/issues/ 的输出
Sentry CSV 导出 —— 从问题页面导出的
原始错误日志 —— 带有时间戳和元数据的堆栈跟踪
Sentry 事件 JSON —— 来自事件详细信息 API 的单个事件有效负载
粘贴的 Sentry 问题 URL —— 提取 org/project/issue ID 并描述分析步骤
分析步骤
从每个错误/问题中提取以下字段:
- issue_id:唯一的 Sentry 问题标识符
- title:错误消息(第一行)
- culprit:错误起源的文件/函数
- type:异常类(TypeError、ValueError、HTTP 500 等)
- count:时间窗口内的总事件数
- user_count:受影响的唯一用户数
- first_seen:错误首次出现的时间
- last_seen:最近出现的时间
- level:fatal / error / warning
- tags:浏览器、操作系统、版本、环境
- stack_trace:完整的回溯跟踪(最近的帧首先)
对于 Sentry API 数据:
# 按频率排序获取问题
curl -s -H "Authorization: Bearer $SENTRY_AUTH_TOKEN" \
"https://sentry.io/api/0/projects/{org}/{project}/issues/?query=is:unresolved&sort=freq&limit=50" \
| jq '.[] | {id, title, culprit, count, userCount, firstSeen, lastSeen, level}'
# 获取特定问题的事件
curl -s -H "Authorization: Bearer $SENTRY_AUTH_TOKEN" \
"https://sentry.io/api/0/issues/{issue_id}/events/?limit=10" \
| jq '.[].entries[] | select(.type == "exception")'
# 获取问题标签细分
curl -s -H "Authorization: Bearer $SENTRY_AUTH_TOKEN" \
"https://sentry.io/api/0/issues/{issue_id}/tags/" \
| jq '.[] | {key, totalValues, topValues: [.topValues[] | {value, count}]}'
将每个错误分为以下类别之一:
类别 指标 典型影响
崩溃 未处理的异常、SIGABRT、OOM 用户丢失数据/会话
数据损坏 完整性错误、下游验证失败 静默、毁灭性
集成失败 来自第三方的 HTTP 5xx、超时、连接拒绝 功能损坏
客户端错误 TypeError、前端的未定义访问、null 引用 UI 元素损坏
性能退化 超时错误、慢查询警告、504s 用户沮丧
配置/部署 错误恰好在部署时间戳开始 时通常影响每个人
边缘情况 低频率、特定用户代理或输入 除非数据丢失,否则优先级较低
使用以下复合评分对每个问题进行排名:
影响评分 = (user_count
3) + (event_count 0.5) + (severity_weight * 10) + (recency_bonus) + (trend_bonus)
其中:
severity_weight:fatal = 5、error = 3、warning = 1
recency_bonus:last_seen < 1 小时 = 20、last_seen < 24 小时 = 10、last_seen < 7 天 = 5、更旧 = 0
trend_bonus:事件每周增加 = 15、事件稳定 = 0、事件减少 = -5
对于每个高优先级问题,执行根因分析:
堆栈跟踪分析:
- 从下到上读取堆栈跟踪(Python/JS 中最近的调用首先)
- 跳过框架内部 —— 找到您代码中的第一个帧
- 确定导致错误的确切行和变量/值
- 检查是否同一个罪魁祸首文件出现在多个问题中(系统性问题)
相关性检查:
# 检查错误是否与特定版本相关
# 查看 firstSeen 与部署时间戳
jq '.[] | select(.firstSeen > "2026-04-25") | {title, firstSeen, count}' issues.json
# 检查错误是否与特定浏览器/操作系统相关
jq '.tags[] | select(.key == "browser") | .topValues' event.json
# 检查错误是否在特定时间聚集(cron 作业?高峰流量?)
jq '[.[].dateCreated | split("T")[1] | split(":")[0]] | group_by(.) | map({hour: .[0], count: length})' events.json
常见根因模式:
多个端点中的相同异常 = 共享实用程序函数错误
部署后 null/未定义错误 = 缺少迁移或配置
特定小时的超时错误 = 资源竞争或 cron 重叠
仅在特定浏览器中出现的错误 = 缺少 polyfill 或 CSS 问题
特定用户 ID 的错误 = 数据相关错误(损坏记录)
对于每个根因,产生:
- 立即修复建议
- 长期修复建议
- 相关问题和事件
- 相关代码和提交
- 相关文档和资源