Sentry 监控 - Discover 事件大数据查询分析引擎

系列
- 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本
- 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps
- Sentry For React 完整接入详解
- Sentry For Vue 完整接入详解
- Sentry-CLI 使用详解
- Sentry Web 性能监控 - Web Vitals
- Sentry Web 性能监控 - Metrics
- Sentry Web 性能监控 - Trends
- Sentry Web 前端监控 - 最佳实践(官方教程)
- Sentry 后端监控 - 最佳实践(官方教程)
目录
- Discover 查询
- 预置查询
- 已保存查询
- 构建新查询
- 搜索查询
- 排序查询
- 编辑查询
- 共享查询
- 删除查询
- 查询结果
- 事件详情
- 查询生成器
- 按全局选择标题过滤
- 按搜索条件过滤
- 语法
- Tag Summary 过滤
- 按交互式图表过滤
- 显示选项
- Y 轴选项
- 按表列过滤
- 叠加函数
- 单元格过滤
- 添加方程式
- 排序列
- 其他查询操作
- 编辑查询
- 分享查询
- 导出 CSV
- 删除查询
- 添加查询方程式
- 添加方程式
- 方程式指南
- 示例方程式
- 计算完成事务的百分比
- 计算自定义 Apdex
- 查找最大平均非数据库时间
- 通过 Discover 发现趋势
- 通过 Issues Discover
- 通过 Errors Discover
- URL 错误
- 未处理的错误
- 错误最多的文件
- 每个 Release 的错误
- 按小时或按天计算的错误
- 其他用例
Discover 查询
Discover 通过构建和丰富您的错误数据,提供跨环境数据的可见性。您可以查询和解锁对整个系统健康状况的洞察,并在一个地方获得关键业务问题的答案。

Discover 主页提供所有已保存和预构建查询的视图,因此您可以快速深入到需要立即关注的区域。 例如,如果在过去 24 小时内出现错误查询的峰值,用户可以先进行调查。 每个查询都保存为一张卡片,显示数据的汇总视图。
- 显示名称
- 搜索条件
- 创建者
- 图表快照
- 日期范围
- 最后编辑
预置查询
带有 Sentry 图标的查询卡是预先构建的,无法移除。
All Events:用户可以查看任何项目组的原始错误流。 这取代了事件功能,使用户能够添加其他列和更改分组以实现所需的细分。Errors by Title:用户可以通过原始错误总数以及受影响的用户总数来查看最常发生的错误。Errors by URL:用户可以看到产生最多错误和不同类型问题的页面。提醒一下,问题是一组指纹事件。 有关更多详细信息,请参阅有关指纹的完整文档。
已保存查询
带有用户头像的查询卡表示已保存的查询。创建已保存查询的用户将在查询卡上显示他们的头像。 保存的查询可供组织中的任何人查看,并且不限于用户帐户。
构建新查询
从 Discover 主页,您可以通过三种方式构建查询。
- 单击
Build a new query(构建新查询) - 单击现有已保存查询卡的省略号以
Duplicate(复制) - 进入任何现有查询
- 点击右上角的
Save as(另存为)... - 输入显示名称
- 单击
Save(保存)
- 点击右上角的
应用新的搜索条件或表列来修改查询结果。保存查询并分配自定义显示名称。 有关完整的详细信息,请参阅有关查询生成器的文档。
搜索查询
寻找特定查询?使用主页上的搜索栏查找查询名称。
排序查询
右上角的下拉菜单将允许您按属性排序。
- 最近编辑
Recently Edited(默认) - 我的查询
My Queries - 查询名称
Query Name(A-Z) - 创建日期
Date Created(最新) - 创建日期
Date Created(最旧) - 最过时
Most Outdated
编辑查询
如果您需要编辑这些查询中的任何一个,请进入查询,进行所需的更改,右上角会出现一个按钮,要求您保存/更新(save/update)查询。请记住,对查询条件的编辑不会自动保存。
要重命名已保存的查询,请单击标题旁边的铅笔图标并输入所需的显示名称。 单击“enter”或点击区域外以保存更新的名称。
分享查询
随时分享您的疑问。您可以与也有权访问同一组织的其他用户共享 URL。随着查询的每个部分的构建,结果和 URL 都会更新,以便可以在电子邮件、聊天等中共享正在进行的搜索。
删除查询
在 Discover 主页上,每个保存的查询卡都有一个省略号,可以打开上下文菜单。 从这里,您可以删除查询。这个动作是不可逆的。您还可以通过单击右上角的垃圾桶在“查询结果(Query Results)”视图中删除查询。
查询结果

