其他分享
首页 > 其他分享> > 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)

顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)

作者:互联网

转:

顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)

顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)

SDK 开发

  1. 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇)
  2. 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇)
  3. 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(概述篇)

系列

  1. Snuba:Sentry 新的搜索基础设施(基于 ClickHouse 之上)
  2. Sentry 10 K8S 云原生架构探索,Vue App 1 分钟快速接入
  3. Sentry(v20.x)玩转前/后端监控与事件日志大数据分析,使用 Helm 部署到 K8S 集群
  4. Sentry(v20.x) JavaScript SDK 三种安装加载方式
  5. Sentry(v20.x) JavaScript SDK 配置详解
  6. Sentry(v20.x) JavaScript SDK 手动捕获事件基本用法
  7. Sentry(v20.x) JavaScript SDK Source Maps详解
  8. Sentry(v20.x) JavaScript SDK 故障排除
  9. Sentry(v20.x) JavaScript SDK 1分钟上手性能监控
  10. Sentry(v20.x) JavaScript SDK 性能监控之管理 Transactions
  11. Sentry(v20.x) JavaScript SDK 性能监控之采样 Transactions
  12. Sentry(v20.x) JavaScript SDK Enriching Events(丰富事件信息)
  13. Sentry(v20.x) JavaScript SDK Data Management(问题分组篇)

统一的API

新的 Sentry SDK 应遵循 Unified API,使用一致的术语来指代概念。
本文档说明了 Unified API 是什么以及为什么它存在。

动机

Sentry 有各种各样的 SDK,这些 SDK 是由不同的开发人员根据不同的想法在过去几年里开发出来的。这导致了不同 SDK 的特性设置不同,使用不同的概念和术语,这导致了通常不清楚如何在不同的平台上实现相同的东西。

此外,这些 SDK 完全以通过 explicit clients 进行错误报告为中心,这意味着通常无法进行某些集成(例如面包屑 breadcrumbs)。

一般准则

简化过的图解

顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)

术语

"Static(静态)API"

静态 API 函数是最常见的面向用户的 API。用户只需导入这些功能,即可开始向 Sentry 发出事件或配置作用域。这些快捷方式功能应在包的顶级名称空间中导出。 他们在后台使用 hubsscopes(有关更多信息,请参见并发性 Concurrency)(如果在该平台上可用)。请注意,下面列出的所有函数大部分都是 Hub::get_current().function 的别名。

通常,这会创建(creates)/重新初始化(reinitializes)传播到所有新线程(new threads)/执行上下文(execution contexts)的global hub,或者为每个线程(per thread)/执行上下文(execution context)创建一个 hub

接受 optionsdsn 等),配置 client 并将其绑定到当前 hub 或对其进行初始化。应返回一个 stand-in,可用于 drain events(一次性)。

这可能会返回一个 handleguard 来处理。如何实现这一点完全取决于 SDK。这甚至可能是一个 client,如果这对 SDK 有意义的话。在 Rust 中,它是一个 ClientInitGuard,在 JavaScript 中,它可以是一个带有可等待的 close 方法的 helper 对象。

您应该能够多次调用此方法,而第二次调用它既可以拆除先前的 client,也可以减少先前 client 的引用计数,等等。

多次调用只能用于测试。如果您在应用程序启动以外的任何时间调用 init,将会是 undefined

用户必须调用一次 init,但允许使用禁用的 DSN 进行调用。
例如可能没有参数传递等。

此外,它还设置了所有默认的集成。

并发

所有 SDK 都应具有并发安全上下文存储(concurrency safe context storage)的概念。 这意味着什么取决于语言。 基本思想是,SDK 的用户可以调用一种方法来为即将记录的所有事件安全地提供其他上下文信息。

在大多数语言中,这是作为 thread local stack 实现的,但在某些语言中(比如 JavaScript),它可能是全局的,因为假设这在环境中是有意义的。

以下是一些常见的并发模式:

Hub

在正常情况下,hub 由一堆 clientsscopes 组成。

SDK 维护两个变量:main hub(一个全局变量)和 current hub(当前线程thead或执行上下文execution context的本地变量,有时也称为异步本地async local或上下文本地context local变量)

Scope

scope 包含了应该与 Sentry 事件一起隐式发送的数据。它可以保存上下文数据context data、额外参数extra parameters、级别覆盖level overrides、指纹fingerprints等。

用户可以通过全局函数 configure_scope 修改当前作用域(设置额外的、标记、当前用户)。configure_scope 接受一个回调函数,并将当前的作用域传递给它。

使用这种基于回调的 API 的原因是效率。如果禁用了 SDK,它就不应该调用回调函数,从而避免不必要的工作。

Sentry.configureScope(scope =>
  scope.setExtra("character_name", "Mighty Fighter"));

Client

ClientSDK 中负责事件创建的部分。 例如,Client 应将异常转换为 Sentry eventClient 应该是无状态的,它会注入作用域并委托将事件发送到 Transport 的工作。

Hints

(可选)支持事件捕获和面包屑添加的附加参数:hint

hint 是特定于 SDK 的,但提供了关于事件起源的高级信息。例如,如果捕获了一个异常,提示可能携带原始异常对象。并不是所有的 SDK 都需要提供这个功能。然而,这个参数是为此目的保留的。

Event Pipeline

capture_event 捕获的事件将按以下顺序处理。

注意:事件可以在任何阶段丢弃,此时不会发生进一步的处理。

  1. 如果禁用 SDK, Sentry 会立即丢弃该事件。
  2. 客户端根据配置的采样速率对事件进行采样。事件可以根据抽样率随机丢弃。
  3. 使用 apply_to_event 应用该作用域。按顺序调用作用域的事件处理器。
  4. Sentry 调用 before-send 钩子。
  5. Sentry 将事件传递到配置的 transport。如果传输没有有效的 DSN,则可以丢弃该事件;它的内部队列已满;或由于服务器要求的速率限制。

Options

许多选项都是跨 SDK 标准化的。有关这些选项的列表,请参阅 the main options documentation

我是为少
微信:uuhells123
公众号:黑客下午茶
加我微信(互相学习交流),关注公众号(获取更多学习资料~)

转:

顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)

标签:Unified,20,Hub,hub,Sentry,client,scope,SDK
来源: https://www.cnblogs.com/wangtcc/p/14720433.html