顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇)
顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇)
系列Snuba:Sentry 新的搜索基础设施(基于 ClickHouse 之上)
Sentry 10 K8S 云原生架构探索,Vue App 1 分钟快速接入
Sentry(v20.x)玩转前/后端监控与事件日志大数据分析,使用 Helm 部署到 K8S 集群
Sentry(v20.x) JavaScript SDK 三种安装加载方式
Sentry(v20.x) JavaScript SDK 配置详解
Sentry(v20.x) JavaScript SDK 手动捕获事件基本用法
Sentry(v20.x) JavaScript SDK Source Maps详解
Sentry(v20.x) JavaScript SDK 故障排除
Sentry(v20.x) JavaScript SDK 1分钟上手性能监控
Sentry(v20.x) JavaScript SDK 性能监控之管理 Transactions
Sentry(v20.x) JavaScript SDK 性能监控之采样 Transactions
Sentry(v20.x) JavaScript SDK Enriching Events(丰富事件信息)
Sentry(v20.x) JavaScript SDK Data Management(问题分组篇)
概述下面是一个实现新的 Sentry SDK 的指南。它涵盖了事件提交的协议,以及客户端的典型外观和行为准则。
编写一个SDKSDK 的核心是一组实用程序,用于捕获有关应用程序中异常状态的数据。给定此数据后,它将构建并发送 JSON 有效负载并将其发送到 Sentry 服务器。
预计可用于生产环境的 SDK 包括以下各项:
DSN配置
优雅故障(例如 Sentry 服务器不可达)
设置属性(例如 tags 和 extra data)
支持 Linux,Windows 和 OS X(如果适用)
以下情况需要基于 Feature 的支持:
如果有 Cookie 数据可用,则默认情况下不会发送
如果有 POST 数据,则默认情况下不会发送
此外,强烈建议您使用以下功能:
自动错误捕获(例如,未捕获的异常处理程序 uncaught exception)
日志框架集成
非阻塞事件提交
上下文数据助手(例如,设置当前用户,记录面包屑)
事件取样
Honor Sentry 的 HTTP 429 Retry-After header
事件前和事件后发送钩子
堆栈跟踪中的局部变量值(在可能的平台上)
为每个事件发送一个 environment。如果用户没有检测到或设置任何值,则应该使用 production。
请参阅 features 页面,以获取有关常见的 Sentry SDK 功能的描述。
最终用户的用法通常,对于最终用户来说,使用 SDK 包括三个步骤,无论使用哪种语言,这三个步骤看起来几乎是相同的:
SDK 的初始化(有时对用户隐藏):
JavaScript
Sentry.init({dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'});Python
Sentry.init({dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0'});捕获事件:
JavaScript
var resultId = Sentry.captureException(myException);Python
result_id = sentry_sdk.capture_exception(my_exception);使用事件捕获的结果:
JavaScript
alert(`Your exception was recorded as ${resultId}`);Python
print('Your exception was recorded as %s', result_id);理想情况下,init 允许多种配置方法。第一个参数应该总是 DSN 值(如果可能的话):
JavaScript
Sentry.init({ 'dsn': 'https://examplePublicKey@o0.ingest.sentry.io/0', 'foo': 'bar' })请注意:
SDK 应接受一个空的 DSN 作为有效配置。
如果未初始化 SDK,或者使用空 DSN 初始化了 SDK,则 SDK 不应通过网络发送任何数据,例如捕获的异常。 根据平台的不同,SDK 可能会避免执行不必要的初始化工作,并将其运行时占用空间降至最低。
此外,你应该提供全局函数来捕捉基本消息或异常:
Sentry.captureMessage(message)
Sentry.captureException(exception)
解析DSN鼓励SDK通过构造函数允许任意选项,但必须允许第一个参数作为DSN字符串。该字符串包含以下位:
'{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}{PATH}/{PROJECT_ID}'您将向其发送请求的最终端点按照以下方式构造:
{BASE_URI} = '{PROTOCOL}://{HOST}{PATH}' '{BASE_URI}/api/{PROJECT_ID}/{ENDPOINT}/'Sentry 提供以下端点:
/envelope/ 用于使用 Envelopes 的任何提交。
/store/ 用于提交简单的 JSON 事件。
/minidump/ 用于包含 minidump 的 multipart 请求。
/unreal/ 用于虚幻引擎4崩溃报告。
/security/ 用于浏览器 CSP 报告,通常在浏览器而不是 SDK 中进行配置。
有关如何组成适当的请求有效负载的信息,请查看相应的端点。
例如,给定以下构造函数:
Sentry.init({dsn: 'https://public@sentry.example.com/1'})您应该解析以下设置:
URI = https://sentry.example.com
Public Key = public
Project ID = 1
对于纯 JSON 有效负载的最终 POST 请求随后将传输到:
'https://sentry.example.com/api/1/store/'