要查看查询结果,请单击任何查询卡。您将找到图表、表格和可切换的标签摘要(或分面图facet map)。 顶部的搜索栏可让您查看输入的搜索条件。 该表反映了具有可排序列的事件。
每个表格单元格都有一个动态上下文菜单,允许您根据您的选择通过自动更新搜索栏或表格列来继续探索您的数据。诸如在过滤器中添加或排除值、打开选定版本或查看底层问题堆栈等操作:

如果第一列显示图标(如上所示),则表示事件已堆叠。单击该图标可查看完整的事件列表。 每个事件都有一个 event ID,您可以单击以了解更多详细信息。 有关如何构建查询的更多信息,请转到查询构建器。
事件详情

从 Discover > [Saved Query] > Event Detail 导航到事件详细信息页面。 您将找到有关单个事件的所有相关详细信息。对于每个事件,您将看到 ID、时间戳(timestamp)和链接以查看 Sentry 收到的规范化 JSON payload。
事件详细信息(Event Detail)视图因事件类型(错误error、事务transaction、csp)而异。 事务事件详细信息可能与错误事件详细信息(如上所示)具有完全不同的视图。 例如,错误可能会在侧栏中显示相关问题。 这使您可以快速浏览该问题的事件量,并让您快速导航到相关问题。 您还可以在这些视图中找到堆栈跟踪(stack traces)、面包屑(breadcrumbs)等。
查询生成器
从 Discover 主页,您可以通过三种方式构建查询。
- 单击
Build a new query(构建新查询) - 单击现有已保存查询卡的省略号以
Duplicate(复制) - 进入任何现有查询
- 点击右上角的
Save as(另存为)... - 输入显示名称
- 单击
Save(保存)
- 点击右上角的
有四个主要构建块会影响已保存查询的结果。您可以结合使用这些方法来缩小搜索范围。
- Global Selection Header(全局选择标题)
- Search Conditions(搜索条件)
- Interactive Graph(交互式图表)
- Table Columns(表格列)
按全局选择标题过滤
在页面顶部指定要放大的项目(projects)、环境(environments)和日期范围(date range)。这也可以在 Sentry 的其他部分作为顶级过滤器(top level filter)找到。
按搜索条件过滤
所有事件都有内置的关键字段(key fields)或自定义标签(custom tags)。使用搜索栏输入这些 key 并为其分配值。这将过滤您的事件列表。这是内置的 key fields。
| General(常用) | id (string) issue.id (number) message (string) project.id (number) release (string) release.package (string) release.version (string) release.build (string) title (string) platform.name (string) environment (string) event.type(string) location (string) timestamp (datetime) timestamp.to_hour (datetime) timestamp.to_day (datetime) |
| Device(设备) | device.arch (string)device.battery_level (number)device.brand (string)device.charging (string)device.locale (string)device.name (string)device.online (string)device.orientation (string)device.simulator (string)device.uuid (string) |
| Geo(地理) | geo.city (string)geo.country_code (string)geo.region (string) |
| HTTP | http.method (string)http.url (string) |
| OS | os.build (string)os.kernel_version (string) |
| SDK | sdk.name (string)sdk.version (string) |
| Stack traces(堆栈追踪) | error.handled (string)error.mechanism (string)error.type (string)error.value (string)stack.abs_path (string)stack.colno (number)stack.filename (string)stack.function (string)stack.in_app (boolean)stack.lineno (number)stack.module (string)stack.package (string)stack.stack_level (number) |
| User attributes(用户属性) | user (string)user.email (string)user.id (string)user.ip (string)user.username (string) |
语法
查询生成器语法与 Sentry 的搜索语法相同。 从上方输入关键字段(key field)或自定义标记(custom tag)后,您可以使用任何引用的语法。例如,count() 为您提供事件发生的次数。这可以用以下方式编写:
- 完全匹配(等于):
count():99 - 上限(小于或等于):
count():<99或count():<=99 - 下限(大于或等于):
count():>99或count():>=99 - 多个边界(大于和小于):
count():>10 count():<20
在过滤器之间使用 OR 和 AND 搜索条件。但是 OR 不能用于聚合(aggregate)和非聚合(non-aggregate)过滤器之间。 有关这些条件的更多详细信息,请参阅使用 OR 和 AND。
您还可以通过将值放在列表中来搜索同一 key 的多个值。例如,“x:[value1, value2]” 将找到与 “x:value1 OR x:value2” 相同的结果。您可以在我们涵盖同一 Key 上的多个值的内容中了解更多信息。
Tag Summary 过滤
每个事件都有一个标签值(tag values)列表。标签摘要分面图(或分面图)是按频率排序的前 10 个 key 的可视化。最常见的标签值(tag value)直接列在说明(description)和百分比(percentage)的栏上方。 将鼠标悬停在栏中的每个部分上以查看该标签的确切分布。
单击这些部分中的任何一个以进一步优化您的搜索。例如,单击浏览器栏中代表 Chrome 的部分将自动更新 tag summary,然后将 Chrome 添加到搜索条件中。

