当前位置: 首页 > 科技观察

Sentry企业数据安全解决方案-中继监控和指标收集

时间:2023-03-13 22:59:39 科技观察

日志记录Relay生成日志到标准错误流(stderr),默认为INFO日志记录级别。例如,启动Relay后,您可能会看到如下输出:INFO此示例显示具有默认日志记录级别(INFO)的消息,您可以修改该级别以显示更多或更少的信息。有关配置日志记录的详细信息,请参阅选项页面上的日志记录部分。https://docs.sentry.io/product/relay/options/#logging错误报告默认情况下,Relay将错误记录到配置的记录器中。您可以在Relay配置文件中为您的项目在Sentry中启用错误报告:sentry:enabled:truedsn:有关可用选项及其含义的更多信息可以在选项页面上找到。https://docs.sentry.io/product/relay/options/#internal-error-reportinghealthcheckRelay提供了两个检查系统状态的URL:GET/api/relay/healthcheck/live/:测试Relay是否运行Runs并监听HTTP请求。GET/api/relay/healthcheck/ready/:测试Relay是否通过上游验证,是否正常运行。成功时,两个端点都返回200OK响应:{"is_healthy":true}指标您可以通过将metrics.statsd键配置为ip:port元组来将统计信息提交到StatsD服务器。可以设置为ip:port元组。示例配置指标:#EndpointofyourStatsDserverstatsd:127.0.0.1:8126#Prefixallmetricnameswiththisstringprefix:mycompany.relay用于配置指标报告的选项记录在选项页面上。https://docs.sentry.io/product/relay/options/#statsd-metricsRelay收集以下指标event.accepted(Counter)本期接受的信封数量。这表示成功通过速率限制和过滤器并向上游发送的请求。event.corrupted(计数器)具有损坏(不可打印)事件属性的事件数。目前,这会检查环境和版本,我们知道某些SDK可能会发送损坏的值。event.processing_time(Timer)同步处理信封所花费的时间(以毫秒为单位)。该时序涵盖CPU池中的端到端处理,包括:event_processing.deserializeevent_processing.piievent_processing.serialization当Relay处于处理模式时,这还包括以下时序:event_processing.processevent_processing.filteringevent_processing.rate_limitingevent.protocol(计数器)命中任何类似商店的端点的事件数:Envelope、Store、Security、Minidump、Unreal。在以任何方式进行速率限制、过滤或处理之前对事件进行计数。该指标标记为:version:事件协议版本号默认为7。event.queue_size(直方图)队列中的信封数。队列保存了Relay在特定时间正在处理的所有信封:当Relay收到请求时,它确保提交的数据被包裹在一个信封中。信封经过一些初步处理以确定是否可以处理或必须拒绝。做出此决定后,创建信封的HTTP请求将终止,如果要进一步处理请求,信封将排队。信封被视为已处理并在完成处理后离开队列并向上游发送。队列大小可以通过cache.event_buffer_size配置。event.queue_size.pct(直方图)队列中的信封数占队列中可存储的最大信封数的百分比。该值的范围从队列为空时的0到队列已满且无法添加其他事件时的1。队列大小可以通过event.queue_size配置。event.rejected(计数器)当前时间段内被拒绝的信封数。这包括由于格式错误或任何其他处理错误(包括过滤事件、无效负载和速率限制)而被拒绝的信封。要检查拒绝原因,请检查events.outcomes。event.size_bytes.raw(直方图)中继从请求中提取后看到的HTTP请求文本的大小(以字节为单位)。对于信封请求,这是信封的完整尺寸。对于JSON存储请求,这是JSON文字的大小。对于崩溃报告和附件的分段上传,这是分段正文的大小,包括边界。如果请求包含base64zlib压缩的有效负载,但没有正确的内容编码标头,则这是解压缩前的大小。最大请求正文大小可以通过limits.max_envelope_size配置。event.size_bytes.uncompressed(Histogram)Relay在解压缩和解码后看到的请求主体的大小(以字节为单位)。JSON存储请求可能包含base64zlib压缩有效负载,但没有正确的内容编码标头。在这种情况下,度量包含解码后的大小。否则,它始终等于event.size_bytes.raw。event.total_time(计时器)从收到信封到完成处理并提交给上游的总时间(以毫秒为单位)。event.wait_time(Timer)在Relay中接收请求(即请求处理开始)和在EnvelopeProcessor中开始同步处理之间花费的时间。该指标主要表示事件处理中的积压。event_processing.deserialize(Timer)将事件从JSON字节反序列化为Relay操作的本机数据结构所用的时间(以毫秒为单位)。event_processing.filtering(Timer)对事件运行入站数据过滤器所花费的时间量(以毫秒为单位)。event_processing.pii(计时器)为当前事件清理数据所花费的时间(以毫秒为单位)。数据清理发生在事件被序列化回JSON之前。event_processing.process(计时器)在事件上运行事件处理器以进行规范化所花费的时间(以毫秒为单位)。事件处理发生在过滤之前。event_processing.rate_limiting(Timer)检查组织、项目和DSN速率限制所花费的时间(以毫秒为单位)。事件第一次限速后,限速会被缓存。在此之后进入的事件将在请求队列中较早地丢弃,并且不会到达处理队列。event_processing.serialization(Timer)将事件从其内存中表示形式转换为JSON字符串所花费的时间。events.outcomes(计数器)结果数量和拒绝信封的原因。这些指标被标记为:结果:拒绝事件的根本原因。原因:一个更详细的标识符,描述导致结果的规则或机制。to:描述结果的目的地。可以是kafka(在处理模式下)或http(在外部中继中启用结果时)。可能的结果是:filtered:被入站数据过滤器丢弃。原因指定要匹配的过滤器。rate_limited:被组织、项目或DSN速率限制丢弃,并且超出哨兵计划配额。原因包含超出速率限制或配额。invalid:数据被认为是无效的,无法恢复。原因表明认证失败。http_queue.size(直方图)排队等待发送的上游请求数。尽可能保持连接活跃。连接保持打开状态15秒不活动或75秒活动。如果所有连接都忙,它们将排队,这反映在该指标中。指标标记为:优先级:请求的排队优先级,可以是“高”或“低”。优先级确定执行请求的优先顺序。并发连接数可以配置为:limits.max_concurrent_requests连接总数limits.max_concurrent_queries表示并发高优先级请求数metrics.buckets(Gauge)Relay的metricaggregator中metricbuckets的总数。metrics.buckets.created.unique(Set)计算创建的唯一桶的数量。这是一个桶键数组。该指标本质上等同于单个中继的metrics.buckets.merge.miss,但对于确定多个实例运行时有多少重复的桶很有用。Hash目前是依赖于平台的,所以发送这个指标的所有中继应该运行在相同的CPU架构上,否则这个指标是不可靠的。metrics.buckets.flushed(直方图)所有项目在一个周期内刷新的指标桶总数。metrics.buckets.flushed_per_project(直方图)一个周期中每个项目刷新的指标桶数。Relay定期扫描度量桶并刷新过期的桶。为每个正在刷新的项目记录此直方图。直方图值的计数相当于被刷新的项目数。metrics.buckets.merge.hit(计数器)每次合并两个桶或两个指标时递增。按指标类型和名称标记。metrics.buckets.merge.miss(计数器)每次创建桶时递增。按指标类型和名称标记。metrics.buckets.parsing_failed(计数器)从信封中解析度量桶项目失败的次数。metrics.buckets.scan_duration(计时器)扫描指标桶以进行刷新所花费的时间(以毫秒为单位)。Relay定期扫描指标桶并刷新过期的桶。此计时器显示执行此扫描并从内部缓存中删除存储桶所花费的时间。此计时器不包括向上游发送指标桶。metrics.insert(Counter)为每个插入的指标递增。按指标类型和名称标记。outcomes.aggregator.flush_time(计时器)结果聚合器刷新聚合结果所需的时间。processing.event.produced(计数器)放置在Kafka队列中的消息数。当Relay作为Sentry服务运行并且成功处理信封项时,每个信封项都会在Kafka摄取的主题上生成一条专用消息。此指标标记为:event_type:生成给Kafka的消息类型。消息类型可以是:事件:错误或事务事件。错误事件被发送到ingest-events,事务被发送到ingest-transactions,带有附件的错误被发送到ingest-attachments。附件:与错误事件关联的附件文件,发送到ingest-attachments。user_report:来自用户反馈对话框的消息,发送到ingest-events。session:发布健康会话更新,发送到ingest-sessions。processing.produce.error(计数器)在信封排队等待发送到Kafka后发生的生产者错误数。例如,当代理不接受大于特定大小的请求时,这些错误包括“MessageTooLarge”错误,这通常是由于代理/生产者配置无效或不一致造成的。project_cache.eviction(计数器)要从缓存中逐出的陈旧项目数。Relay以cache.eviction_interval配置的固定时间间隔扫描内存中的项目缓存以查找过时的条目。可以使用以下选项配置项目状态的缓存持续时间:cache.project_expiry:项目状态过期的时间。如果请求在过期后引用了某个项目,它将自动刷新。cache.project_grace_period:项目状态过期后多长时间仍用于接收事件。一旦宽限期到期,缓存将被驱逐,新请求将等待更新。project_cache.hit(计数器)从缓存中查找项目的次数。缓存可能包含陈旧或过期的项目状态。在这种情况下,即使在缓存命中后,项目状态也会更新。project_cache.miss(计数器)项目查找失败的次数。立即创建缓存条目并从上游请求项目状态。project_cache.size(直方图)内存中项目缓存中当前保存的项目状态数。项目状态的缓存持续时间可以使用以下选项配置:cache.project_expiry:项目状态被计为过期的时间。如果一个请求引用了一个过期的项目,它会自动刷新。cache.project_grace_period:项目状态到期后多长时间仍将用于摄取事件。一旦宽限期到期,缓存将被逐出,新请求等待更新。缓存项的数量没有限制。project_state.eviction.duration(计时器)驱逐过时和未使用的项目所花费的总时间(以毫秒为单位)。project_state.get(计数器)从缓存中查找项目状态的次数。这包括查找缓存项和新项。作为其中的一部分,将触发对过时或过期项目的缓存的更新。相关指标:project_cache.hit:用于成功的缓存查找,即使是陈旧的项目。project_cache.miss:用于导致更新的失败查找。project_state.no_cache(计数器)使用.no-cache请求项目配置的次数。这有效地计算了使用相应DSN发送的信封或事件的数量。对于这些项目状态请求,上游的实际查询可能仍会进行重复数据删除。每个项目密钥每秒最多允许1个此类请求。此指标仅计算允许的请求。project_state.pending(直方图)内存中项目缓存中等待状态更新的项目数。有关项目缓存的更多说明,请参见project_cache.size。project_state.received(直方图)每个批处理请求从上游返回的项目状态数。如果多个批次同时更新,该指标将被报告多次。有关项目缓存的更多说明,请参见project_cache.size。project_state.request(计数器)项目状态HTTP请求的数量。中继批量更新项目。每个更新周期,Relay从上游请求limits.max_concurrent_queries批次的cache.batch_size项。这些请求的持续时间通过project_state.request.duration报告。请注意,更新周期完成后可能会有更多项目等待更新。这由project_state.pending指示。project_state.request.batch_size(直方图)对于每个批处理请求,来自上游的请求项目状态的数量。如果多个批次同时更新,该指标将被报告多次。批量大小可以通过cache.batch_size配置。有关项目缓存的更多说明,请参见project_cache.size。project_state.request.duration(Timer)获取排队项目配置更新请求以解决的总时间(以毫秒为单位)。中继批量更新项目。每个更新周期,Relay从上游请求limits.max_concurrent_queries*cache.batch_size项。该指标测量此循环中所有并发请求的挂钟时间。请注意,更新周期完成后可能会有更多项目等待更新。这由project_state.pending指示。requests(Counter)对中继的HTTP请求数。requests.duration(计时器)在将HTTP响应返回给客户端之前处理入站Web请求的总持续时间(以毫秒为单位)。这不对应于完整的事件摄取时间。由于数据错误或缓存速率限制而未立即拒绝的事件请求始终返回200OK。正如event.processing_time所报告的那样,完全验证和规范化是异步发生的。该指标标记为:method:请求的HTTP方法。route:端点的唯一点分标识符。requests.timestamp_delay(Timer)有效负载中指定的时间戳与接收时间之间的延迟。SDK无法在所有情况下立即传输负载。有时崩溃需要在重新启动应用程序后发送事件。同样,SDK会缓冲事件以供稍后在网络中断期间传输。该指标衡量事件发生与事件到达中继之间的延迟。该指标衡量事件发生与事件到达中继之间的延迟。仅捕获延迟超过1分钟的有效负载。这些指标被标记为:类别:有效负载的数据类别。可以是以下之一:事件、交易、安全或会话。responses.status_codes(计数器)已完成的HTTP请求数。这些指标被标记为:status_code:HTTP状态代码编号。method:请求中使用的HTTP方法(大写)。route:端点的唯一点分标识符。scrubbing.attachments.duration(计时器)清理附件所花费的时间。这表示评估附件清理规则和附件清理本身所花费的总时间,无论是否应用了任何规则。请注意,无法解析的小型转储(在scrubbing.minidumps.duration中的status="error")将被清理并计为正常附件。scrubbing.minidumps.duration(计时器)清理小型转储所花费的时间。这是解析和清理小型转储所花费的总时间。即使未应用小型转储的PII清理规则,仍将在此处报告的状态为“n/a”的已解析小型转储上对规则进行解析和评估。此指标标记为:状态:清理状态:“ok”表示成功清理,“error”表示清理期间出错,最后是“n/a”表示成功清理但未应用清理规则。server.starting(Counter)中继服务器启动的次数。这可用于追踪由于崩溃或终止而导致的意外重启。unique_projects(Set)指示当前时间片中活动项目的数量upstream.network_outage(Gauge)Relay相对于上游连接的状态。可能的值有0(正常运行)和1(网络中断)。upstream.requests.duration(Timer)向上游中继发送请求和处理响应所花费的总时间。指标标记为:result:请求发生了什么,具有以下值的枚举:success:请求已发送并返回成功代码HTTP2xxresponse_error:请求已发送并返回HTTP错误。payload_failed:请求已发送,但解释响应时出错。send_failed:由于网络错误无法发送请求。rate_limited:请求是有速率限制的。invalid_json:无法将响应解析回JSON。route:调用上游的端点。status-code:请求的状态代码(如果可用),否则为“-”。重试:重试bucket0、1、2,很少(3-10),很多(超过10)。upstream.retries(Histogram)统计每个上游http请求的重试次数。指标标记为:result:请求发生了什么,具有以下值的枚举:success:请求已发送并返回成功代码HTTP2xxresponse_error:请求已发送并返回HTTP错误。payload_failed:请求已发送,但解释响应时出错。send_failed:由于网络错误无法发送请求。rate_limited:请求是有速率限制的。invalid_json:无法将响应解析回JSON。route:调用上游的端点。status-code:请求的状态代码(如果可用),否则为“-”。