Sentry 实战
面包屑 Breadcrumbs
在错误详情页中,有 Breadcrumbs 信息,它非常有用,可以追踪错误发生之前的一些事件,例如点击、页面导航等。
Breadcrumbs是一连串的事件跟踪,展示了发生问题之前的一系列操作。这些事件与传统日志非常相似,但可以记录更丰富的结构化数据。Breadcrumbs 官方文档我们在
Sentry管理界面,点击开之前的一个issue详情,可以看到Breadcrumbs相关信息:
最后一行记录了发生的错误,而在此之前的前面两行记录了在这个错误发生之前的一些操作:先发生了一次页面加载的事务,接着在点击了
body > div#root > button的UI。面包屑可以通过两种方式生成:
- 自动生成: 通过
SDK及其相关的集成将自动记录多种类型的面包屑。例如,浏览器JavaScript SDK将自动记录DOM元素上的点击和按键、XHR请求、控制台API调用以及所有导航变更。 - 手动生成: 官方文档
Sentry.addBreadcrumb({ category: "auth", message: "Authenticated user " + user.email, level: Sentry.Severity.Info, });- 自动生成: 通过
Traces, Transactions 和 Spans
上面
Breadcrumbs中第一行,被称为Transaction,我们先点击开这个连接,进入这个Transaction详情页可以看到原来这是一个页面加载的过程的记录

这个页面加载的整个过程,被称为一个
Transaction这个
Transaction是一个树状结构,根节点是pageload,表示页面加载,根节点下有浏览器的缓存读取、DNS解析、请求、响应、卸载事件、dom内容加载事件等过程,还有各种资源加载过程点击开任意一个节点,可以看到:
- 每个节点都有一个
id:Span ID Trace ID: 追踪Id- 这个节点过程花费的时间等信息
- 每个节点都有一个
Sentry把这些树状结构的节点称为Span,他们归属于某一个Transaction一般来讲,页面加载是一个
Transaction,后端API接口逻辑是一个Transaction,操作数据库逻辑是一个Transaction,它们共同组成了一个Trace



页面加载
页面加载与性能指标
在上面的分析中,我们看到了一个页面加载(指刷新页面,不是单页面应用的路由变化)的
Transaction,如果我们在SDK的Sentry.init()中,将new Integrations.BrowserTracing()去掉,那么Breadcrumbs不会显示pageload信息:
所以
SDK的BrowserTracing功能,就是用来将浏览器页面加载/导航操作检测为事务,并捕获请求、指标和错误作为跨度。在页面加载的
Transaction中,我们可以看到页面加过程中不同阶段的所花费的时间,例如FCP、FP、LCP、FID等重要的性能指标信息同一个
url下会收集每一次上报的页面加载Transaction在
Sentry管理界面 -> Performance菜单页中,可以查看每个url下收集的综合性能指标信息
TPM: 平均每分钟事务数FCP: (First Contentful Paint) 首次内容绘制,标记浏览器渲染来自 DOM 第一位内容的时间点,该内容可能是文本、图像、SVG 甚至 元素.LCP: (Largest Contentful Paint) 最大内容渲染,代表在viewport中最大的页面元素加载的时间. LCP的数据会通过PerformanceEntry对象记录, 每次出现更大的内容渲染, 则会产生一个新的PerformanceEntry对象FID: (First Input Delay) 首次输入延迟,指标衡量的是从用户首次与您的网站进行交互(即当他们单击链接,点击按钮等)到浏览器实际能够访问之间的时间CLS: (Cumulative Layout Shift) 累积布局偏移,总结起来就是一个元素初始时和其hidden之间的任何时间如果元素偏移了, 则会被计算进去, 具体的计算方法可看这篇文章 https://web.dev/cls/FP: First Paint (FP) 首次绘制,测量第一个像素出现在视口中所花费的时间,呈现与先前显示内容相比的任何视觉变化。这可以是来自文档对象模型 (DOM) 的任何形式,例如 background color 、canvas 或 image。FP 可帮助开发人员了解渲染页面是否发生了任何意外。TTFB: Time To First Byte (TTFB) 首字节时间,测量用户浏览器接收页面内容的第一个字节所需的时间。TTFB 帮助开发人员了解他们的缓慢是由初始响应(initial response)引起的还是由于渲染阻塞内容(render-blocking content)引起的USERS: UV数USER MISERY: 对响应时间难以容忍度的用户数,User Misery是一个用户加权的性能指标,用于评估应用程序性能的相对大小。虽然可以使用Apdex检查各种响应时间阈值级别的比率,但 User Misery 会根据满意响应时间阈值 (ms) 的四倍计算感到失望的唯一用户数。User Misery 突出显示对用户影响最大的事务。可以使用自定义阈值为每个项目设置令人满意的阈值。阈值设置在Settings -> sentry -> cra-test -> Performance
Performance 面板