按交互式图表过滤
每个查询都有一个交互式图表,可反映下表中显示的数据。 要放大,只需在要调查的区域上单击并拖动即可。 您还可以自定义显示和 Y 轴。 这将与您的查询一起保存。
显示选项
- Total Period(总周期)
- Previous Period(上一期)
- Release Markers(发布版本标记)
- Top 5 Period(前5期)
- Total Daily(每日总计)
- Top 5 Daily(每日前5)
Y 轴选项
- Count
- Average Transaction Duration(平均事务持续时间)
- p75
- p95
- Unique User Count(唯一用户数)
按表列过滤
在表格上方,单击列(Columns)以打开 modal。这将显示结果表中所有列的列表。 您可以添加、删除和移动基本关键字段(basic key field)列或自定义标签(custom tags)列。 使用相同的视图,您还可以使用以下任何函数堆叠事件:
叠加函数
avg(...)count(...)count_unique(...)max(...)min(...)sum(...)
每个函数都会要求您分配一个参数。有些是必需的,而有些则是可选的。函数将基于相同的值堆叠事件。 如果未应用任何函数,则查询结果中的事件将单独列出。 完成列编辑后,单击“应用(Apply)”,结果将反映在查询结果中。 请记住,如果添加了太多列,表格可能会水平滚动。
单元格过滤
表格中的每个单元格都会在悬停时出现一个省略号。 这将打开一个上下文菜单,其中包含取决于值类型的附加过滤功能。 例如,您可以通过单击“添加到过滤器(Add to filter)”有选择地将 transaction 定位到搜索条件栏。

添加方程式
您还可以使用表列作为方程式变量向查询添加方程式,结果将显示在查询结果表中。在添加查询方程式中了解更多信息。
排序列
单击要排序的列 header。向下箭头按降序对列进行排序,向上箭头按升序对列进行排序。 这可能会刷新表格。
其他查询操作
编辑查询
如果您需要编辑这些查询中的任何一个,请进入查询,进行所需的更改,右上角会出现一个按钮,要求您保存/更新(save/update)查询。请记住,对查询条件的编辑不会自动保存。
要重命名已保存的查询,请单击标题旁边的铅笔图标并输入所需的显示名称。单击 "enter" 或单击区域外进行确认。
分享查询
随时分享您的疑问。 您可以与也有权访问同一组织的其他用户共享 URL。 随着查询的每个部分的构建,结果会更新,URL 也会更新,以便可以在电子邮件、聊天等中共享正在进行的搜索。
导出 CSV
如果您想将数据带到别处,请单击 “Export” 以获取 CSV 文件。
对于大型导出,一旦准备就绪,您将收到一封包含下载链接的电子邮件。 这将需要在 Sentry 下载页面上进一步验证。这包含文件的 SHA1 checksum,您可以使用以下命令验证其完整性:
echo "<SHA1 checksum> <downloaded CSV name>" | sha1sum -c -
根据数据量,等待时间可能会有所不同。结果限制为 1000 万行或 1GB,以先到者为准。
删除查询
删除已保存的查询是不可逆的。
在 Discover 主页上,每个保存的查询卡都有一个省略号,可以打开上下文菜单。从这里删除查询。 您还可以通过单击右上角的垃圾桶在“查询结果(Query Results)”视图中删除查询。
添加查询方程式
在 Discover 中,您可以根据查询列添加方程式。 每列就像一个变量,因为它代表查询的数字结果,这个数字用于等式。
例如,让我们用一个方程式来计算 transaction 的第一次内容绘制 (measurements.fcp) 与 transaction 的最大内容绘制 (measurements.lcp) 的比率:
equation = measurements.fcp / measurements.lcp
该等式将使用每个查询列的结果来计算比率。在这种情况下,这些查询列的结果是:
measurements.fcp= 50measurements.lcp= 100
等式变为:
50 / 100
然后等式的结果显示在更新的表中,如下面的记录所示:

