基本操作
Client
报告作为 envelope
项发送给 Sentry
, 通常是作为单独的 envelope
或已安排的 envelope
之一。它们不应该被发送得太频繁,但也不能太少。它们的主要目的是让人们了解 SDK
端发生的影响用户体验的事情。
例如,SDK
可能会在 SDK
中的几个地方丢弃事件,而这种事件丢失对客户来说可能是不可见的。 Client
报告让 SDK
发出此类事件结果,以提供有关这种情况发生频率的数据。例如,如果传输达到其最大内部队列大小,SDK
可能会丢弃事件, 因为速率限制
指示 SDK
在事件超过配额
等时丢弃事件。
Envelope(信封)项负载
Client
报告是名为 client_report
的 envelope
中的一项。它包含一个大致如下所示的 JSON
负载:
{ "timestamp": "2020-02-07T14:16:00Z", "discarded_events": [ { "reason": "queue_overflow", "category": "error", "quantity": 23 }, { "reason": "queue_overflow", "category": "transaction", "quantity": 1321 } ] }
请注意,这必须包含在 envelope
中。所以完整的事件看起来像这样:
{} {"type":"client_report"} {"timestamp":"..."}
存在以下字段:
timestamp
- String | Number, optional. 创建
client report
的时间戳。
必须是 ISO 日期时间字符串或 UNIX 时间戳。如果未发送,服务器将采用当前的 UTC 时间戳。在数据模型中,这称为 received
discarded_events
- outcome 对象列表 {
reason
,category
,quantity
} reason
: 定义事件丢失原因的字符串原因。category
: 丢弃原因适用的数据类别。quantity
: 丢失的事件数
目前定义了以下丢弃原因:
queue_overflow
: SDK 内部队列(例如:传输队列)溢出cache_overflow
: SDK 内部缓存(例如:离线事件缓存)溢出ratelimit_backoff
: SDK 丢弃事件是因为较早的速率限制指示 SDK 退出。network_error
: 由于网络错误,事件被丢弃并且没有重试。sample_rate
: 由于配置的采样率,事件被丢弃。
此外,保留以下丢弃原因,但不期望 SDK
在正常操作下发送这些:
before_send
: 事件在before_send
中被丢弃event_processor
: 事件被事件处理器丢弃
SDK 端推荐
鼓励 SDK
减少不必要的通信总量。因此,推荐的方法是直接跟踪 transport
中丢弃原因的计数, 并定期将它们作为单独的 envelope
项冲洗掉或将其附加到已安排好的 envelope
上。由于某些 SDK
仍然发送旧事件而不是 envelope
,以便与旧的 Sentry
服务器向后兼容, 因此在这种情况下,建议将其作为单独的 envelope
发送,或者将其附加到待处理的 session envelope
。