在 Performance 面板中,可以根据一些条件查询某一批 Transaction的:
1. FCP、LCP、FID、CLS等信息
图片中筛选出了27个
transaction
FCP、LCP、FID、CLS卡片中展示了27个transaction的平均值
每个卡片上还有绿色、黄色、红色的百分比,分别表示好、一般和差,通过该性能指标的阈值作区分

sentry性能指标阈值定义Web Vital Good(绿色) Meh(黄色) Poor(红色) 最大内容绘制 (LCP) <= 2.5s <= 4s > 4s 首次输入延迟 (FID) <= 100ms <= 300ms > 300ms 累积布局偏移 (CLS) <= 0.11s <= 0.25 > 0.25 首次绘制 (FP) <= 1s <= 3s > 3s 最大内容绘制 (LCP) <= 0.1s <= 3s > 3s 首字节时间 (TTFB) <= 100ms <= 200ms > 600ms
2. LCP p75面积图、LCP Distribution数量柱状图、TPM面积图
LCP p75面积图:p50、p75、p95都对应一个时间长度的值(例如277.20ms),表示在某一段时间内(例如2021-10-19 2:35 PM到2021-10-19 2:40 PM),采集的所有transaction中(例如采集到了11个transaction),超过25%的transaction样本的LCP值超过了277.20ms。官方文档
LCP Distribution数量柱状图: 横坐标是LCP时间(单位s),纵坐标是数量(单位个)。一个柱子,表示某个LCP时间的transaction数量
TPM面积图: 平均每分钟的transaction数量。例如,在4:00 PM到8:00 PM时间段内,平均每分钟的transaction数量是0.213个
3. 某个url路径下的性能信息表格
我们应该已经可以读懂表格中的信息的含义了,接下来点开某个url维度下的详情页,还需要介绍两个指标 Apdex 和 Failure Rate

Apdex
Apdex 是一种行业标准指标,用于根据应用程序响应时间(response time)跟踪和衡量用户满意度(satisfaction)。Apdex 分数提供特定 transaction 或端点中满意(satisfactory)、可容忍(tolerable)和失败(frustrated)请求的比率。该指标提供了一个标准来比较 transaction 性能,了解哪些可能需要额外优化或排查,并为性能设定目标。官方文档
以下是 Apdex 的组成部分及其公式:
T:目标响应时间的阈值。Satisfactory(满意度):当页面加载时间小于或等于 T 时,用户对使用该应用感到满意。Tolerable(可容忍度):当页面加载时间在 T 到 4T 之间时,用户认为该应用程序可以容忍使用。Frustrated(失败):当用户的页面加载时间大于 4T 时,他们对应用程序感到失望。Apdex:(满意请求数 +(可容忍请求数/2))/(总请求数)
在
sentry管理界面 -> Performance页面中可以为每个项目设置自定义阈值
Failure Rate 失败率
failure_rate() 表示不成功 transaction 的百分比。Sentry 将状态为 “ok”、“canceled” 和 “unknown” 以外的 transaction 视为失败。更多状态可以参考 文档。
4. 如何现在就产生Good(绿色)、Meh(黄色)、Poor(红色)的数据
很简单,在Chrome dev tools的Network中,将模拟网速调整为fast 3G、slow 3G,然后刷新几次页面即可。