Bug Fixes:
- Terminate the process when one of the services crashes. (#4249)
- Don't propagate trace sampling decisions from SDKs (#4265)
Features:
- Implement zstd http encoding for Relay to Relay communication. (#4266)
Breaking Changes:
- Removes support for metric meta envelope items. (#4152)
- Removes support for the project cache endpoint version 2 and before. (#4147)
Bug Fixes:
- Allow profile chunks without release. (#4155)
Features:
- Add check to ensure unreal user info is not empty. (#4225)
- Retain empty string values in
span.data
andevent.contexts.trace.data
. (#4174) - Allow
sample_rate
to be float type when deserializingDynamicSamplingContext
. (#4181) - Support inbound filters for profiles. (#4176)
- Scrub lower-case redis commands. (#4235)
- Make the maximum idle time of a HTTP connection configurable. (#4248)
- Allow configuring a Sentry server name with an option or the
RELAY_SERVER_NAME
environment variable. (#4251)
Internal:
- Add a metric that counts span volume in the root project for dynamic sampling (
c:spans/count_per_root_project@none
). (#4134) - Add a tag
target_project_id
to both root project metrics for dynamic sampling (c:transactions/count_per_root_project@none
andc:spans/count_per_root_project@none
) which shows the flow trace traffic from root to target projects. (#4170) - Remove
buffer
entries and scrub array contents from MongoDB queries. (#4186) - Use
DateTime<Utc>
instead ofInstant
for tracking the received time of theEnvelope
. (#4184) - Add a field to suggest consumers to ingest spans in EAP. (#4206)
- Run internal worker threads with a lower priority. (#4222)
- Add additional fields to the
Event
Getter
. (#4238) - Replace u64 with
OrganizationId
new-type struct for organization id. (#4159) - Add computed contexts for
os
,browser
andruntime
. (#4239) - Add
CachingEnvelopeStack
strategy to the buffer. (#4242)
Breaking Changes:
- Only allow processing enabled in managed mode. (#4087)
Bug Fixes:
- Report invalid spans with appropriate outcome reason. (#4051)
- Use the duration reported by the profiler instead of the transaction. (#4058)
- Incorrect pattern matches involving adjacent any and wildcard matchers. (#4072)
Features:
- Add a config option to add default tags to all Relay Sentry events. (#3944)
- Automatically derive
client.address
anduser.geo
for standalone spans. (#4047) - Add support for uploading compressed (gzip, xz, zstd, bzip2) minidumps. (#4029)
- Add user geo information to Replays. (#4088)
- Configurable span.op inference. (#4056)
- Enable support for zstd
Content-Encoding
. (#4089) - Accept profile chunks from Android. (#4104)
- Add support for creating User from LoginId in Unreal Crash Context. (#4093)
- Add multi-write Redis client. (#4064)
Internal:
- Remove unused
cogs.enabled
configuration option. (#4060) - Add the dynamic sampling rate to standalone spans as a measurement so that it can be stored, queried, and used for extrapolation. (#4063)
- Use custom wildcard matching instead of regular expressions. (#4073)
- Allowlist the SentryUptimeBot user-agent. (#4068)
- Feature flags of graduated features are now hard-coded in Relay so they can be removed from Sentry. (#4076, #4080)
- Add parallelization in Redis commands. (#4118)
- Extract user ip for spans. (#4144)
- Add support for an experimental OTLP
/v1/traces/
endpoint. The endpoint is disabled by default. (#4223)
Bug Fixes:
- Use
matches_any_origin
to scrub HTTP hosts in spans. (#3939). - Keep frames from both ends of the stacktrace when trimming frames. (#3905)
- Use
UnixTimestamp
instead ofDateTime
when sorting envelopes from disk. (#4025)
Features:
- Add configuration option to specify the instance type of Relay. (#3938)
- Update definitions for user agent parsing. (#3951)
- Extend project config API to be revision aware. (#3947)
- Removes
processing.max_secs_in_past
from the main config in favor of event retention from the project config. (#3958)
Internal:
- Record too long discard reason for session replays. (#3950)
- Add
EnvelopeStore
trait and implementDiskUsage
for tracking disk usage. (#3925) - Increase replay recording limit to two hours. (#3961)
- Forward profiles of non-sampled transactions (with no options filtering). (#3963)
- Make EnvelopeBuffer a Service. (#3965)
- No longer send COGS data to dedicated Kafka topic. (#3953)
- Remove support for extrapolation of metrics. (#3969)
- Remove the internal dashboard that shows logs and metrics. (#3970)
- Remove the OTEL spans endpoint in favor of Envelopes. (#3973)
- Remove the
generate-schema
tool. Relay no longer exposes JSON schema for the event protocol. Consult the Rust type documentation of therelay-event-schema
crate instead. (#3974) - Allow creation of
SqliteEnvelopeBuffer
from config, and load existing stacks from db on startup. (#3967) - Only tag
user.geo.subregion
on frontend and mobile projects. (#4013, #4023) - Implement graceful shutdown mechanism in the
EnvelopeBuffer
. (#3980)
Bug Fixes:
- Allow metrics summaries with only
count
(for sets). (#3864) - Do not trim any span field. Remove entire span instead. (#3890)
- Do not drop replays, profiles and standalone spans in proxy Relays. (#3888)
- Prevent an endless loop that causes high request volume and backlogs when certain large metric buckets are ingested or extrected. (#3893)
- Extract set span metrics from numeric values. (#3897)
Internal:
- Add experimental support for V2 envelope buffering. (#3855, #3863)
- Add
client_sample_rate
to spans, pulled from the trace context. (#3872) - Collect SDK information in profile chunks. (#3882)
- Introduce
trim = "disabled"
type attribute to prevent trimming of spans. (#3877) - Make the tcp listen backlog configurable and raise the default to 1024. (#3899)
- Add experimental support for MongoDB query normalization. (#3912)
- Extract
user.geo.country_code
into span indexed. (#3911) - Add
span.system
tag to span metrics (#3913) - Switch glob implementations from
regex
toregex-lite
. (#3926) - Disables unicode support in user agent regexes. (#3929)
- Extract client sdk from transaction into profiles. (#3915)
- Extract
user.geo.subregion
into span metrics/indexed. (#3914) - Add
last_peek
field to thePriority
struct. (#3922) - Extract
user.geo.subregion
for mobile spans. (#3927) - Rename
Peek
toEnvelopeBufferGuard
. (#3930) - Tag
user.geo.subregion
for resource metrics. (#3934)
Bug Fixes:
- Do not drop envelopes for unparsable project configs. (#3770)
Features:
- "Cardinality limit" outcomes now report which limit was exceeded. (#3825)
- Derive span browser name from user agent. (#3834)
- Redis pools for
project_configs
,cardinality
,quotas
, andmisc
usecases can now be configured individually. (#3859)
Internal:
- Use a dedicated thread pool for CPU intensive workloads. (#3833)
- Remove
BufferGuard
in favor of memory checks viaMemoryStat
. (#3821) - Add ReplayVideo entry to DataCategory. (#3847)
Bug Fixes:
- Fixes raw OS description parsing for iOS and iPadOS originating from the Unity SDK. (#3780)
- Fixes metrics dropped due to missing project state. (#3553)
- Incorrect span outcomes when generated from a indexed transaction quota. (#3793)
- Report outcomes for spans when transactions are rate limited. (#3749)
- Only transfer valid profile ids. (#3809)
Features:
- Allow list for excluding certain host/IPs from scrubbing in spans. (#3813)
Internal:
- Aggregate metrics before rate limiting. (#3746)
- Make sure outcomes for dropped profiles are consistent between indexed and non-indexed categories. (#3767)
- Add web vitals support for mobile browsers. (#3762)
- Ingest profiler_id in the profile context and in spans. (#3714, #3784)
- Support extrapolation of metrics extracted from sampled data, as long as the sample rate is set in the DynamicSamplingContext. (#3753)
- Extract thread ID and name in spans. (#3771)
- Compute metrics summary on the extracted custom metrics. (#3769)
- Add support for
all
andany
RuleCondition
(s). (#3791) - Copy root span data from
contexts.trace.data
when converting transaction events into raw spans. (#3790) - Remove experimental double-write from spans to transactions. (#3801)
- Add feature flag to disable replay-video events. (#3803)
- Write the envelope's Dynamic Sampling Context (DSC) into event payloads for debugging. (#3811)
- Decrease max allowed segment_id for replays to one hour. (#3280)
- Extract a duration light metric for spans without a transaction name tag. (#3772)
Bug fixes:
- Trim fields in replays to their defined maximum length. (#3706)
- Emit span usage metric for every extracted or standalone span, even if common span metrics are disabled. (#3719)
- Stop overwriting the level of user supplied errors in unreal crash reports. (#3732)
- Apply rate limit on extracted spans when the transaction is rate limited. (#3713)
Internal:
- Treat arrays of pairs as key-value mappings during PII scrubbing. (#3639)
- Rate limit envelopes instead of metrics for sampled/indexed items. (#3716)
- Improve flush time calculation in metrics aggregator. (#3726)
- Default
client
ofRequestMeta
torelay-http
for incoming monitor requests. (#3739) - Normalize events once in the ingestion pipeline, relying on item headers. (#3730)
- Provide access to values in
span.tags.*
viaspan.data.*
. This serves as an opaque fallback to consolidate data attributes. (#3751)
Bug fixes:
- Apply globally defined metric tags to legacy transaction metrics. (#3615)
- Limit the maximum size of spans in an transaction to 800 kib. (#3645)
- Scrub identifiers in spans with
op:db
anddb_system:redis
. (#3642) - Stop trimming important span fields by marking them
trim = "false"
. (#3670)
Features:
- Apply legacy inbound filters to standalone spans. (#3552)
- Add separate feature flags for add-ons span metrics and indexed spans. (#3633)
Internal:
- Send microsecond precision timestamps. (#3613)
- Pull AI token counts from the 'data' section as well. (#3630)
- Map outcome reasons for dynamic sampling to reduced set of values. (#3623)
- Extract status for spans. (#3606)
- Forward
received_at
timestamp for buckets sent to Kafka. (#3561) - Limit metric name to 150 characters. (#3628)
- Add validation of Kafka topics on startup. (#3543)
- Send
attachment
data inline when possible. (#3654) - Drops support for transaction metrics extraction versions < 3. (#3672)
- Move partitioning into the
Aggregator
and add a newPartition
bucket shift mode. (#3661) - Calculate group hash for function spans. (#3697)
Breaking Changes:
- Remove the AWS lambda extension. (#3568)
Bug fixes:
- Properly handle AI metrics from the Python SDK's
@ai_track
decorator. (#3539) - Mitigate occasional slowness and timeouts of the healthcheck endpoint. The endpoint will now respond promptly an unhealthy state. (#3567)
Features:
- Apple trace-based sampling rules to standalone spans. (#3476)
- Localhost inbound filter filters sudomains of localhost. (#3608)
Internal:
- Add metrics extraction config to global config. (#3490, #3504)
- Adjust worker thread distribution of internal services. (#3516)
- Extract
cache.item_size
from measurements instead of data. (#3510) - Collect
enviornment
tag as part of exclusive_time_light for cache spans. (#3510) - Forward
span.data
on the Kafka message. (#3523) - Tag span duration metric like exclusive time. (#3524)
- Emit negative outcomes for denied metrics. (#3508)
- Increase size limits for internal batch endpoints. (#3562)
- Emit negative outcomes when metrics are rejected because of a disabled namespace. (#3544)
- Add AI model costs to global config. (#3579)
- Add support for
event.
in theSpan
Getter
implementation. (#3577) - Ensure
chunk_id
andprofiler_id
are UUIDs and sort samples. (#3588) - Add a calculated measurement based on the AI model and the tokens used. (#3554)
- Restrict usage of OTel endpoint. (#3597)
- Support new cache span ops in metrics and tag extraction. (#3598)
- Extract additional user fields for spans. (#3599)
- Disable
db.redis
span metrics extraction. (#3600) - Extract status for spans. (#3606)
- Extract cache key for spans. (#3631)
Breaking Changes:
- Stop supporting dynamic sampling mode
"total"
, which adjusted for the client sample rate. (#3474)
Bug fixes:
- Respect country code TLDs when scrubbing span tags. (#3458)
- Extract HTTP status code from span data when sent as integers. (#3491)
Features:
- Separate the logic for producing UserReportV2 events (user feedback) and handle attachments in the same envelope as feedback. (#3403)
- Use same keys for OTel span attributes and Sentry span data. (#3457)
- Support passing owner when upserting Monitors. (#3468)
- Add
features
to ClientSDKInfo (#3478 - Extract
frames.slow
,frames.frozen
, andframes.total
metrics from mobile spans. (#3473) - Extract
frames.delay
metric from mobile spans. (#3472) - Consider "Bearer" (case-insensitive) a password. PII will scrub all strings matching that substring. (#3484)
- Add support for
CF-Connecting-IP
header. (#3496) - Add
received_at
timestamp toBucketMetadata
to measure the oldest received timestamp of theBucket
. (#3488)
Internal:
- Emit gauges for total and self times for spans. (#3448)
- Collect exclusive_time_light metrics for
cache.*
spans. (#3466) - Build and publish ARM docker images for Relay. (#3272).
- Remove
MetricMeta
feature flag and useCustomMetrics
instead. (#3503) - Collect
transaction.op
as tag for frame metrics. (#3512)
Features:
- Add inbound filters for
Annotated<Replay>
types. (#3420) - Add Linux distributions to os context. (#3443)
Internal:
- Emit negative outcomes in metric stats for metrics. (#3436)
- Add new inbound filter: Permission denied to access property "x" (#3442)
- Emit negative outcomes for metrics via metric stats in pop relays. (#3452)
- Extract
ai
category and annotate metrics with it. (#3449)
Breaking changes:
- Kafka topic configuration keys now support the default topic name. The previous aliases
metrics
andmetrics_transactions
are no longer supported if configuring topics manually. Useingest-metrics
ormetrics_sessions
instead ofmetrics
, andingest-performance-metrics
ormetrics_generic
instead ofmetrics_transactions
. (#3361) - Remove
ShardedProducer
and related code. The sharded configuration for Kafka is no longer supported. (#3415)
Bug fixes:
- Fix performance regression in disk spooling by using page counts to estimate the spool size. (#3379)
- Perform clock drift normalization only when
sent_at
is set in theEnvelope
headers. (#3405) - Do not overwrite
span.is_segment: true
if already set by SDK. (#3411)
Features:
- Add support for continuous profiling. (#3270)
- Add support for Reporting API for CSP reports (#3277)
- Extract op and description while converting opentelemetry spans to sentry spans. (#3287)
- Drop
event_id
andremote_addr
from all outcomes. (#3319) - Support for AI token metrics (#3250)
- Accept integers in
event.user.username
. (#3328) - Produce user feedback to ingest-feedback-events topic, with rollout rate. (#3344)
- Extract
cache.item_size
andcache.hit
data into span indexed (#3367) - Allow IP addresses in metrics domain tag. (#3365)
- Support the full unicode character set via UTF-8 encoding for metric tags submitted via the statsd format. Certain restricted characters require escape sequences, see docs for the precise rules. (#3358)
- Stop extracting count_per_segment and count_per_op metrics. (#3380)
- Add
cardinality_limited
outcome with id6
. (#3389) - Extract
cache.item_size
andcache.hit
metrics. (#3371) - Optionally convert segment spans to transactions for compatibility. (#3375)
- Extract scrubbed IP addresses into the
span.domain
tag. (#3383)
Internal:
- Enable
db.redis
span metrics extraction. (#3283) - Add data categories for continuous profiling. (#3284, #3303)
- Apply rate limits to span metrics. (#3255)
- Extract metrics from transaction spans. (#3273, #3324)
- Implement volume metric stats. (#3281)
- Implement cardinality metric stats. (#3360)
- Scrub transactions before enforcing quotas. (#3248)
- Implement metric name based cardinality limits. (#3313)
- Kafka topic config supports default topic names as keys. (#3282, #3350)
- Extract
ai_total_tokens_used
metrics from spans. (#3412, #3440) - Set all span tags on the transaction span. (#3310)
- Emit outcomes for user feedback events. (#3026)
- Collect duration for all spans. (#3322)
- Add
project_id
as part of the span Kafka message headers. (#3320) - Stop producing to sessions topic, the feature is now fully migrated to metrics. (#3271)
- Pass
retention_days
in the Kafka profile messages. (#3362) - Support and expose namespaces for metric rate limit propagation via the
x-sentry-rate-limits
header. (#3347) - Tag span duration metric by group for all ops supporting description scrubbing. (#3370)
- Copy transaction tags to segment. (#3386)
- Route spans according to trace_id. (#3387)
- Log span when encountering a validation error. (#3401)
- Optionally skip normalization. (#3377)
- Scrub file extensions in file spans and tags. (#3413)
Features:
- Extend GPU context with data for Unreal Engine crash reports. (#3144)
- Implement base64 and zstd metric bucket encodings. (#3218)
- Implement COGS measurements into Relay. (#3157)
- Parametrize transaction in dynamic sampling context. (#3141)
- Adds ReplayVideo envelope-item type. (#3105)
- Parse & scrub span description for supabase. (#3153, #3156)
- Introduce generic filters in global configs. (#3161)
- Individual cardinality limits can now be set into passive mode and not be enforced. (#3199)
- Allow enabling SSL for Kafka. (#3232)
- Enable HTTP compression for all APIs. (#3233)
- Add
process.load
span to ingested mobile span ops. (#3227) - Track metric bucket metadata for Relay internal usage. (#3254)
- Enforce rate limits for standalone spans. (#3238)
- Extract
span.status_code
tag for HTTP spans. (#3245) - Add
version
property and set as event context when a performance profile has calculated data. (#3249)
Bug Fixes:
- Forward metrics in proxy mode. (#3106)
- Do not PII-scrub code locations by default. (#3116)
- Accept transactions with unfinished spans. (#3162)
- Don't run validation on renormalization, and don't normalize spans from librelay calls. (#3214)
- Pass on multipart attachments without content type. (#3225)
Internal:
- Add quotas to global config. (#3086)
- Adds support for dynamic metric bucket encoding. (#3137)
- Use statsdproxy to pre-aggregate metrics. (#2425)
- Add SDK information to spans. (#3178)
- Drop replay envelopes if any item fails. (#3201)
- Filter null values from metrics summary tags. (#3204)
- Emit a usage metric for every span seen. (#3209)
- Add namespace for profile metrics. (#3229)
- Collect exclusive time for all spans. (#3268)
- Add segment_id to the profile. (#3265)
Bug Fixes:
- Fix regression in SQL query scrubbing. (#3091)
- Fix span metric ingestion for http spans. (#3111)
- Normalize route in trace context data field. (#3104)
Features:
- Add protobuf support for ingesting OpenTelemetry spans and use official
opentelemetry-proto
generated structs. (#3044)
Internal:
- Add ability to use namespace in non-global quotas. (#3090)
- Set the span op on segments. (#3082)
- Skip profiles without required measurements. (#3112)
- Push metrics summaries to their own topic. (#3045)
- Add
user.sentry_user
computed field for the on demand metrics extraction pipeline. (#3122)
Features:
- Add
raw_domain
tag to indexed spans. (#2975) - Obtain
span.domain
field from the span data'surl.scheme
andserver.address
properties when applicable. (#2975) - Do not truncate simplified SQL expressions. (#3003)
- Add
app_start_type
as a tag for self time and duration for app start spans. (#3027), (#3066)
Internal:
- Emit a usage metric for total spans. (#3007)
- Drop timestamp from metrics partition key. (#3025)
- Drop spans ending outside the valid timestamp range. (#3013)
- Add support for combining replay envelope items. (#3035)
- Extract INP metrics from spans. (#2969, #3041)
- Add ability to rate limit metric buckets by namespace. (#2941)
- Upgrade sqlparser to 0.43.1.(#3057)
- Implement project scoped cardinality limits. (#3071)
Features:
- Add new legacy browser filters. (#2950)
Internal:
- Implement quota system for cardinality limiter. (#2972)
- Use cardinality limits from project config instead of Relay config. (#2990)
- Proactively move on-disk spool to memory. (#2949)
- Default missing
Event.platform
andEvent.level
fields during light normalization. (#2961) - Copy event measurements to span & normalize span measurements. (#2953)
- Add
allow_negative
toBuiltinMeasurementKey
. Filter out negative BuiltinMeasurements ifallow_negative
is false. (#2982) - Add possiblity to block metrics or their tags with glob-patterns. (#2954, #2973)
- Forward profiles of non-sampled transactions. (#2940)
- Enable throttled periodic unspool of the buffered envelopes. (#2993)
Bug Fixes:
- Add automatic PII scrubbing to
logentry.params
. (#2956) - Avoid producing
null
values in metric data. These values were the result of Infinity or NaN values extracted from event data. The values are now discarded during extraction. (#2958) - Fix processing of user reports. (#2981, #2984)
- Fetch project config when metrics are received. (#2987)
Features:
- Add a global throughput rate limiter for metric buckets. (#2928)
- Group db spans with repeating logical conditions together. (#2929)
Bug Fixes:
- Normalize event timestamps before validating them, fixing cases where Relay would drop valid events with reason "invalid_transaction". (#2878)
- Resolve a division by zero in performance score computation that leads to dropped metrics for transactions. (#2911)
Internal:
- Add
duration
metric for mobile app start spans. (#2906) - Introduce the configuration option
http.global_metrics
. When enabled, Relay submits metric buckets not through regular project-scoped Envelopes, but instead through the global endpoint. When this Relay serves a high number of projects, this can reduce the overall request volume. (#2902) - Record the size of global metrics requests in statsd as
upstream.metrics.body_size
. (#2908) - Make Kafka spans compatible with the Snuba span schema. (#2917, #2926)
- Only extract span metrics / tags when they are needed. (#2907, #2923, #2924)
- Normalize metric resource identifiers in
event._metrics_summary
andspan._metrics_summary
. (#2914) - Send outcomes for spans. (#2930)
- Validate error_id and trace_id vectors in replay deserializer. (#2931)
- Add a data category for indexed spans. (#2937)
- Add nested Android app start span ops to span ingestion (#2927)
- Create rate limited outcomes for cardinality limited metrics (#2947)
Internal:
- Use a Lua script and in-memory cache for the cardinality limiting to reduce load on Redis. (#2849)
- Extract metrics for file spans. (#2874)
- Add an internal endpoint that allows Relays to submit metrics from multiple projects in a single request. (#2869)
- Emit a
processor.message.duration
metric to assess the throughput of the internal CPU pool. (#2877) - Add
transaction.op
to the duration light metric. (#2881)
Features:
- Ingest OpenTelemetry and standalone Sentry spans via HTTP or an envelope. (#2620)
- Partition and split metric buckets just before sending. Log outcomes for metrics. (#2682)
- Support optional
PerformanceScoreWeightedComponent
in performance score processing. (#2783) - Return global config ready status to downstream relays. (#2765)
- Add Mixed JS/Android Profiles events processing. (#2706)
- Allow to ingest measurements on a span. (#2792)
- Extract size metrics for all resource spans when permitted. (#2805)
- Allow access to more fields in dynamic sampling and metric extraction. (#2820)
- Add Redis set based cardinality limiter for metrics. (#2745)
- Support issue thresholds for Cron Monitor configurations (#2842)
Bug Fixes:
- In on-demand metric extraction, use the normalized URL instead of raw URLs sent by SDKs. This bug prevented metrics for certain dashboard queries from being extracted. (#2819)
- Ignore whitespaces when parsing user reports. (#2798)
- Fix parsing bug for SQL queries. (#2846)
Internal:
- Support source context in metric code locations metadata entries. (#2781)
- Temporarily add metric summaries on spans and top-level transaction events to link DDM with performance monitoring. (#2757)
- Add size limits on metric related envelope items. (#2800)
- Include the size offending item in the size limit error message. (#2801)
- Allow ingestion of metrics summary on spans. (#2823)
- Add metric_bucket data category. (#2824)
- Org rate limit metrics per bucket. (#2836)
- Emit image resource spans, grouped by domain and extension. (#2826, #2855)
- Parse timestamps from strings in span OpenTelemetry schema. (#2857)
Features:
- Normalize invalid metric names. (#2769)
Internal:
- Add support for metric metadata. (#2751)
normalize_performance_score
now handlesPerformanceScoreProfile
configs with zero weight components and component weight sums of any number greater than 0. (#2756)
Features:
normalize_performance_score
stores 0 to 1 cdf score instead of weighted score for each performance score component. (#2734)- Add Bytespider (Bytedance) to web crawler filter. (#2747)
Bug Fixes:
- Fix bug introduced in 23.11.0 that broke profile-transaction association. (#2733)
Internal:
- License is now FSL instead of BSL (#2739)
- Support
device.model
in dynamic sampling and metric extraction. (#2728) - Support comparison operators (
>
,>=
,<
,<=
) for strings in dynamic sampling and metric extraction rules. Previously, these comparisons were only possible on numbers. (#2730) - Postpone processing till the global config is available. (#2697)
- Skip running
NormalizeProcessor
on renormalization. (#2744)
Features:
- Add inbound filters option to filter legacy Edge browsers (i.e. versions 12-18 ) (#2650)
- Add User Feedback Ingestion. (#2604)
- Group resource spans by scrubbed domain and filename. (#2654)
- Convert transactions to spans for all organizations. (#2659)
- Filter outliers (>180s) for mobile measurements. (#2649)
- Allow access to more context fields in dynamic sampling and metric extraction. (#2607, #2640, #2675, #2707, #2715)
- Allow advanced scrubbing expressions for datascrubbing safe fields. (#2670)
- Disable graphql scrubbing when datascrubbing is disabled. (#2689)
- Track when a span was received. (#2688)
- Add context for NEL (Network Error Logging) reports to the event schema. (#2421)
- Add
validate_pii_selector
to CABI for safe fields validation. (#2687) - Do not scrub Prisma spans. (#2711)
- Count spans by op. (#2712)
- Extract resource spans & metrics regardless of feature flag. (#2713)
Bug Fixes:
- Disable scrubbing for the User-Agent header. (#2641)
- Fixes certain safe fields disabling data scrubbing for all string fields. (#2701)
Internal:
- Disable resource link span ingestion. (#2647)
- Collect
http.decoded_response_content_length
. (#2638) - Add TTID and TTFD tags to mobile spans. (#2662)
- Validate span timestamps and IDs in light normalization on renormalization. (#2679)
- Scrub all DB Core Data spans differently. (#2686)
- Support generic metrics extraction version 2. (#2692)
- Emit error on continued project config fetch failures after a time interval. (#2700)
Features:
- Update Docker Debian image from 10 to 12. (#2622)
- Remove event spans starting or ending before January 1, 1970 UTC. (#2627)
- Remove event breadcrumbs dating before January 1, 1970 UTC. (#2635)
Internal:
- Report global config fetch errors after interval of constant failures elapsed. (#2628)
- Restrict resource spans to script and css only. (#2623)
- Postpone metrics aggregation until we received the project state. (#2588)
- Scrub random strings in resource span descriptions. (#2614)
- Apply consistent rate-limiting prior to aggregation. (#2652)
Features:
- Scrub span descriptions with encoded data images. (#2560)
- Accept spans needed for the mobile Starfish module. (#2570)
- Extract size metrics and blocking status tag for resource spans. (#2578)
- Add a setting to rollout ingesting all resource spans. (#2586)
- Drop events starting or ending before January 1, 1970 UTC. (#2613)
- Add support for X-Sentry-Forwarded-For header. (#2572)
- Add a generic way of configuring inbound filters via project configs. (#2595)
Bug Fixes:
- Remove profile_id from context when no profile is in the envelope. (#2523)
- Fix reporting of Relay's crashes to Sentry. The
crash-handler
feature did not enable the crash reporter and uploads of crashes were broken. (#2532) - Use correct field to pick SQL parser for span normalization. (#2536)
- Prevent stack overflow on SQL serialization. (#2538)
- Bind exclusively to the port for the HTTP server. (#2582)
- Scrub resource spans even when there's no domain or extension or when the description is an image. (#2591)
Internal:
- Exclude more spans fron metrics extraction. (#2522), #2525, #2545, #2566)
- Remove filtering for Android events with missing close events. (#2524)
- Fix hot-loop burning CPU when upstream service is unavailable. (#2518)
- Extract new low-cardinality transaction duration metric for statistical detectors. (#2513)
- Introduce reservoir sampling rule. (#2550)
- Write span tags to
span.sentry_tags
instead ofspan.data
. (#2555, #2598) - Use JSON instead of MsgPack for Kafka spans. (#2556)
- Add
profile_id
to spans. (#2569) - Introduce a dedicated usage metric for transactions that replaces the duration metric. (#2571, #2589)
- Restore the profiling killswitch. (#2573)
- Add
scraping_attempts
field to the event schema. (#2575) - Move
condition.rs
fromrelay-sampling
torelay-protocol
. (#2608)
- No documented changes.
Features:
- Add
view_names
toAppContext
(#2344) - Tag keys in error events and transaction events can now be up to
200
ASCII characters long. Before, tag keys were limited to 32 characters. (#2453) - The Crons monitor check-in APIs have learned to accept JSON via POST. This allows for monitor upserts by specifying the
monitor_config
in the JSON body. (#2448) - Add an experimental web interface for local Relay deployments. (#2422)
Bug Fixes:
- Filter out exceptions originating in Safari extensions. (#2408)
- Fixes the
TraceContext.status
not being defaulted tounknown
before the new metrics extraction pipeline. (#2436) - Support on-demand metrics for alerts and widgets in external Relays. (#2440)
- Prevent sporadic data loss in
EnvelopeProcessorService
. (#2454) - Prevent panic when android trace contains invalid start time. (#2457)
Internal:
- Use static global configuration if file is provided and not in managed mode. (#2458)
- Add
MeasurementsConfig
toGlobalConfig
and implement merging logic with project config. (#2415) - Support ingestion of custom metrics when the
organizations:custom-metrics
feature flag is enabled. (#2443) - Merge span metrics and standalone spans extraction options. (#2447)
- Support parsing aggregated metric buckets directly from statsd payloads. (#2468, #2472)
- Improve performance when ingesting distribution metrics with a large number of data points. (#2483)
- Improve documentation for metrics bucketing. (#2503)
- Rename the envelope item type for StatsD payloads to "statsd". (#2470)
- Add a nanojoule unit for profile measurements. (#2478)
- Add a timestamp field to report profile's start time on Android. (#2486)
- Filter span metrics extraction based on features. (#2511, #2520)
- Extract shared tags on the segment. (#2512)
Features:
- Add
Cross-Origin-Resource-Policy
HTTP header to responses. (#2394)
Features:
- Normalize old React Native SDK app start time measurements and spans. (#2358)
Bug Fixes:
- Limit environment names on check-ins to 64 chars. (#2309)
Internal:
- Add new service for fetching global configs. (#2320)
- Feature-flagged extraction & publishing of spans from transactions. (#2350)
Bug Fixes:
- Trim fields (e.g.
transaction
) before metrics extraction. (#2342) - Interpret
aggregator.max_tag_value_length
as characters instead of bytes. (#2343)
Internal:
- Add capability to configure metrics aggregators per use case. (#2341)
- Configurable flush time offsets for metrics buckets. (#2349)
Bug Fixes:
- Filter idle samples at the edge per thread. (#2321)
Internal:
- Add support for
sampled
field in the DSC and error tagging. (#2290) - Move span tag extraction from metrics to normalization. (#2304)
Features:
- Add filter based on transaction names. (#2118, #2284)
- Use GeoIP lookup also in non-processing Relays. Lookup from now on will be also run in light normalization. (#2229)
- Metrics extracted from transactions from old SDKs now get a useful
transaction
tag. (#2250, #2272).
Bug Fixes:
- Skip dynamic sampling if relay doesn't support incoming metrics extraction version. (#2273)
- Keep stack frames closest to crash when quantity exceeds limit. (#2236)
- Drop profiles without a transaction in the same envelope. (#2169)
Internal:
- Implement basic generic metrics extraction for transaction events. (#2252, #2257)
- Support more fields in dynamic sampling, metric extraction, and conditional tagging. The added fields are
dist
,release.*
,user.{email,ip_address,name}
,breakdowns.*
, andextra.*
. (#2259, #2276)
- No documented changes.
Bug Fixes:
- Make counting of total profiles consistent with total transactions. (#2163)
Features:
- Add
data
andapi_target
fields toResponseContext
and scrubgraphql
bodies. (#2141) - Add support for X-Vercel-Forwarded-For header. (#2124)
- Add
lock
attribute to the frame protocol. (#2171) - Reject profiles longer than 30s. (#2168)
- Change default topic for transaction metrics to
ingest-performance-metrics
. (#2180) - Add Firefox "dead object" error to browser extension filter (#2215)
- Add events whose
url
starts withfile://
to localhost inbound filter (#2214)
Internal:
- Extract app identifier from app context for profiles. (#2172)
- Mark all URL transactions as sanitized after applying rules. (#2210)
- Add limited, experimental Sentry performance monitoring. (#2157)
Features:
-
Use different error message for empty strings in schema processing. (#2151)
-
Filter irrelevant webkit-issues. (#2088)
-
Relay now supports a simplified cron check-in API. (#2153)
Bug Fixes:
- Sample only transaction events instead of sampling both transactions and errors. (#2130)
- Fix tagging of incoming errors with
sampled
that was not done due to lack of sampling state. (#2148) - Remove profiling feature flag. (#2146)
Internal:
- Mark all URL transactions as
sanitized
whentxNameReady
flag is set. (#2128, #2139) - Tag incoming errors with the new
sampled
field in case their DSC is sampled. (#2026) - Enable PII scrubbing for urls field (#2143)
Bug Fixes:
- Enforce rate limits for monitor check-ins. (#2065)
- Allow rate limits greater than
u32::MAX
. (#2079) - Do not drop envelope when client closes connection. (#2089)
Features:
- Scrub IBAN as pii. (#2117)
- Scrub sensitive keys (
passwd
,token
, ...) in Replay recording data. (#2034) - Add support for old 'violated-directive' CSP format. (#2048)
- Add document_uri to csp filter. (#2059)
- Store
geo.subdivision
of the end user location. (#2058) - Scrub URLs in span descriptions. (#2095)
Internal:
- Remove transaction metrics allowlist. (#2092)
- Include unknown feature flags in project config when serializing it. (#2040)
- Copy transaction tags to the profile. (#1982)
- Lower default max compressed replay recording segment size to 10 MiB. (#2031)
- Increase chunking limit to 15MB for replay recordings. (#2032)
- Add a data category for indexed profiles. (#2051, #2071)
- Differentiate between
Profile
andProfileIndexed
outcomes. (#2054) - Split dynamic sampling implementation before refactoring. (#2047)
- Refactor dynamic sampling implementation across
relay-server
andrelay-sampling
. (#2066) - Adds support for
replay_id
field for theDynamicSamplingContext
'sFieldValueProvider
. (#2070) - On Linux, switch to
jemalloc
instead of the system memory allocator to reduce Relay's memory footprint. (#2084) - Scrub sensitive cookies
__session
. (#2105)) - Parse profiles' metadata to check if it should be marked as invalid. (#2104)
- Set release as optional by defaulting to an empty string and add a dist field for profiles. (#2098, #2107)
- Accept source map debug images in debug meta for Profiling. (#2097)
Breaking Changes:
This release contains major changes to the web layer, including TCP and HTTP handling as well as all web endpoint handlers. Due to these changes, some functionality was retired and Relay responds differently in specific cases.
Configuration:
- SSL support has been dropped. As per official guidelines, Relay should be operated behind a reverse proxy, which can perform SSL termination.
- Connection config options
max_connections
,max_pending_connections
, andmax_connection_rate
no longer have an effect. Instead, configure the reverse proxy to handle connection concurrency as needed.
Endpoints:
- The security endpoint no longer forwards to upstream if the mime type doesn't match supported mime types. Instead, the request is rejected with a corresponding error.
- Passing store payloads as
?sentry_data=<base64>
query parameter is restricted toGET
requests on the store endpoint. Other endpoints require the payload to be passed in the request body. - Requests with an invalid
content-encoding
header will now be rejected. Exceptions to this are an empty string andUTF-8
, which have been sent historically by some SDKs and are now treated as identity (no encoding). Previously, all unknown encodings were treated as identity. - Temporarily, response bodies for some errors are rendered as plain text instead of JSON. This will be addressed in an upcoming release.
Metrics:
- The
route
tag of request metrics uses the route pattern instead of schematic names. There is an exact replacement for every previous route. For example,"store-default"
is now tagged as"/api/:project_id/store/"
. - Statsd metrics
event.size_bytes.raw
andevent.size_bytes.uncompressed
have been removed.
Features:
- Allow monitor checkins to paass
monitor_config
for monitor upserts. (#1962) - Add replay_id onto event from dynamic sampling context. (#1983)
- Add product-name for devices, derived from the android model. (#2004)
- Changes how device class is determined for iPhone devices. Instead of checking processor frequency, the device model is mapped to a device class. (#1970)
- Don't sanitize transactions if no clustering rules exist and no UUIDs were scrubbed. (#1976)
- Add
thread.lock_mechanism
field to protocol. (#1979) - Add
origin
to trace context and span. (#1984) - Add
jvm
debug file type. (#2002) - Add new
mechanism
fields to protocol to support exception groups. (#2020) - Change
lock_reason
attribute to aheld_locks
dictionary in thethread
interface. (#2018)
Internal:
- Add BufferService with SQLite backend. (#1920)
- Upgrade the web framework and related dependencies. (#1938)
- Apply transaction clustering rules before UUID scrubbing rules. (#1964)
- Use exposed device-class-synthesis feature flag to gate device.class synthesis in light normalization. (#1974)
- Adds iPad support for device.class synthesis in light normalization. (#2008)
- Pin schemars dependency to un-break schema docs generation. (#2014)
- Remove global service registry. (#2022)
- Apply schema validation to all topics in local development. (#2013)
Monitors:
- Monitor check-ins may now specify an environment (#2027)
Features:
- Indicate if OS-version may be frozen with '>=' prefix. (#1945)
- Normalize monitor slug parameters into slugs. (#1913)
- Smart trim loggers for Java platforms. (#1941)
Internal:
Features:
- Extract attachments from transaction events and send them to kafka individually. (#1844)
- Protocol validation for source map image type. (#1869)
- Strip quotes from client hint values. (#1874)
- Add Dotnet, Javascript and PHP support for profiling. (#1871, #1876, #1885)
- Initial support for the Crons beta. (#1886)
- Scrub
span.data.http.query
with default scrubbers. (#1889) - Synthesize new class attribute in device context using specs found on the device, such as processor_count, memory_size, etc. (#1895)
- Add
thread.state
field to protocol. (#1896) - Move device.class from contexts to tags. (#1911)
- Optionally mark scrubbed URL transactions as sanitized. (#1917)
- Perform PII scrubbing on meta's original_value field. (#1892)
- Add links to docs in YAML config file. (#1923)
- For security reports, add the request's
origin
header to sentry events. (#1934)
Bug Fixes:
- Enforce rate limits for session replays. (#1877)
Internal:
- Revert back the addition of metric names as tag on Sentry errors when relay drops metrics. (#1873)
- Tag the dynamic sampling decision on
count_per_root_project
to measure effective sample rates. (#1870) - Deprecate fields on the profiling sample format. (#1878)
- Remove idle samples at the start and end of a profile and useless metadata. (#1894)
- Move the pending envelopes buffering into the project cache. (#1907)
- Remove platform validation for profiles. (#1933)
Features:
- Use client hint headers instead of User-Agent when available. (#1752, #1802, #1838)
- Apply all configured data scrubbing rules on Replays. (#1731)
- Add count transactions toward root project. (#1734)
- Add or remove the profile ID on the transaction's profiling context. (#1801)
- Implement a new sampling algorithm with factors and multi-matching. (#1790
- Add Cloud Resource context. (#1854)
Bug Fixes:
- Fix a bug where the replays ip-address normalization was not being applied when the user object was omitted. (#1805)
- Improve performance for replays, especially memory usage during data scrubbing. (#1800, #1825)
- When a transaction is rate limited, also remove associated profiles. (#1843)
Internal:
- Add metric name as tag on Sentry errors from relay dropping metrics. (#1797)
- Make sure to scrub all the fields with PII. If the fields contain an object, the entire object will be removed. (#1789)
- Keep meta for removed custom measurements. (#1815)
- Drop replay recording payloads if they cannot be parsed or scrubbed. (#1683)
Features:
- Add error and sample rate fields to the replay event parser. (#1745)
- Add
instruction_addr_adjustment
field toRawStacktrace
. (#1716) - Add SSL support to
relay-redis
crate. It is possible to userediss
scheme to connnect to Redis cluster using TLS. (#1772)
Internal:
- Fix type errors in replay recording parsing. (#1765)
- Remove error and session sample rate fields from replay-event parser. (#1791)
- Scrub replay recording PII from mutation "texts" vector. (#1796)
Features:
- Add support for
limits.keepalive_timeout
configuration. (#1645) - Add support for decaying functions in dynamic sampling rules. (#1692)
- Stop extracting duration metric for session payloads. (#1739)
- Add Profiling Context (#1748)
Internal:
- Remove concurrent profiling. (#1697)
- Use the main Sentry SDK to submit crash reports instead of a custom curl-based backend. This removes a dependency on
libcurl
and ensures compliance with latest TLS standards for crash uploads. Note that this only affects Relay if the hidden_crash_db
option is used. (#1707) - Support transaction naming rules. (#1695)
- Add PII scrubbing to URLs captured by replay recordings (#1730)
- Add more measurement units for profiling. (#1732)
- Add backoff mechanism for fetching projects from the project cache. (#1726)
Features:
- The level of events created from Unreal Crash Reports now depends on whether it was an actual crash or an assert. (#1677)
- Dynamic sampling is now based on the volume received by Relay by default and does not include the original volume dropped by client-side sampling in SDKs. This is required for the final dynamic sampling feature in the latest Sentry plans. (#1591)
- Add OpenTelemetry Context. (#1617)
- Add
app.in_foreground
andthread.main
flag to protocol. (#1578) - Add support for View Hierarchy attachment_type. (#1642)
- Add invalid replay recording outcome. (#1684)
- Stop rejecting spans without a timestamp, instead giving them their respective event timestamp and setting their status to DeadlineExceeded. (#1690)
- Add max replay size configuration parameter. (#1694)
- Add nonchunked replay recording message type. (#1653)
- Add
abnormal_mechanism
field to SessionUpdate protocol. (#1665) - Add replay-event normalization and PII scrubbing. (#1582)
- Scrub all fields with IP addresses rather than only known IP address fields. (#1725)
Bug Fixes:
- Make
attachment_type
on envelope items forward compatible by adding fallback variant. (#1638) - Relay no longer accepts transaction events older than 5 days. Previously the event was accepted and stored, but since metrics for such old transactions are not supported it did not show up in parts of Sentry such as the Performance landing page. (#1663)
- Apply dynamic sampling to transactions from older SDKs and even in case Relay cannot load project information. This avoids accidentally storing 100% of transactions. (#1667)
- Replay recording parser now uses the entire body rather than a subset. (#1682)
- Fix a potential OOM in the Replay recording parser. (#1691)
- Fix type error in replay recording parser. (#1702)
Internal:
- Emit a
service.back_pressure
metric that measures internal back pressure by service. (#1583) - Track metrics for OpenTelemetry events. (#1618)
- Normalize transaction name for URLs transaction source, by replacing UUIDs, SHAs and numerical IDs in transaction names by placeholders. (#1621)
- Parse string as number to handle a release bug. (#1637)
- Expand Profiling's discard reasons. (#1661, #1685)
- Allow to rate limit profiles on top of transactions. (#1681)
Features:
- Add PII scrubber for replay recordings. (#1545)
- Support decaying rules. Decaying rules are regular sampling rules, but they are only applicable in a specific time range. (#1544)
- Disallow
-
in measurement and breakdown names. These items are converted to metrics, which do not allow-
in their name. (#1571)
Bug Fixes:
- Validate the distribution name in the event. (#1556)
- Use correct meta object for logentry in light normalization. (#1577)
Internal:
- Implement response context schema. (#1529)
- Support dedicated quotas for storing transaction payloads ("indexed transactions") via the
transaction_indexed
data category if metrics extraction is enabled. (#1537, #1555) - Report outcomes for dynamic sampling with the correct indexed transaction data category to restore correct totals. (#1561)
- Add fields to the Frame object for the sample format. (#1562)
- Move kafka related code into separate
relay-kafka
crate. (#1563)
Features:
- Limit the number of custom measurements per event. (#1483))
- Add INP web vital as a measurement. (#1487)
- Add .NET/Portable-PDB specific protocol fields. (#1518)
- Enforce rate limits on metrics buckets using the transactions_processed quota. (#1515)
- PII scrubbing now treats any key containing
token
as a password. (#1527)
Bug Fixes:
- Make sure that non-processing Relays drop all invalid transactions. (#1513)
Internal:
- Introduce a new profile format called
sample
. (#1462) - Generate a new profile ID when splitting a profile for multiple transactions. (#1473)
- Pin Rust version to 1.63.0 in Dockerfile. (#1482)
- Normalize measurement units in event payload. (#1488)
- Remove long-running futures from metrics flush. (#1492)
- Migrate to 2021 Rust edition. (#1510)
- Make the profiling frame object compatible with the stacktrace frame object from event. (#1512)
- Fix quota DataCategory::TransactionProcessed serialisation to match that of the CAPI. (#1514)
- Support checking quotas in the Redis rate limiter without incrementing them. (#1519)
- Update the internal service architecture for metrics aggregator service. (#1508)
- Add data category for indexed transactions. This will come to represent stored transactions, while the existing category will represent transaction metrics. (#1535)
- Adjust replay parser to be less strict and allow for larger segment-ids. (#1551)
Features:
- Add user-agent parsing to Replays. (#1420)
- Improve the release name used when reporting data to Sentry to include both the version and exact build. (#1428)
Bug Fixes:
- Do not apply rate limits or reject data based on expired project configs. (#1404)
- Process required stacktraces to fix filtering events originating from browser extensions. (#1423)
- Fix error message filtering when formatting the message of logentry. (#1442)
- Loosen type requirements for the
user.id
field in Replays. (#1443) - Fix panic in datascrubbing when number of sensitive fields was too large. (#1474)
Internal:
- Make the Redis connection pool configurable. (#1418)
- Add support for sharding Kafka producers across clusters. (#1454)
- Speed up project cache eviction through a background thread. (#1410)
- Batch metrics buckets into logical partitions before sending them as Envelopes. (#1440)
- Filter single samples in cocoa profiles and events with no duration in Android profiles. (#1445)
- Add a "invalid_replay" discard reason for invalid replay events. (#1455)
- Add rate limiters for replays and replay recordings. (#1456)
- Use the different configuration for billing outcomes when specified. (#1461)
- Support profiles tagged for many transactions. (#1444, #1463, #1464, #1465)
- Track metrics for changes to the transaction name and DSC propagations. (#1466)
- Simplify the ingestion path to reduce endpoint response times. (#1416, #1429, #1431)
- Update the internal service architecture for the store, outcome, and processor services. (#1405, #1415, #1421, #1441, #1457, #1470)
Features:
- Remove timeout-based expiry of envelopes in Relay's internal buffers. The
cache.envelope_expiry
is now inactive. To control the size of the envelope buffer, usecache.envelope_buffer_size
exclusively, instead. (#1398) - Parse sample rates as JSON. (#1353)
- Filter events in external Relays, before extracting metrics. (#1379)
- Add
privatekey
andprivate_key
as secret key name to datascrubbers. (#1376) - Explain why we responded with 429. (#1389)
Bug Fixes:
- Fix a bug where unreal crash reports were dropped when metrics extraction is enabled. (#1355)
- Extract user from metrics with EventUser's priority. (#1363)
- Honor
SentryConfig.enabled
and don't init SDK at all if it is false. (#1380) - The priority thread metadata on profiles is now optional, do not fail the profile if it's not present. (#1392)
Internal:
- Support compressed project configs in redis cache. (#1345)
- Refactor profile processing into its own crate. (#1340)
- Treat "unknown" transaction source as low cardinality for safe SDKs. (#1352, #1356)
- Conditionally write a default transaction source to the transaction payload. (#1354)
- Generate mobile measurements frames_frozen_rate, frames_slow_rate, stall_percentage. (#1373)
- Change to the internals of the healthcheck endpoint. (#1374, #1377)
- Re-encode the Typescript payload to normalize. (#1372)
- Partially normalize events before extracting metrics. (#1366)
- Spawn more threads for CPU intensive work. (#1378)
- Add missing fields to DeviceContext (#1383)
- Improve performance of Redis accesses by not running
PING
everytime a connection is reused. (#1394) - Distinguish between various discard reasons for profiles. (#1395)
- Add missing fields to GPUContext (#1391)
- Store actor now uses Tokio for message handling instead of Actix. (#1397)
- Add app_memory to AppContext struct. (#1403)
Features:
- Adjust sample rate by envelope header's sample_rate. (#1327)
- Support
transaction_info
on event payloads. (#1330) - Extract transaction metrics in external relays. (#1344)
Bug Fixes:
- Parse custom units with length < 15 without crashing. (#1312)
- Split large metrics requests into smaller batches. This avoids failed metrics submission and lost Release Health data due to
413 Payload Too Large
errors on the upstream. (#1326) - Metrics extraction: Map missing transaction status to "unknown". (#1333)
- Fix CVE-2022-2068 and CVE-2022-2097 by updating to OpenSSL 1.1.1q. (#1334)
Internal:
- Reduce number of metrics extracted for release health. (#1316)
- Indicate with thread is the main thread in thread metadata for profiles. (#1320)
- Increase profile maximum size by an order of magnitude. (#1321)
- Add data category constant for processed transactions, encompassing all transactions that have been received and sent through dynamic sampling as well as metrics extraction. (#1306)
- Extract metrics also from trace-sampled transactions. (#1317)
- Extract metrics from a configurable amount of custom transaction measurements. (#1324)
- Metrics: Drop transaction tag for high-cardinality sources. (#1339)
Compatibility: This version of Relay requires Sentry server 22.6.0
or newer.
Features:
- Relay is now compatible with CentOS 7 and Red Hat Enterprise Linux 7 onward (kernel version 2.6.32), depending on glibc 2.17 or newer. The
crash-handler
feature, which is currently enabled in the build published to DockerHub, additionally requires curl 7.29 or newer. (#1279) - Optionally start relay with
--upstream-dsn
to pass a Sentry DSN instead of the URL. This can be convenient when starting Relay in environments close to an SDK, where a DSN is already available. (#1277) - Add a new runtime mode
--aws-runtime-api=$AWS_LAMBDA_RUNTIME_API
that integrates Relay with the AWS Extensions API lifecycle. (#1277) - Add Replay ItemTypes. (#1236, (#1239)
Bug Fixes:
- Session metrics extraction: Count distinct_ids from all session updates to prevent undercounting users. (#1275)
- Session metrics extraction: Count crashed+abnormal towards errored_preaggr. (#1274)
Internal:
- Add version 3 to the project configs endpoint. This allows returning pending results which need to be polled later and avoids blocking batched requests on single slow entries. (#1263)
- Emit specific event type tags for "processing.event.produced" metric. (#1270)
- Add support for profile outcomes. (#1272)
- Avoid potential panics when scrubbing minidumps. (#1282)
- Fix typescript profile validation. (#1283)
- Track memory footprint of metrics buckets. (#1284, #1287, #1288)
- Support dedicated topics per metrics usecase, drop metrics from unknown usecases. (#1285)
- Add support for Rust profiles ingestion (#1296)
Features:
- Add platform, op, http.method and status tag to all extracted transaction metrics. (#1227)
- Add units in built-in measurements. (#1229)
- Add protocol support for custom units on transaction measurements. (#1256)
Bug Fixes:
- fix(metrics): Enforce metric name length limit. (#1238)
- Accept and forward unknown Envelope items. In processing mode, drop items individually rather than rejecting the entire request. This allows SDKs to send new data in combined Envelopes in the future. (#1246)
- Stop extracting metrics with outdated names from sessions. (#1251, #1252)
- Update symbolic to pull in fixed Unreal parser that now correctly handles zero-length files. (#1266)
Internal:
- Add sampling + tagging by event platform and transaction op. Some (unused) tagging rules from 22.4.0 have been renamed. (#1231)
- Refactor aggregation error, recover from errors more gracefully. (#1240)
- Remove/reject nul-bytes from metric strings. (#1235)
- Remove the unused "internal" data category. (#1245)
- Add the client and version as
sdk
tag to extracted session metrics in the formatname/version
. (#1248) - Expose
shutdown_timeout
inOverridableConfig
(#1247) - Normalize all profiles and reject invalid ones. (#1250)
- Raise a new InvalidCompression Outcome for invalid Unreal compression. (#1237)
- Add a profile data category and count profiles in an envelope to apply rate limits. (#1259)
- Support dynamic sampling by custom tags, operating system name and version, as well as device name and family. (#1268)
Features:
- Map Windows version from raw_description to version name (XP, Vista, 11, ...). (#1219)
Bug Fixes:
- Prevent potential OOM panics when handling corrupt Unreal Engine crashes. (#1216)
Internal:
- Remove unused item types. (#1211)
- Pin click dependency in requirements-dev.txt. (#1214)
- Use fully qualified metric resource identifiers (MRI) for metrics ingestion. For example, the sessions duration is now called
d:sessions/duration@s
. (#1215) - Introduce metric units for rates and information, add support for custom user-declared units, and rename duration units to self-explanatory identifiers such as
second
. (#1217) - Increase the max profile size to accomodate a new platform. (#1223)
- Set environment as optional when parsing a profile so we get a null value later on. (#1224)
- Expose new tagging rules interface for metrics extracted from transactions. (#1225)
- Return better BadStoreRequest for unreal events. (#1226)
Features:
- Tag transaction metrics by user satisfaction. (#1197)
Bug Fixes:
- CVE-2022-24713: Prevent denial of service through untrusted regular expressions used for PII scrubbing. (#1207)
- Prevent dropping metrics during Relay shutdown if the project is outdated or not cached at time of the shutdown. (#1205)
- Prevent a potential OOM when validating corrupted or exceptional minidumps. (#1209)
Internal:
- Spread out metric aggregation over the aggregation window to avoid concentrated waves of metrics requests to the upstream every 10 seconds. Relay now applies jitter to
initial_delay
to spread out requests more evenly over time. (#1185) - Use a randomized Kafka partitioning key for sessions instead of the session ID. (#1194)
- Add new statsd metrics for bucketing efficiency. (#1199, #1192, #1200)
- Add a
Profile
ItemType
to represent the profiling data sent from Sentry SDKs. (#1179)
Features:
- Add the
relay.override_project_ids
configuration flag to support migrating projects from self-hosted to Sentry SaaS. (#1175)
Internal:
- Add an option to dispatch billing outcomes to a dedicated topic. (#1168)
- Add new
ItemType
to handle profiling data from Specto SDKs. (#1170)
Bug Fixes:
- Fix regression in CSP report parsing. (#1174)
- Ignore replacement_chunks when they aren't used. (#1180)
Features:
- Flush metrics and outcome aggregators on graceful shutdown. (#1159)
- Extract metrics from sampled transactions. (#1161)
Internal:
Features:
- Extract measurement ratings, port from frontend. (#1130)
- External Relays perform dynamic sampling and emit outcomes as client reports. This feature is now enabled by default. (#1119)
- Metrics extraction config, custom tags. (#1141)
- Update the user agent parser (uap-core Feb 2020 to Nov 2021). This allows Relay and Sentry to infer more recent browsers, operating systems, and devices in events containing a user agent header. (#1143, #1145)
- Improvements to Unity OS context parsing (#1150)
Bug Fixes:
- Support Unreal Engine 5 crash reports. (#1132)
- Perform same validation for aggregate sessions as for individual sessions. (#1140)
- Add missing .NET 4.8 release value. (#1142)
- Properly document which timestamps are accepted. (#1152)
Internal:
- Add more statsd metrics for relay metric bucketing. (#1124, #1128)
- Add an internal option to capture minidumps for hard crashes. This has to be enabled via the
sentry._crash_db
config parameter. (#1127) - Fold processing vs non-processing into single actor. (#1133)
- Aggregate outcomes for dynamic sampling, invalid project ID, and rate limits. (#1134)
- Extract session metrics from aggregate sessions. (#1140)
- Prefix names of extracted metrics by
sentry.sessions.
orsentry.transactions.
. (#1147) - Extract transaction duration as metric. (#1148)
Features:
- Add bucket width to bucket protocol. (#1103)
- Support multiple kafka cluster configurations. (#1101)
- Tag metrics by transaction name. (#1126)
Bug Fixes:
- Avoid unbounded decompression of encoded requests. A particular request crafted to inflate to large amounts of memory, such as a zip bomb, could put Relay out of memory. (#1117, #1122, #1123)
- Avoid unbounded decompression of UE4 crash reports. Some crash reports could inflate to large amounts of memory before being checked for size, which could put Relay out of memory. (#1121)
Internal:
- Aggregate client reports before sending them onwards. (#1118)
Bug Fixes:
- Correctly validate timestamps for outcomes and sessions. (#1086)
- Run compression on a thread pool when sending to upstream. (#1085)
- Report proper status codes and error messages when sending invalid JSON payloads to an endpoint with a
X-Sentry-Relay-Signature
header. (#1090) - Enforce attachment and event size limits on UE4 crash reports. (#1099)
Internal:
- Add the exclusive time of the transaction's root span. (#1083)
- Add session.status tag to extracted session.duration metric. (#1087)
- Serve project configs for batched requests where one of the project keys cannot be parsed. (#1093)
Features:
- Add sampling based on transaction name. (#1058)
- Support running Relay without config directory. The most important configuration, including Relay mode and credentials, can now be provided through commandline arguments or environment variables alone. (#1055)
- Protocol support for client reports. (#1081)
- Extract session metrics in non processing relays. (#1073)
Bug Fixes:
- Use correct commandline argument name for setting Relay port. (#1059)
- Retrieve OS Context for Unity Events. (#1072)
Internal:
- Add new metrics on Relay's performance in dealing with buckets of metric aggregates, as well as the amount of aggregated buckets. (#1070)
- Add the exclusive time of a span. (#1061)
- Remove redundant dynamic sampling processing on fast path. (#1084)
- No documented changes.
- No documented changes.
- No documented changes.
Bug Fixes:
- Remove connection metrics reported under
connector.*
. They have been fully disabled since version21.3.0
. (#1021) - Remove error logs for "failed to extract event" and "failed to store session". (#1032)
Internal:
- Assign a random Kafka partition key for session aggregates and metrics to distribute messages evenly. (#1022)
- All fields in breakdown config should be camelCase, and rename the breakdown key name in project options. (#1020)
- No documented changes.
Features:
- Support self-contained envelopes without authentication headers or query parameters. (#1000)
- Support statically configured relays. (#991)
- Support namespaced event payloads in multipart minidump submission for Electron Framework. The field has to follow the format
sentry___<namespace>
. (#1012)
Bug Fixes:
- Explicitly declare reprocessing context. (#1009)
- Validate the environment attribute in sessions, and drop sessions with invalid releases. (#1018)
Internal:
Bug Fixes:
- Do not leak resources when projects or DSNs are idle. (#1003)
Features:
- Support the
frame.stack_start
field for chained async stack traces in Cocoa SDK v7. (#981) - Rename configuration fields
cache.event_buffer_size
tocache.envelope_buffer_size
andcache.event_expiry
tocache.envelope_expiry
. The former names are still supported by Relay. (#985) - Add a configuraton flag
relay.ready: always
to mark Relay ready in healthchecks immediately after starting without requiring to authenticate. (#989)
Bug Fixes:
- Fix roundtrip error when PII selector starts with number. (#982)
- Avoid overflow panic for large retry-after durations. (#992)
Internal:
- Update internal representation of distribution metrics. (#979)
- Extract metrics for transaction breakdowns and sessions when the feature is enabled for the organizaiton. (#986)
- Assign explicit values to DataCategory enum. (#987)
Bug Fixes:
- Allow the
event_id
attribute on breadcrumbs to link between Sentry events. (#977)
Bug Fixes:
- Parse the Crashpad information extension stream from Minidumps with annotation objects correctly. (#973)
Internal:
- Emit outcomes for rate limited attachments. (#951)
- Remove timestamp from metrics text protocol. (#972)
- Add max, min, sum, and count to gauge metrics. (#974)
Bug Fixes:
- Make request url scrubbable. (#955)
- Remove dependent items from envelope when dropping transaction item. (#960)
Internal:
- Emit the
quantity
field for outcomes of events. This field describes the total size in bytes for attachments or the event count for all other categories. A separate outcome is emitted for attachments in a rejected envelope, if any, in addition to the event outcome. (#942) - Add experimental metrics ingestion without bucketing or pre-aggregation. (#948)
- Skip serializing some null values in frames interface. (#944)
- Add experimental metrics ingestion with bucketing and pre-aggregation. (#948, #952, #958, #966, #969)
- Change HTTP response for upstream timeouts from 502 to 504. (#859)
- Add rule id to outcomes coming from transaction sampling. (#953)
- Add support for breakdowns ingestion. (#934)
- Ensure empty strings are invalid measurement names. (#968)
Features:
- Relay now picks up HTTP proxies from environment variables. This is made possible by switching to a different HTTP client library.
Bug Fixes:
- Deny backslashes in release names. (#904)
- Fix a problem with Data Scrubbing source names (PII selectors) that caused
$frame.abs_path
to match, but not$frame.abs_path || **
or$frame.abs_path && **
. (#932) - Make username pii-strippable. (#935)
- Respond with
400 Bad Request
and an error message"empty envelope"
instead of429
when envelopes without items are sent to the envelope endpoint. (#937) - Allow generic Slackbot (#947)
Internal:
- Emit the
category
field for outcomes of events. This field disambiguates error events, security events and transactions. As a side-effect, Relay no longer emits outcomes for broken JSON payloads or network errors. (#931) - Add inbound filters functionality to dynamic sampling rules. (#920)
- The undocumented
http._client
option has been removed. (#938) - Log old events and sessions in the
requests.timestamp_delay
metric. (#933) - Add rule id to outcomes coming from event sampling. (#943)
- Fix a bug in rate limiting that leads to accepting all events in the last second of a rate limiting window, regardless of whether the rate limit applies. (#946)
Features:
- By adding
.no-cache
to the DSN key, Relay refreshes project configuration caches immediately. This allows to apply changed settings instantly, such as updates to data scrubbing or inbound filter rules. (#911) - Add NSError to mechanism. (#925)
- Add snapshot to the stack trace interface. (#927)
Bug Fixes:
- Log on INFO level when recovering from network outages. (#918)
- Fix a panic in processing minidumps with invalid location descriptors. (#919)
Internal:
- Improve dynamic sampling rule configuration. (#907)
- Compatibility mode for pre-aggregated sessions was removed. The feature is now enabled by default in full fidelity. (#913)
Features:
- Support dynamic sampling for error events. (#883)
Bug Fixes:
- Make all fields but event-id optional to fix regressions in user feedback ingestion. (#886)
- Remove
kafka-ssl
feature because it breaks development workflow on macOS. (#889) - Accept envelopes where their last item is empty and trailing newlines are omitted. This also fixes a panic in some cases. (#894)
Internal:
- Extract crashpad annotations into contexts. (#892)
- Normalize user reports during ingestion and create empty fields. (#903)
- Ingest and normalize sample rates from envelope item headers. (#910)
- No documented changes.
Features:
- Add
kafka-ssl
compilation feature that builds Kafka linked against OpenSSL. This feature is enabled in Docker containers only. This is only relevant for Relays running as part of on-premise Sentry. (#881) - Relay is now able to ingest pre-aggregated sessions, which will make it possible to efficiently handle applications that produce thousands of sessions per second. (#815)
- Add protocol support for WASM. (#852)
- Add dynamic sampling for transactions. (#835)
- Send network outage metric on healthcheck endpoint hit. (#856)
Bug Fixes:
- Fix a long-standing bug where log messages were not addressible as
$string
. (#882) - Allow params in content-type for security requests to support content types like
"application/expect-ct-report+json; charset=utf-8"
. (#844) - Fix a panic in CSP filters. (#848)
- Do not drop sessions due to an invalid age constraint set to
0
. (#855) - Do not emit outcomes after forwarding envelopes to the upstream, even if that envelope is rate limited, rejected, or dropped. Since the upstream logs an outcome, it would be a duplicate. (#857)
- Fix status code for security report. (#864)
- Add missing fields for Expect-CT reports. (#865)
- Support more directives in CSP reports, such as
block-all-mixed-content
andrequire-trusted-types-for
. (#876)
Internal:
- Add experimental support for picking up HTTP proxies from the regular environment variables. This feature needs to be enabled by setting
http: client: "reqwest"
in yourconfig.yml
. (#839) - Refactor transparent request forwarding for unknown endpoints. Requests are now entirely buffered in memory and occupy the same queues and actors as other requests. This should not cause issues but may change behavior under load. (#839)
- Add reason codes to the
X-Sentry-Rate-Limits
header in store responses. This allows external Relays to emit outcomes with the proper reason codes. (#850) - Emit metrics for outcomes in external relays. (#851)
- Make
$error.value
pii=true
. (#837) - Send
key_id
in partial project config. (#854) - Add stack traces to Sentry error reports. (#872)
- No documented changes.
Features:
- Rename upstream retries histogram metric and add upstream requests duration metric. (#816)
- Add options for metrics buffering (
metrics.buffering
) and sampling (metrics.sample_rate
). (#821)
Bug Fixes:
- Accept sessions with IP address set to
{{auto}}
. This was previously rejected and silently dropped. (#827) - Fix an issue where every retry-after response would be too large by one minute. (#829)
Internal:
- Always apply cache debouncing for project states. This reduces pressure on the Redis and file system cache. (#819)
- Internal refactoring such that validating of characters in tags no longer uses regexes internally. (#814)
- Discard invalid user feedback sent as part of envelope. (#823)
- Emit event errors and normalization errors for unknown breadcrumb keys. (#824)
- Normalize
breadcrumb.ty
intobreadcrumb.type
for broken Python SDK versions. (#824) - Add the client SDK interface for unreal crashes and set the name to
unreal.crashreporter
. (#828) - Fine-tune the selectors for minidump PII scrubbing. (#818, #830)
Internal:
- Emit more useful normalization meta data for invalid tags. (#808)
Features:
- Add support for measurement ingestion. (#724, #785)
- Add support for scrubbing UTF-16 data in attachments (#742, #784, #787)
- Add upstream request metric. (#793)
- The padding character in attachment scrubbing has been changed to match the masking character, there is no usability benefit from them being different. (#810)
Bug Fixes:
- Fix issue where
$span
would not be recognized in Advanced Data Scrubbing. (#781) - Accept big-endian minidumps. (#789)
- Detect network outages and retry sending events instead of dropping them. (#788)
Internal:
- Project states are now cached separately per DSN public key instead of per project ID. This means that there will be multiple separate cache entries for projects with more than one DSN. (#778)
- Relay no longer uses the Sentry endpoint to resolve project IDs by public key. Ingestion for the legacy store endpoint has been refactored to rely on key-based caches only. As a result, the legacy endpoint is supported only on managed Relays. (#800)
- Fix rate limit outcomes, now emitted only for error events but not transactions. (#806, #809)
Features:
- Add support for attaching Sentry event payloads in Unreal crash reports by adding
__sentry
game data entries. (#715) - Support chunked form data keys for event payloads on the Minidump endpoint. Since crashpad has a limit for the length of custom attributes, the sentry event payload can be split up into
sentry__1
,sentry__2
, etc. (#721) - Periodically re-authenticate with the upstream server. Previously, there was only one initial authentication. (#731)
- The module attribute on stack frames (
$frame.module
) and the (usually server side generated) attributeculprit
can now be scrubbed with advanced data scrubbing. (#744) - Compress outgoing store requests for events and envelopes including attachements using
gzip
content encoding. (#745) - Relay now buffers all requests until it has authenticated with the upstream. (#747)
- Add a configuration option to change content encoding of upstream store requests. The default is
gzip
, and other options areidentity
,deflate
, orbr
. (#771)
Bug Fixes:
- Send requests to the
/envelope/
endpoint instead of the older/store/
endpoint. This particularly fixes spurious413 Payload Too Large
errors returned when using Relay with Sentry SaaS. (#746)
Internal:
- Remove a temporary flag from attachment kafka messages indicating rate limited crash reports to Sentry. This is now enabled by default. (#718)
- Performance improvement of http requests to upstream, high priority messages are sent first. (#678)
- Experimental data scrubbing on minidumps(#682)
- Move
generate-schema
from the Relay CLI into a standalone tool. (#739) - Move
process-event
from the Relay CLI into a standalone tool. (#740) - Add the client SDK to session kafka payloads. (#751)
- Add a standalone tool to document metrics in JSON or YAML. (#752)
- Emit
processing.event.produced
for user report and session Kafka messages. (#757) - Improve performance of event processing by avoiding regex clone. (#767)
- Assign a default name for unnamed attachments, which prevented attachments from being stored in Sentry. (#769)
- Add Relay version version to challenge response. (#758)
Features:
- Add the
http.connection_timeout
configuration option to adjust the connection and SSL handshake timeout. The default connect timeout is now increased from 1s to 3s. (#688) - Supply Relay's version during authentication and check if this Relay is still supported. An error message prompting to upgrade Relay will be supplied if Relay is unsupported. (#697)
Bug Fixes:
- Reuse connections for upstream event submission requests when the server supports connection keepalive. Relay did not consume the response body of all requests, which caused it to reopen a new connection for every event. (#680, #695)
- Fix hashing of user IP addresses in data scrubbing. Previously, this could create invalid IP addresses which were later rejected by Sentry. Now, the hashed IP address is moved to the
id
field. (#692) - Do not retry authentication with the upstream when a client error is reported (status code 4XX). (#696)
Internal:
- Extract the event
timestamp
from Minidump files during event normalization. (#662) - Retain the full span description in transaction events instead of trimming it. (#674)
- Report all Kafka producer errors to Sentry. Previously, only immediate errors were reported but not those during asynchronous flushing of messages. (#677)
- Add "HubSpot Crawler" to the list of web crawlers for inbound filters. (#693)
- Improved typing for span data of transaction events, no breaking changes. (#713)
- Breaking change: In PII configs, all options on hash and mask redactions (replacement characters, ignored characters, hash algorithm/key) are removed. If they still exist in the configuration, they are ignored. (#760)
Features:
- Report metrics for connections to the upstream. These metrics are reported under
connector.*
and include information on connection reuse, timeouts and errors. (#669) - Increased the maximum size of attachments from 50MiB to 100MiB. Most notably, this allows to upload larger minidumps. (#671)
Internal:
- Always create a spans array for transactions in normalization. This allows Sentry to render the spans UI even if the transaction is empty. (#667)
- No documented changes.
Features:
- Sessions and attachments can be rate limited now. These rate limits apply separately from error events, which means that you can continue to send Release Health sessions while you're out of quota with errors. (#636)
Bug Fixes:
- Outcomes from downstream relays were not forwarded upstream. (#632)
- Apply clock drift correction to Release Health sessions and validate timestamps. (#633)
- Apply clock drift correction for timestamps that are too far in the past or future. This fixes a bug where broken transaction timestamps would lead to negative durations. (#634, #654)
- Respond with status code
200 OK
to rate limited minidump and UE4 requests. Third party clients otherwise retry those requests, leading to even more load. (#646, #647) - Ingested unreal crash reports no longer have a
misc_primary_cpu_brand
key with GPU information set in the Unreal context. (#650) - Fix ingestion of forwarded outcomes in processing Relays. Previously,
emit_outcomes
had to be set explicitly to enable this. (#653)
Internal:
- Restructure the envelope and event ingestion paths into a pipeline and apply rate limits to all envelopes. (#635, #636)
- Pass the combined size of all attachments in an envelope to the Redis rate limiter as quantity to enforce attachment quotas. (#639)
- Emit flags for rate limited processing attachments and add a
size
field. (#640, #644)
We have switched to CalVer! Relay's version is always in line with the latest version of Sentry.
Features:
- Proxy and managed Relays now apply clock drift correction based on the
sent_at
header emitted by SDKs. (#581) - Apply cached rate limits to attachments and sessions in the fast-path when parsing incoming requests. (#618)
- New config options
metrics.default_tags
andmetrics.hostname_tag
. (#625)
Bug Fixes:
- Clock drift correction no longer considers the transaction timestamp as baseline for SDKs using Envelopes. Instead, only the dedicated
sent_at
Envelope header is used. (#580) - The
http.timeout
setting is now applied to all requests, including event submission. Previously, events were exempt. (#588) - All endpoint metrics now report their proper
route
tag. This applies torequests
,requests.duration
, andresponses.status_codes
. Previously, some some endpoints reported an empty route. (#595) - Properly refresh cached project states based on the configured intervals. Previously, Relay may have gone into an endless refresh cycle if the system clock not accurate, or the state had not been updated in the upstream. (#596)
- Respond with
403 Forbidden
when multiple authentication payloads are sent by the SDK. Previously, Relay would authenticate using one of the payloads and silently ignore the rest. (#602) - Improve metrics documentation. (#614)
- Do not scrub event processing errors by default. (#619)
Internal:
- Add source (who emitted the outcome) to Outcome payload. (#604)
- Ignore non-Rust folders for faster rebuilding and testing. (#578)
- Invalid session payloads are now logged for SDK debugging. (#584, #591)
- Add support for Outcomes generation in external Relays. (#592)
- Remove unused
rev
from project state. (#586) - Add an outcome endpoint for trusted Relays. (#589)
- Emit outcomes for event payloads submitted in attachment files. (#609)
- Split envelopes that contain sessions and other items and ingest them independently. (#610)
- Removed support for legacy per-key quotas. (#616)
- Security events (CSP, Expect-CT, Expect-Staple, and HPKP) are now placed into a dedicated
security
item in envelopes, rather than the generic event item. This allows for quick detection of the event type for rate limiting. (#617)
- Relay has a logo now!
- New explicit
envelope/
endpoint. Envelopes no longer need to be sent with the rightcontent-type
header (to cater to browser JS). - Introduce an Envelope item type for transactions.
- Support environment variables and CLI arguments instead of command line parameters.
- Return status
415
on wrong content types. - Normalize double-slashes in request URLs more aggressively.
- Add an option to generate credentials on stdout.
Internal:
- Serve project configs to downstream Relays with proper permission checking.
- PII: Make and/or selectors specific.
- Add a browser filter for IE 11.
- Changes to release parsing.
- PII: Expose event values as part of generated selector suggestions.
Internal:
- Fix a bug where exception values and the device name were not PII-strippable.
- Docker images are now also pushed to Docker Hub.
- New helper function to generate PII selectors from event data.
Internal:
- Release is now a required attribute for session data.
unknown
can now be used in place ofunknown_error
for span statuses. A future release will change the canonical format fromunknown_error
tounknown
.
- Fix a bug where Relay would stop processing events if Sentry is down for only a short time.
- Improvements to architecture documentation.
- Initial support for rate limiting by event type ("scoped quotas")
- Fix a bug where
key_id
was omitted from outcomes created by Relay. - Fix a bug where it was not permitted to send content-encoding as part of a CORS request to store.
Internal:
- PII processing: Aliases for value types (
$error
instead of$exception
to be in sync with Discover column naming) and adding a default for replace-redactions. - It is now valid to send transactions and spans without
op
set, in which case a default value will be inserted.
- Suppress verbose DNS lookup logs.
Internal:
- Small performance improvements in datascrubbing config converter.
- New, C-style selector syntax (old one still works)
Internal:
- Add event contexts to
pii=maybe
. - Fix parsing of msgpack breadcrumbs in Rust store.
- Envelopes sent to Rust store can omit the DSN in headers.
- Ability to quote/escape special characters in selectors in PII configs.
- Properly strip the linux binary to reduce its size
- Allow base64 encoded JSON event payloads (#466)
- Fix multipart requests without trailing newline (#465)
- Support for ingesting session updates (#449)
Internal:
- Validate release names during event ingestion (#479)
- Add browser extension filter (#470)
- Add
pii=maybe
, a new kind of event schema field that can only be scrubbed if explicitly addressed. - Add way to scrub filepaths in a way that does not break processing.
- Fix trivial Redis-related crash when running in non-processing mode.
- Limit the maximum retry-after of a rate limit. This is necessary because of the "Delete and ignore future events" feature in Sentry.
- Project caches are now evicted after
project_grace_period
has passed. If you have that parameter set to a high number you may see increased memory consumption.
Internal:
- Misc bugfixes in PII processor. Those bugs do not affect the legacy data scrubber exposed in Python.
- Polishing documentation around PII configuration format.
- Signal codes in mach mechanism are no longer required.
- Ability to fetch project configuration from Redis as additional caching layer.
- Fix a few bugs in release filters.
- Fix a few bugs in minidumps endpoint with processing enabled.
Internal:
- Fix a bug in the PII processor that would always remove the entire string on
pattern
rules. - Ability to correct some clock drift and wrong system time in transaction events.
- The binary has been renamed to
relay
. - Updated documentation for metrics.
Internal:
- The package is now called
sentry-relay
. - Renamed all
Semaphore*
types toRelay*
. - Fixed memory leaks in processing functions.
- Implement the Minidump endpoint.
- Implement the Attachment endpoint.
- Implement the legacy Store endpoint.
- Support a plain
Authorization
header in addition toX-Sentry-Auth
. - Simplify the shutdown logic. Relay now always takes a fixed configurable time to shut down.
- Fix healthchecks in Static mode.
- Fix internal handling of event attachments.
- Fix partial reads of request bodies resulting in a broken connection.
- Fix a crash when parsing User-Agent headers.
- Fix handling of events sent with
sentry_version=2.0
(Clojure SDK). - Use mmap to load the GeoIP database to improve the memory footprint.
- Revert back to the system memory allocator.
Internal:
- Preserve microsecond precision in all time stamps.
- Record event ids in all outcomes.
- Updates to event processing metrics.
- Add span status mapping from open telemetry.
- Switched to
jemalloc
as global allocator. - Introduce separate outcome reason for invalid events.
- Always consume request bodies to the end.
- Implemented minidump ingestion.
- Increas precisions of timestamps in protocol.
- Refactor healthchecks into two: Liveness and readiness (see code comments for explanation for now).
- Allow multiple trailing slashes on store endpoint, e.g.
/api/42/store///
. - Internal refactor to prepare for envelopes format.
Internal:
- Fix a bug where glob-matching in filters did not behave correctly when the to-be-matched string contained newlines.
- Add
moz-extension:
as scheme for browser extensions (filtering out Firefox addons). - Raise a dedicated Python exception type for invalid transaction events. Also do not report that error to Sentry from Relay.
- Various performance improvements.
Internal:
- Add
thread.errored
attribute (#306).
- License is now BSL instead of MIT (#301).
- Improve internal metrics and logging (#296, #297, #298).
- Fix unbounded requests to Sentry for project configs (#295, #300).
- Fix rejected responses from Sentry due to size limit (#303).
- Expose more options for configuring request concurrency limits (#311).
Internal:
- Transaction events with negative duration are now rejected (#291).
- Fix a panic when normalizing certain dates.
Internal:
- Fix: Normalize legacy stacktrace attributes (#292)
- Fix: Validate platform attributes in Relay (#294)
- Flip the flag that indicates Relay processing (#293)
- Evict project caches after some time (#287)
- Selectively log internal errors to stderr (#285)
- Add an error boundary to parsing project states (#281)
Internal:
- Add event size metrics (#286)
- Normalize before datascrubbing (#290)
- Add a config value for thread counts (#283)
- Refactor outcomes for parity with Sentry (#282)
- Add flag that relay processed an event (#279)
Internal:
- Stricter validation of transaction events.
Internal:
- Fix a panic in trimming.
Internal:
- Fix more bugs in datascrubbing converter.
Internal:
- Fix more bugs in datascrubbing converter.
Internal:
- Fix more bugs in datascrubbing converter.
Internal:
- Fix more bugs in datascrubbing converter.
Internal:
- Fix a few bugs in datascrubbing converter.
- Accept trailing slashes.
Normalization:
- Fix a panic on overflowing timestamps.
Internal:
- Fix bug where IP scrubbers were applied even when not enabled.
- Internal changes.
Internal:
- Fix various bugs in the datascrubber and PII processing code to get closer to behavior of the Python implementation.
Internal:
- Various work on re-implementing Sentry's
/api/X/store
endpoint in Relay. Relay can now apply rate limits based on Redis and emit the correct outcomes.
Internal:
- Resolved a regression in IP address normalization. The new behavior is closer to a line-by-line port of the old Python code.
Normalization:
- Resolved an issue where GEO IP data was not always infered.
Normalization:
- Only take the user IP address from the store request's IP for certain platforms. This restores the behavior of the old Python code.
Normalization:
- Bump size of breadcrumbs.
- Workaround for an issue where we would not parse OS information from User Agent when SDK had already sent OS information.
- Further work on Sentry-internal event ingestion.
Normalization:
- Fix normalization of version strings from user agents.
- Support extended project configuration.
Internal:
- Implement event filtering rules.
- Add basic support for Sentry-internal event ingestion.
- Parse and normalize user agent strings.
Internal:
- Restrict ranges of timestamps to prevent overflows in Python code and UI.
Internal:
- Fix a bug where stacktrace trimming was not applied during renormalization.
Internal:
- Added typed spans to Event.
Internal:
- Added
orig_in_app
to frame data.
Internal:
- Add new .NET versions for context normalization.
Internal:
- Fix bug where thread's stacktraces were not normalized.
- Fix bug where a string at max depth of a databag was stringified again.
Internal:
- Added
data
attribute to frames. - Added a way to override other trimming behavior in Python normalizer binding.
Internal:
- Plugin-provided context types should now work properly again.
Internal:
- Removed
function_name
field from frame and addedraw_function
.
Internal:
- Add trace context type.
Internal:
- Make exception messages/values larger to allow for foreign stacktrace data to be attached.
Internal:
- Added
function_name
field to frame.
Internal:
- Add missing context type for sessionstack.
Internal:
- Increase frame vars size again! Byte size was fine, but max depth was way too small.
Internal:
- Reduce frame vars size.
Internal:
- Add missing trimming to frame vars.
Internal:
- Reject non-http/https
help_urls
in exception mechanisms.
Internal:
- Add basic truncation to event meta to prevent payload size from spiralling out of control.
Internal:
- Added grouping enhancements to protocol.
Internal:
- Updated debug image interface with more attributes.
Internal:
- Added support for
lang
frame and stacktrace attribute.
Internal:
- Slight changes to allow replacing more normalization code in Sentry with Rust.
Internal:
- Allow much larger payloads in the extra attribute.
Internal:
- Added support for protocol changes related to upcoming sentry SDK features. In particular the
none
event type was added.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
Introducing new Relay modes:
proxy
: A proxy for all requests and events.static
: Static configuration for known projects in the file system.managed
: Fetch configurations dynamically from Sentry and update them.
The default Relay mode is managed
. Users upgrading from previous versions will automatically activate the managed
mode. To change this setting, add relay.mode
to config.yml
or run semaphore config init
from the command line.
Breaking Change: If Relay was used without credentials, the mode needs to be set to proxy
. The default managed
mode requires credentials.
For more information on Relay modes, see the documentation page.
- Added
cache.event_buffer_size
to control the maximum number of events that are buffered in case of network issues or high rates of incoming events. - Added
limits.max_concurrent_requests
to limit the number of connections that this Relay will use to communicate with the upstream. - Internal error reporting is now disabled by default. To opt in, set
sentry.enabled
.
- Fix a bug that caused events to get unconditionally dropped after five seconds, regardless of the
cache.event_expiry
configuration. - Fix a memory leak in Relay's internal error reporting.
- Changed PII stripping rule format to permit path selectors when applying rules. This means that now
$string
refers to strings for instance anduser.id
refers to theid
field in theuser
attribute of the event. Temporarily support for old rules is retained.
- store: Minor fixes to be closer to Python. Ability to disable trimming of objects, arrays and strings.
- Fix bug where PII stripping would remove containers without leaving any metadata about the retraction.
- Fix bug where old
redactPair
rules would stop working.
-
Rewrite of PII stripping logic. This brings potentially breaking changes to the semantics of PII configs. Most importantly field types such as
"freeform"
and"databag"
are gone, right now there is only"container"
and"text"
. All old field types should have become an alias for"text"
, but take extra care in ensuring your PII rules still work. -
store: Minor fixes to be closer to Python.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
- store: Remove stray print statement.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
- store: Fix main performance issues.
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
- store: Fix segfault when trying to process contexts.
- store: Fix trimming state "leaking" between interfaces, leading to excessive trimming.
- store: Don't serialize empty arrays and objects (with a few exceptions).
For users of relay, nothing changed at all. This is a release to test embedding some Rust code in Sentry itself.
libsemaphore
: Expose CABI for normalizing event data.
Our first major iteration on Relay has landed!
- User documentation is now hosted at https://docs.sentry.io/relay/.
- SSL support is now included by default. Just configure a TLS identity and you're set.
- Updated event processing: Events from older SDKs are now supported. Also, we've fixed some bugs along the line.
- Introduced full support for PII stripping. See PII Configuration for instructions.
- Configure with static project settings. Relay will skip querying project states from Sentry and use your provided values instead. See Project Configuration for a full guide.
- Relay now also acts as a proxy for certain API requests. This allows it to receive CSP reports and Minidump crash reports, among others. It also sets
X-Forwarded-For
and includes a Relay signature header.
Besides that, there are many technical changes, including:
- Major rewrite of the internals. Relay no longer requires a special endpoint for sending events to upstream Sentry and processes events individually with less delay than before.
- The executable will exit with a non-zero exit code on startup errors. This makes it easier to catch configuration errors.
- Removed
libsodium
as a production dependency, greatly simplifying requirements for the runtime environment. - Greatly improved logging and metrics. Be careful with the
DEBUG
andTRACE
levels, as they are very verbose now. - Improved docker containers.
- Added support for metadata format
- JSON logging (#32)
- Update dependencies
- Rename "sentry-relay" to "semaphore"
- Use new features from Rust 1.26
- Prepare binary and Python builds (#20)
- Add Dockerfile (#23)
An initial release of the tool.