这些等式可以帮助您计算以下内容:
- 在阈值内完成的
transaction百分比 - 自定义 Apdex 分数
- 最大平均非数据库次数
添加方程式
向查询添加方程式
- 单击
列(Columns)按钮打开列编辑器。 - 如果它们尚未包含在您的查询中,请添加方程式所需的列。
- 单击
添加一个方程式(Add an Equation) - 通过选择列、输入数字(如果需要)和添加运算符来输入你的方程式。
- 单击
“应用(Apply)”。
方程式指南
方程必须:
- 至少包含一个字段或函数
- 至少包含一个操作符
- 有显式运算符。例如,
a(a+b)无效;相反,您应该输入a * (a + b)
方程不能:
- 包含字段和函数的混合
- 包含不受支持的指数
方程将遵循预期的运算顺序,首先解析括号,然后是除法和乘法,然后是加法和减法。方程还可以包括负数。
方程只能对数值列和函数进行运算,其中包括:
- 函数:
- count
- count_unique
- count_if
- failure_count
- avg
- sum
- percentiles (p50, p75 etc.)
- apdex
- user_misery
- eps() and epm()
- 字段:
- transaction.duration
- measurements.fp
- measurements.fcp
- measurements.lcp
- measurements.fid
- measurements.cls
- measurements.ttfb
- spans.browser
- spans.http
- spans.db
- spans.resource
示例方程式
计算完成事务的百分比
获取在阈值内完成的事务百分比
- 使用以下三列创建一个新查询:
- 列 1:
- Function
count_if - Field
transaction.duration - Condition
is less than or equal to - 将最终参数设置为阈值(如
300)
- Function
- 列 2:
- Function
count
- Function
- 列 3:
- Field
transaction
- Field
- 列 1:
- 添加一个方程并在方程字段中输入
count_if(transaction.duration,lessOrEquals,300) / count() * 100。
计算自定义 Apdex
Apdex 定义为 (satisfied + tolerable*0.5 + frustrated*0)/total。如果您想将 tolerable 的权重更改为 0.2,您将创建以下查询和方程。
-
使用以下四列创建一个新查询:
- 列 1:
- Function
count_if - Field
transaction.duration - Condition
is less than or equal to - 将最终参数设置为
Satisfied阈值(如300)
- Function
- 列 2:
- Function
count_if - Field
transaction.duration - Condition
is less than or equal to - 将最终参数设置为
Tolerable阈值(如1200)
- Function
- 列 3:
- Function
Count()
- Function
- 列 4:
- Field
transaction
- Field
- 列 1:
-
添加方程并在
equation字段中输入以下内容:
(count_if(transaction.duration,lessOrEquals,300) + (count_if(transaction.duration,lessOrEquals,1200) - count_if(transaction.duration,lessOrEquals,300)) * 0.2)/count()
查找最大平均非数据库时间
查找不是来自数据库调用的时间最长的事务。
- 使用以下两列创建一个新查询:
- 列 1:
- Function
avg - Field
transaction.duration
- Function
- 列 2:
- Function
avg - Field
spans.db
- Function
- 列 1:
- 添加一个方程并在
equation字段中输入avg(transaction.duration) - avg(spans.db)。 - 按这个新
equation排序。
通过 Discover 发现趋势
Discover 是一个强大的查询引擎,允许您跨项目和应用程序查询所有错误元数据。 您可能已经注意到,安装在您的应用程序中的 Sentry SDK 捕获了大量事件,每个事件都包含有关底层错误(underlying error)、平台(platform)、设备(device)、用户(user)等的上下文数据。 我们还强烈鼓励通过添加自定义标签和配置 release 和 environment,通过 SDK 丰富您的错误数据。 有关更多信息,请参阅让您的数据发挥作用。
让我们通过一些示例来了解如何处理所有这些数据,以获得有关应用程序运行状况和稳定性的一些有用见解。
如果您设置了与 Sentry 字段同名的标签,则某些表格列选项可能会重复。 对于以下示例,请使用标记为“field”的表列选项。
通过 Issues Discover
当您的应用程序中断时,Sentry 会实时通知您,然后提供信息和工具来分类和解决错误。使用 Discover,您可以采取更主动的方法来查找破坏您的应用程序的主要问题。构建该查询可能如下所示:
- 导航到
“Discover”并单击"Build a new query"。 - 在
Global Header中,选择您要查询的项目(projects)、环境(environments)和错误时间范围(time range of errors)。 - Sentry 监视不同类型的事件的错误和性能。要查询问题(
issues),请在搜索栏中按event.type:error进行过滤。

- 编辑
“Results”表列以显示每个项目的事件数 [count()]、受影响的用户 [count_unique(user)] 和独特问题 [count_unique(issue)]。

-
设置这些列后,您可能希望查找问题最多的项目。单击
COUNT_UNIQUE(ISSUE)列标题以相应地对行项目进行排序。 -
将光标悬停在顶部
project行项目上,单击显示的操作图标,然后选择“Add to filter”。 这将进一步缩小您的结果范围,以便您可以继续调查该特定project的issues。

-
现在让我们看看这些
issues是什么。更改表列以显示:- issue (问题编号)
- title (问题标题)
- count() (事件数)
- count_unique(user) (受问题影响的唯一用户数)
-
在每个行
项目/问题(item/issue)上,您可以单击issue名称以打开“Issue Details”页面并对issue进行分类。您还可以单击“Open Group”图标以在特定问题的上下文中继续查询事件堆栈。

通过 Errors Discover
Discover 的真正强大之处在于它能够查询所有错误元数据,因此您不再局限于 issues 或 projects 的上下文,并且可以揭示所有应用程序的趋势和见解。 让我们看一些例子。
URL 错误
创建一份报告,查看应用程序中 URL 端点中发生的所有错误。
- 搜索条件:
event.type:error has:url - 表列:
url,platform.name,count()

- 通过单击
“Add to filter”并更改表列来查看任一URL端点。 - 或者,使用通配符过滤
URL模式:

未处理的错误
无论您的代码是在移动设备、浏览器还是服务器上运行,未处理的致命错误都可能使您的应用程序崩溃。 要找出这些崩溃发生的位置,请在 Discover 中运行以下查询:
- 搜索条件:
event.type:error handled:no level:fatal - 表列:
mechanism,platform.name,count()

要深入了解其中一种崩溃类型:
- 选择行项目值之一并将其添加到过滤器。
- 修改表列以显示崩溃
message和count()。

错误最多的文件
要找出代码库中哪些文件生成的错误最多,请在 Discover 中运行以下查询:
- 搜索条件:
event.type:error has:stack.filename - 表列:
stack.filename,count(),count_unique(issue)

更改您的 “Display” 选择以将当前时间段与前一时间段进行比较。
您可以通过将特定文件名添加到过滤器并更改表列以显示该文件中的主要错误罪魁祸首来继续探索特定文件名:

每个 Release 的错误
要了解在发布新版本时特定项目的健康状况如何随着时间的推移而改善(或不改善),请创建以下查询:
- 搜索条件:
event.type:error - 表列:
release,count(),count_unique(issue)

从这里您可以添加一个 release 作为过滤器并将列更改为 count() 和 title 以查看类似的错误。 然后您可以单击 “Open Group” 图标来深入查看单个事件。您还可以在 “Results” 表的 “Releases” 中打开 release。
按小时或按天计算的错误
timestamp.to_hour 和 timestamp.to_day 字段分别将 timestamp 向下舍入到最后一小时或一天。 例如,timestamp 值为 Mar 12, 2021 2:26:50 PM UTC 的事件的 timestamp.to_hour 值为 Mar 12, 2021 2:00:00 PM UTC,timestamp.to_day 值为 Mar 12, 2021 12:00:00 AM UTC。 这允许您对事件进行分组。例如,您可以显示每小时至少命中两次的错误计数:

根据您在 User Settings > Account > Account Details 中的用户设置,所有时间戳都显示在您的首选时区中。
其他用例
正如您现在可能已经注意到的那样,Discover 在获得对错误的可见性和洞察力方面非常有用。 有关其他用例,请查看:
- 哪些
issues正在消耗我的配额? - 尖峰保护已激活 - 我该怎么办?
公众号:黑客下午茶

浙公网安备 33010602011771号