From 519a320f627ac355e4f986c8e672b68bdecd77f1 Mon Sep 17 00:00:00 2001 From: Shannon Anahata Date: Thu, 8 Oct 2026 13:53:50 -0700 Subject: [PATCH 1/7] Creates explore feature summary page. Updates Searchable Properties to include Logs and Metrics. Adds Dropped Data page. --- .../dynamic-sampling/the-big-picture.mdx | 2 +- develop-docs/sdk/telemetry/traces/index.mdx | 2 +- docs/concepts/key-terms/enrich-data/index.mdx | 4 +- docs/concepts/key-terms/extrapolation.mdx | 4 +- docs/concepts/key-terms/key-terms.mdx | 2 +- .../key-terms/tracing/distributed-tracing.mdx | 2 +- .../search/searchable-properties/events.mdx | 4 +- .../search/searchable-properties/index.mdx | 30 +- .../search/searchable-properties/logs.mdx | 209 +++++++++ .../search/searchable-properties/metrics.mdx | 149 +++++++ docs/get-started/guides/custom-spans.mdx | 4 +- docs/get-started/guides/querying-traces.mdx | 2 +- docs/product/dashboards/index.mdx | 2 +- .../dashboards/widget-builder/index.mdx | 4 +- docs/product/drains/openrouter.mdx | 2 +- docs/product/errors/index.mdx | 15 +- docs/product/explore/dropped-data.mdx | 410 ++++++++++++++++++ .../img/Trace_explorer_ingestion_delay.png | Bin 0 -> 101783 bytes docs/product/explore/index.mdx | 94 ++++ docs/product/index.mdx | 12 +- docs/product/logs/index.mdx | 14 +- docs/product/metrics/index.mdx | 14 +- .../uptime-monitoring/uptime-tracing.mdx | 2 +- docs/product/profiling/index.mdx | 2 +- docs/product/releases/index.mdx | 2 +- .../sentry-basics/performance-monitoring.mdx | 4 +- docs/product/session-replay/index.mdx | 2 + docs/product/trace-explorer/index.mdx | 46 +- includes/ai-dashboards/ai-spans-view.mdx | 2 +- includes/ai-dashboards/overview.mdx | 2 +- redirects.js | 8 - 31 files changed, 953 insertions(+), 98 deletions(-) create mode 100644 docs/concepts/search/searchable-properties/logs.mdx create mode 100644 docs/concepts/search/searchable-properties/metrics.mdx create mode 100644 docs/product/explore/dropped-data.mdx create mode 100644 docs/product/explore/img/Trace_explorer_ingestion_delay.png create mode 100644 docs/product/explore/index.mdx diff --git a/develop-docs/application-architecture/dynamic-sampling/the-big-picture.mdx b/develop-docs/application-architecture/dynamic-sampling/the-big-picture.mdx index a2083ffc965a0..fc2e85afa733b 100644 --- a/develop-docs/application-architecture/dynamic-sampling/the-big-picture.mdx +++ b/develop-docs/application-architecture/dynamic-sampling/the-big-picture.mdx @@ -92,7 +92,7 @@ For more granular queries, **stored events are needed**. _The purpose of dynamic If Sentry applies a 1% dynamic sample rate, you can still receive accurate events per minute (SPM or TPM, depending on event type) and web vital quantiles through total event data backed by metrics. There is also a listing of each of these numbers by the transaction. -When you go into Trace Explorer or Errors, you might want to now split the data by a custom tag you’ve added to your events. This granularity is not offered by metrics, so **these queries need to use stored events**. +When you go into Explore → Traces or Errors, you might want to now split the data by a custom tag you’ve added to your events. This granularity is not offered by metrics, so **these queries need to use stored events**. diff --git a/develop-docs/sdk/telemetry/traces/index.mdx b/develop-docs/sdk/telemetry/traces/index.mdx index 442192074fb1b..deeb0e8966f62 100644 --- a/develop-docs/sdk/telemetry/traces/index.mdx +++ b/develop-docs/sdk/telemetry/traces/index.mdx @@ -161,7 +161,7 @@ In memory, spans build up a conceptual tree of timed operations. We call the who Over the wire, transactions are serialized to JSON as an augmented `Event`, and sent as envelopes. The different envelope types are for optimizing ingestion (so we can route "transaction events" differently than other events, mostly "error events"). -In the Sentry UI, you can use Errors and Trace Explorer to look at error and performance events, and the Issues section to dive into grouped errors. The [user-facing tracing documentation](https://docs.sentry.io/concepts/key-terms/tracing/distributed-tracing/) explains more of the concepts on the product level. +In the Sentry UI, you can use Errors and Explore → Traces to look at error and performance events, and the Issues section to dive into grouped errors. The [user-facing tracing documentation](https://docs.sentry.io/concepts/key-terms/tracing/distributed-tracing/) explains more of the concepts on the product level. The [Span](/sdk/foundations/transport/event-payloads/span/) class stores each individual span in a trace. diff --git a/docs/concepts/key-terms/enrich-data/index.mdx b/docs/concepts/key-terms/enrich-data/index.mdx index 126206be14e65..7a1c51481a239 100644 --- a/docs/concepts/key-terms/enrich-data/index.mdx +++ b/docs/concepts/key-terms/enrich-data/index.mdx @@ -60,11 +60,11 @@ Learn more in [Search](/concepts/search/). ### Explore -Explore is a powerful query engine that builds upon your data, allowing you to reveal patterns, anomalies, and deeper insights in the health of your entire system. With this in mind, the more (custom) data you bring into Sentry, the more flexibility you'll gain in building queries that address your environments, releases, custom development, and business characteristics. Sentry supports telemetry data from a wide range of sources, like [errors](/product/errors/), [traces and spans](/product/trace-explorer/), [logs](/product/logs/), [session replays](/product/session-replay/web/), and [application metrics](/product/metrics/). +[Explore](/product/explore/) queries your telemetry, including [errors](/product/errors/), [traces and spans](/product/trace-explorer/), [logs](/product/logs/), [session replays](/product/session-replay/web/), and [application metrics](/product/metrics/). The more custom data you send, the more specific those queries can be: environment, release, and your own tags. For instance, a Traces query can display all the spans that occurred in the _production environment_, aggregated by the _customer-type custom tag_, and ordered by _p90(span.duration)_. -Learn more in [Traces and Spans](/product/trace-explorer/). +Learn more in [Explore](/product/explore/). ### Ownership Rules diff --git a/docs/concepts/key-terms/extrapolation.mdx b/docs/concepts/key-terms/extrapolation.mdx index 9a58720d5c043..ab5721785d4b7 100644 --- a/docs/concepts/key-terms/extrapolation.mdx +++ b/docs/concepts/key-terms/extrapolation.mdx @@ -74,11 +74,11 @@ Extreme values like `min` and `max` aren't extrapolated because they're less sta While extrapolation is usually helpful, if you are exclusively looking to confirm your sampling usage or look exclusively at sampled data, you can turn off extrapolation. -You can disable extrapolation using the settings icon above charts in tools like Trace Explorer. Note that with extrapolation off, your metrics will only reflect the sampled data, not your full traffic. +You can disable extrapolation using the settings icon above charts in [Explore → Traces](/product/trace-explorer/). Note that with extrapolation off, your metrics will only reflect the sampled data, not your full traffic. If Sentry displays a **low confidence warning**, it means there isn't enough sampled data for reliable extrapolation. Consider increasing your sample rate or widening your query filters. -![Trace Explorer low samples warning =500x](./img/Trace_explorer_low_samples.png) +![Low sampling rate warning in Traces =500x](./img/Trace_explorer_low_samples.png) diff --git a/docs/concepts/key-terms/key-terms.mdx b/docs/concepts/key-terms/key-terms.mdx index 85b7a9dd284ef..eba65cf602d10 100644 --- a/docs/concepts/key-terms/key-terms.mdx +++ b/docs/concepts/key-terms/key-terms.mdx @@ -54,7 +54,7 @@ Each of these key features have their own page (or set of pages) in the [sentry. - **Projects** - Lists the projects of which you're a member, by team, and provides you with a high-level overview of your projects. From here, you can go to the **Project Details** page of each project for a more granular view. Learn more in the full [Projects documentation](/product/projects/). -- **Explore** - Sentry offers multiple ways to search and investigate your application's data — including your app's [errors](/product/errors/), [traces](/product/trace-explorer/), [metrics](/product/metrics/), [profiles](/product/profiling/), [replays](/product/session-replay/), and [logs](/product/logs/) — to get the information you need to debug issues more quickly and easily. +- **[Explore](/product/explore/)** - Sentry's home to search and investigate your application's data, including [errors](/product/errors/), [traces](/product/trace-explorer/), [metrics](/product/metrics/), [profiles](/product/profiling/), [replays](/product/session-replay/), and [logs](/product/logs/). - **Pre-built Sentry Dashboards** - Sentry surfaces insights that can help you identify opportunities at the service-level to improve various parts of your app's performance, including requests, assets, caches, queues, and more. Pre-built Sentry Dashboards living under the Dashboards heading provide an overview of how your project is performing in various categories, as well as the ability to review sample events and their traces to help you diagnose potential problems. Learn more in the full [Sentry Dashboards documentation](/product/dashboards/sentry-dashboards/). diff --git a/docs/concepts/key-terms/tracing/distributed-tracing.mdx b/docs/concepts/key-terms/tracing/distributed-tracing.mdx index 11424e7d71bf9..ccf1ae1c6ac19 100644 --- a/docs/concepts/key-terms/tracing/distributed-tracing.mdx +++ b/docs/concepts/key-terms/tracing/distributed-tracing.mdx @@ -240,6 +240,6 @@ Dynamic sampling ensures complete traces by retaining all transactions associate ## Viewing Trace Data -Use the [Trace Explorer](/product/trace-explorer/) to search for traces containing spans that meet your specific query conditions. This helps you find distributed traces that give you a connected view of your application and can help you debug and optimize your code. +Use [Explore → Traces](/product/trace-explorer/) to search for traces containing spans that meet your specific query conditions. This helps you find distributed traces that give you a connected view of your application and can help you debug and optimize your code. Through [Dashboards](/product/dashboards/sentry-dashboards/) and [Traces](/product/trace-explorer/), you can also view trace data in the [Trace View](/concepts/key-terms/tracing/trace-view/) page. diff --git a/docs/concepts/search/searchable-properties/events.mdx b/docs/concepts/search/searchable-properties/events.mdx index bc18ef46253c6..61b4fea243988 100644 --- a/docs/concepts/search/searchable-properties/events.mdx +++ b/docs/concepts/search/searchable-properties/events.mdx @@ -8,8 +8,8 @@ Events are the underlying event data captured using Sentry SDKs — that is, err You can search by event properties in the following [sentry.io](https://sentry.io) pages: -- Errors - in the query builder -- Trace Explorer - in the query builder +- Explore → Errors - in the query builder +- Explore → Traces - in the query builder - Dashboards - within the widget builder (depending on dataset selection) - Issues - as indicated in the list below - Alerts - when creating an alert diff --git a/docs/concepts/search/searchable-properties/index.mdx b/docs/concepts/search/searchable-properties/index.mdx index 952c2276d3b71..a6081df623ee0 100644 --- a/docs/concepts/search/searchable-properties/index.mdx +++ b/docs/concepts/search/searchable-properties/index.mdx @@ -4,22 +4,34 @@ description: "Learn more about searchable properties." sidebar_order: 10 --- -Sentry's search provides you with reserved keywords, like `is`, `user`, `server`, and `browser`, that you can use to search on the properties of issues, events and replays (as well as the special case of releases). You can also create [custom tags](#custom-tags) on which to search. This page provides guidance for how to use these properties and links you to the respective searchable property lists. +Search keys depend on the dataset. A key that works on Errors can be invalid on Logs. This page links each place you search to the property list for that dataset. You can also search [custom tags](#custom-tags) and any attribute you attach in the SDK. ## Search Properties -Sentry's searchable properties fall into one of five categories: +### Explore -- [Issue properties](/concepts/search/searchable-properties/issues/) -- [Event properties](/concepts/search/searchable-properties/events/) -- [Span properties](/concepts/search/searchable-properties/spans/) -- [Session Replay properties](/concepts/search/searchable-properties/session-replay/) -- [User Feedback properties](/concepts/search/searchable-properties/user-feedback/) -- [Release properties](/concepts/search/searchable-properties/releases/) +[Explore](/product/explore/) uses one search syntax and a different property list per dataset. + +- **Traces** use [span properties](/concepts/search/searchable-properties/spans/). +- **Logs** use [log properties](/concepts/search/searchable-properties/logs/). +- **Application Metrics** use [metric properties](/concepts/search/searchable-properties/metrics/). +- **Errors** use [event properties](/concepts/search/searchable-properties/events/). +- **Replays** use [session replay properties](/concepts/search/searchable-properties/session-replay/). +- **Releases** use [release properties](/concepts/search/searchable-properties/releases/). +- **Agents** use [span properties](/concepts/search/searchable-properties/spans/). Agent fields are attributes on spans. + +Profiles is a browse page. It does not have its own property list. + +### Issues and User Feedback + +Issues and User Feedback each have their own keys. + +- **Issues** uses [issue properties](/concepts/search/searchable-properties/issues/). +- **User Feedback** uses [user feedback properties](/concepts/search/searchable-properties/user-feedback/). ## Search Tips -Search terms should auto-complete, and when they don't that means you have an invalid dataset. If you enter an invalid search term and tap Return or Enter, an error message is displayed. For example, in **Errors** or **Trace Explorer**, you cannot search using a grouping function (properties with a parentheses in the key, for example `epm()`) if you don't already have a grouping function included in the "Results" table columns. +Search terms should auto-complete, and when they don't that means you have an invalid dataset. If you enter an invalid search term and tap Return or Enter, an error message is displayed. For example, in **Errors** or **Traces**, you cannot search using a grouping function (properties with a parentheses in the key, for example `epm()`) if you don't already have a grouping function included in the "Results" table columns. When you search using a property that's a function, if the key includes a parameter, you still need to add a filter or value to have a complete search token. For example, the function `count_unique(field)` takes whichever field you choose as the parameter and then you add a number as your value to filter on. So a typical search might look like: `count_unique(user):>=20`. diff --git a/docs/concepts/search/searchable-properties/logs.mdx b/docs/concepts/search/searchable-properties/logs.mdx new file mode 100644 index 0000000000000..5adc4765e4348 --- /dev/null +++ b/docs/concepts/search/searchable-properties/logs.mdx @@ -0,0 +1,209 @@ +--- +title: Log Properties +description: "Learn more about searchable log properties." +sidebar_order: 22 +--- + +Search logs in [Explore → Logs](/product/logs/). The keys below are reserved. Any custom attribute you attach on the log is searchable too, using the same attribute name you set in the SDK. + +Raw text search matches `message` only, and it is case sensitive. It does not search the rest of the log. A regular expression uses `message://pattern//`. See [regular expressions](/concepts/search/#regular-expressions-logs-only). + +## Searchable Properties + +These keys can be used in a log search: + + + +### `message` + +The log message body. + +- **Type:** string + +### `message.template` + +The parameterized template, when the SDK recorded one. For example, `Adding item {item} for user {user}`. + +- **Type:** string + +### `message.parameter.` + +One parameter from a parameterized message. `` is the parameter name or the positional index, such as `message.parameter.item` or `message.parameter.0`. + +- **Type:** string + +### `severity` + +The severity text. One of `trace`, `debug`, `info`, `warn`, `error`, or `fatal`. + +- **Type:** string + +### `severity_number` + +The numeric severity. Higher numbers are more severe. SDKs set the low end of each range: `trace` is 1, `debug` is 5, `info` is 9, `warn` is 13, `error` is 17, and `fatal` is 21. + +- **Type:** number + +### `timestamp` + +When the log was recorded. + +- **Type:** datetime + +### `trace` + +The trace ID for the active trace when the log was recorded. + +- **Type:** string + +### `span_id` + +The span the log was emitted from. Empty when no span was active. Older SDKs send the same value as `trace.parent_span_id`. + +- **Type:** string + +### `id` + +The log's unique ID. + +- **Type:** string + +### `project` + +The project the log belongs to. You can also scope projects with the page filter. + +- **Type:** string + +### `environment` + +The environment set in the SDK, such as `development`, `staging`, or `production`. [Learn more](/concepts/key-terms/environments/). + +- **Type:** string + +### `release` + +The release set in the SDK. `release:latest` selects the most recent release. [Learn more](/product/releases/usage/sorting-filtering/#latest-release). + +- **Type:** string + +### `logger.name` + +The name of the logger that emitted the log, when the SDK or logging integration set one. + +- **Type:** string + +### `origin` + +Set when an SDK integration captured the log. For example, `auto.log.serilog` or `auto.db.prisma`. Direct calls to the Sentry logger API do not set this. + +- **Type:** string + +### `sdk.name` + +Name of the Sentry SDK that sent the log. + +- **Type:** string + +### `sdk.version` + +Version of the Sentry SDK that sent the log. + +- **Type:** string + +### `payload_size` + +Size of the log payload, in bytes. + +- **Type:** number + +### `replay.id` + +The ID of the active replay when the log was recorded. + +- **Type:** string + +### `browser.name` + +Display name of the browser. Relay parses this from the user agent when the SDK does not set it. + +- **Type:** string + +### `browser.version` + +Version of the browser. + +- **Type:** string + +### `user.id` + +Application-specific identifier for the user. Sent when [send default PII](/platform-redirect/?next=/data-management/data-collected/) is enabled, or when you set it yourself. + +- **Type:** string + +### `user.email` + +Email address of the user. + +- **Type:** string + +### `user.name` + +Username of the user. + +- **Type:** string + +### `server.address` + +Server address. Backend SDKs attach this. + +- **Type:** string + +### `os.name` + +Operating system name. Mobile, desktop, and native SDKs attach this. + +- **Type:** string + +### `os.version` + +Operating system version. + +- **Type:** string + +### `device.brand` + +Device brand. + +- **Type:** string + +### `device.model` + +Device model. + +- **Type:** string + +### `device.family` + +Device family. + +- **Type:** string + +### `code.file.path` + +File path captured with the log, when the SDK recorded a code location. + +- **Type:** string + +### `code.function.name` + +Function name captured with the log. + +- **Type:** string + +### `code.line.number` + +Line number captured with the log. + +- **Type:** number + + diff --git a/docs/concepts/search/searchable-properties/metrics.mdx b/docs/concepts/search/searchable-properties/metrics.mdx new file mode 100644 index 0000000000000..4438c5e43de9b --- /dev/null +++ b/docs/concepts/search/searchable-properties/metrics.mdx @@ -0,0 +1,149 @@ +--- +title: Metric Properties +description: "Learn more about searchable application metric properties." +sidebar_order: 23 +--- + +Search application metrics in [Explore → Metrics](/product/metrics/). Pick the metric in the metric selector, then filter with the keys below. Any custom attribute you attach on the metric is searchable too, using the same attribute name you set in the SDK. + +The samples table uses shorter labels than the search bar. Search the name with `metric.name`, the type with `metric.type`, the unit with `metric.unit`, and the trace ID with `trace`. + +## Searchable Properties + +These keys can be used in a metric search: + + + +### `metric.name` + +The metric identifier, such as `checkout.failed` or `queue.depth`. + +- **Type:** string + +### `metric.type` + +The metric type. One of `counter`, `gauge`, or `distribution`. + +- **Type:** string + +### `metric.unit` + +Unit of measurement, such as `usd`, `ms`, or `bytes`. Empty when the SDK did not set one. + +- **Type:** string + +### `value` + +The numeric value. For a counter, this is the amount added. For a gauge, this is the current value. For a distribution, this is one measured value. + +- **Type:** number + +### `timestamp` + +When the metric was recorded. + +- **Type:** datetime + +### `trace` + +The trace ID for the active trace when the metric was recorded. Metrics are often sampled at 100% while traces are sampled at a lower rate, so some metric events have no trace. + +- **Type:** string + +### `span_id` + +The span the metric was recorded on. Empty when no span was active. + +- **Type:** string + +### `trace.parent_span_id` + +The parent span ID sent by some SDKs for the same association as `span_id`. + +- **Type:** string + +### `transaction` + +The name of the transaction or segment that was active when the metric was recorded. + +- **Type:** string + +### `id` + +The metric event's unique ID. + +- **Type:** string + +### `project` + +The project the metric belongs to. You can also scope projects with the page filter. + +- **Type:** string + +### `environment` + +The environment set in the SDK, such as `development`, `staging`, or `production`. [Learn more](/concepts/key-terms/environments/). + +- **Type:** string + +### `release` + +The release set in the SDK. `release:latest` selects the most recent release. [Learn more](/product/releases/usage/sorting-filtering/#latest-release). + +- **Type:** string + +### `sdk.name` + +Name of the Sentry SDK that sent the metric. + +- **Type:** string + +### `sdk.version` + +Version of the Sentry SDK that sent the metric. + +- **Type:** string + +### `replay.id` + +The ID of the active replay when the metric was recorded. + +- **Type:** string + +### `browser.name` + +Display name of the browser. Relay parses this from the user agent when the SDK does not set it. + +- **Type:** string + +### `browser.version` + +Version of the browser. + +- **Type:** string + +### `user.id` + +Application-specific identifier for the user. Sent when [send default PII](/platform-redirect/?next=/data-management/data-collected/) is enabled, or when you set it yourself. + +- **Type:** string + +### `user.email` + +Email address of the user. + +- **Type:** string + +### `user.name` + +Username of the user. + +- **Type:** string + +### `server.address` + +Server address. Backend SDKs attach this. + +- **Type:** string + + diff --git a/docs/get-started/guides/custom-spans.mdx b/docs/get-started/guides/custom-spans.mdx index 1118953c03cf7..44d06cc77c932 100644 --- a/docs/get-started/guides/custom-spans.mdx +++ b/docs/get-started/guides/custom-spans.mdx @@ -89,7 +89,7 @@ span.finish() transaction.finish() ``` -Numeric attributes become metrics you can aggregate with `sum()`, `avg()`, `p90()` in [Trace Explorer](https://sentry.io/orgredirect/organizations/:orgslug/explore/traces/). +Numeric attributes become metrics you can aggregate with `sum()`, `avg()`, `p90()` in [Explore → Traces](https://sentry.io/orgredirect/organizations/:orgslug/explore/traces/). ## Where to Add Spans @@ -769,4 +769,4 @@ transaction.finish() ## Next Steps -Explore the [Trace Explorer product walkthrough](/product/trace-explorer/) to learn more about the Sentry interface and discover additional tips. +See [Traces and Spans](/product/trace-explorer/) for how to query this data in Explore, and [Explore](/product/explore/) for the controls shared with other datasets. diff --git a/docs/get-started/guides/querying-traces.mdx b/docs/get-started/guides/querying-traces.mdx index e2fcaccf4a955..f9b58a99be446 100644 --- a/docs/get-started/guides/querying-traces.mdx +++ b/docs/get-started/guides/querying-traces.mdx @@ -92,5 +92,5 @@ To see an example of querying traces, check out how to query your slowest endpoi ## Next Steps -Explore the [Trace Explorer product walkthrough guides](/product/trace-explorer/) to learn more about the Sentry interface and discover additional tips. +See [Traces and Spans](/product/trace-explorer/) for how to query this data in Explore, and [Explore](/product/explore/) for the controls shared with other datasets. diff --git a/docs/product/dashboards/index.mdx b/docs/product/dashboards/index.mdx index b2b11ee040df5..625dc8bf98d80 100644 --- a/docs/product/dashboards/index.mdx +++ b/docs/product/dashboards/index.mdx @@ -39,7 +39,7 @@ You can make [custom dashboards](/product/dashboards/custom-dashboards/) by dupl ## Open Dashboard Widgets in Explore and Issues -Each dashboard [widget](/product/dashboards/widget-builder/) has an ellipsis that opens a context menu. From here, depending on the type of data the widget shows, you can open the widget in different explorers: [Errors](/product/errors/), [Traces](/product/trace-explorer/), [Logs](/product/logs/), [Session Replays](/product/session-replay/web/), and [Metrics](/product/metrics/) to get more information. +Each dashboard [widget](/product/dashboards/widget-builder/) has an ellipsis that opens a context menu. From here, depending on the type of data the widget shows, you can open the widget in [Explore](/product/explore/): [Errors](/product/errors/), [Traces](/product/trace-explorer/), [Logs](/product/logs/), [Session Replays](/product/session-replay/web/), and [Metrics](/product/metrics/). ## Widget Viewer diff --git a/docs/product/dashboards/widget-builder/index.mdx b/docs/product/dashboards/widget-builder/index.mdx index 41187cafabd7c..1aa572bc0466e 100644 --- a/docs/product/dashboards/widget-builder/index.mdx +++ b/docs/product/dashboards/widget-builder/index.mdx @@ -40,7 +40,7 @@ Choosing "Logs" allows you to query and aggregate structured log data from your - Logs filtered by severity level or custom attributes - Trends in application state or business events -You can create log-based widgets from [Logs Explorer](/product/logs/) queries. +You can create log-based widgets from [Explore → Logs](/product/logs/) queries. ### Application Metrics @@ -71,7 +71,7 @@ Choosing "Releases (sessions, crash rates)" allows you to query properties speci ### Transactions (Deprecated) -Transactions are deprecated in favor of spans. Use the [Spans](#spans) dataset for new widgets, or explore performance data in [Trace Explorer](/product/trace-explorer/). +Transactions are deprecated in favor of spans. Use the [Spans](#spans) dataset for new widgets, or query performance data in [Explore → Traces](/product/trace-explorer/). Choosing "Transactions" allows you to query and aggregate transaction events. This data is comprised of events that track the performance of operations in your application. diff --git a/docs/product/drains/openrouter.mdx b/docs/product/drains/openrouter.mdx index cf5c240e4e83c..c520f886908d9 100644 --- a/docs/product/drains/openrouter.mdx +++ b/docs/product/drains/openrouter.mdx @@ -55,4 +55,4 @@ ___DSN___ ## Step 5: Verify traces in Sentry -Make an API request through OpenRouter and view the trace in Sentry's [Trace Explorer](/product/trace-explorer/). It may take a few minutes for traces to appear. +Make an API request through OpenRouter and view the trace in [Explore → Traces](/product/trace-explorer/). It may take a few minutes for traces to appear. diff --git a/docs/product/errors/index.mdx b/docs/product/errors/index.mdx index fde6fc8a9e296..0eb8776565579 100644 --- a/docs/product/errors/index.mdx +++ b/docs/product/errors/index.mdx @@ -9,13 +9,9 @@ description: >- ## Overview -The [**Errors**](https://sentry.io/orgredirect/organizations/:orgslug/explore/errors/homepage/) page lets you query all of your error event metadata across projects and environments. You can build custom queries with flexible filters, group and stack results, visualize trends over time, and save queries for reuse by your team. +Errors are a dataset in [Explore](/product/explore/). The [**Errors**](https://sentry.io/orgredirect/organizations/:orgslug/explore/errors/) page queries error event metadata across projects and environments. Build a query with filters, group and stack results, and chart trends over time. -While [Issues](/product/issues/) groups related error events for triage and resolution, the Errors page gives you a powerful way to ask questions across all your error data at once, surfacing patterns and trends that individual issues may not reveal. - - - Your plan type determines your query window: Developer: 7 days | Team: 14 days | Business: 30 days. - +[Issues](/product/issues/) groups related error events for triage. Use Errors to look across all of those events at once, including patterns that a single issue does not show. The [query window](/product/explore/#query-window) depends on your plan. ## Searching and Filtering @@ -34,9 +30,7 @@ Use `OR` and `AND` between filters. Note that `OR` cannot be used between aggreg You can search multiple values for the same key by putting them in a list. For example, `x:[value1, value2]` returns the same results as `x:value1 OR x:value2`. Learn more about [Multiple Values on the Same Key](/concepts/search/#multiple-values-on-the-same-key). -### Filter by Project, Environment, and Date Range - -Use the common filters at the top of the page to scope your query by project, environment, and date range. +Project, environment, and date range filters at the top of the page scope the query. See [Page Filters](/product/explore/#page-filters). ### Tag Summary Filters @@ -101,7 +95,6 @@ Click a column header to sort. A down arrow sorts descending, an up arrow sorts You can save any of your queries by clicking the **Save As** button in the top right. Name your query, and you can then update it or find it later in the All or Starred Queries sections. - ### Add to Dashboard Queries can be added to [custom dashboards](/product/dashboards/custom-dashboards/) as widgets. Open the context menu on the query card or within the query results view and click "Add to Dashboard". Name your widget, select the target dashboard, and save. @@ -112,7 +105,7 @@ Customize your default view by configuring a query with specific columns, charts ### Export CSV -Click "Export Data" to download a CSV file of the results. For large exports, you'll receive an email with the download link. The results are limited to 10 million rows or 1 GB, whichever comes first. +Click **Export** to download a CSV of the results. For large exports, you'll receive an email with the download link. The results are limited to 10 million rows or 1 GB, whichever comes first. Other datasets use different formats and limits. See [Save a Query](/product/explore/#save-a-query). The download includes a `SHA1` checksum you can use to verify integrity: diff --git a/docs/product/explore/dropped-data.mdx b/docs/product/explore/dropped-data.mdx new file mode 100644 index 0000000000000..1a9a6d9495916 --- /dev/null +++ b/docs/product/explore/dropped-data.mdx @@ -0,0 +1,410 @@ +--- +title: Investigate Dropped Data in Sentry +sidebar_title: Dropped Data +sidebar_order: 1 +description: >- + Learn how to investigate and troubleshoot dropped data in Sentry. +--- + +When data is ingested into Sentry, it can be dropped for a number of reasons. Sample rate, queue +overflow, inbound filters, and invalid or malformed data are some top examples for why data might be +dropped. + +## Troubleshooting Dropped Data +Traces, Logs, and Application Metrics charts in [Explore](/product/explore/) can show data that Sentry did not store. Hover over the dropped data line at the bottom of the chart to see the summary. Click on the line to see the details and troubleshoot. + +Below are all the possible reasons why data might be dropped. They correspond with the title you will see when exploring dropped data in Sentry. + +Each reason includes what happened, why it happens, and what to change so less data is dropped. + +### Category: Client Discard + +The SDK dropped the data before it left your application. + +#### Backpressure + +Reason code: `backpressure`. + +Your SDK detected that it was under load and reduced trace sampling so telemetry processing would not add pressure on your application. The discarded spans never left your application. + +- **Short:** SDK reduced trace sampling under load. +- **Causes:** + - A slow or degraded network path to Sentry, so telemetry builds up faster than the SDK can send it. + - The application is producing an unusually large amount of tracing data, such as a traffic spike or an N+1 query that generates many spans. + - The application or runtime is under resource pressure, so the SDK cannot process and send telemetry quickly enough. +- **Actions:** + - Check for unusual increases in application traffic or span volume around the time backpressure occurred. + - Look for instrumentation that produces unexpectedly large numbers of spans, such as N+1 queries, tight loops, or high-frequency operations. + +#### Queue Overflow + +Reason code: `queue_overflow`. + +Your application is generating events faster than the SDK can buffer and send them. The SDK allows a limited number of operations in flight at once. Beyond that, new events are dropped immediately rather than queued. + +- **Short:** SDK send queue was full. +- **Causes:** + - Application code sending events in a tight loop, for example an exception inside a `while` loop. + - Requests to Sentry are slow or hanging. A proxy, firewall, misconfigured Relay, or a request without a timeout can cause this. +- **Actions:** + - Confirm that requests to Sentry are completing. + - Look for suspect code, including async work that does not finish inside [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) filters. + - If this volume of events is expected, [contact Sentry support](https://sentry.zendesk.com/hc/en-us). + +#### Buffer Overflow + +Reason code: `buffer_overflow`. + +A fixed-size in-memory buffer in the SDK reached its limit and dropped data. This is most often a session replay that exceeded its size cap. + +- **Short:** SDK buffer filled before data could be sent. +- **Causes:** + - A replay grew larger than the maximum replay buffer before the SDK sent the final replay to Sentry. +- **Actions:** + - For replays, record less. Use [block or ignore](/platforms/javascript/session-replay/privacy/#blocking) to skip high-churn elements, `blockAllMedia` for heavy media, [`mutationLimit`](/platforms/javascript/session-replay/configuration/#mutation-limits) to cap mutation storms from animations or infinite scroll, and [`maxReplayDuration`](/platforms/javascript/session-replay/configuration/#general-integration-configuration) to shorten sessions. If canvas recording is enabled, lower its sampling rate and quality. + +#### Network Error + +Reason code: `network_error`. + +The request failed without a response. Ad blockers and browser extensions are a common cause. + +- **Short:** Request failed before reaching Sentry. +- **Causes:** + - **Browser:** Ad blockers, browser extensions, and similar client-side blockers. + - **Browser:** A CORS misconfiguration, the user being offline, or the page unloading before the request completes. + - **Server:** No outbound network access from the host or container, an egress firewall, a DNS failure, TLS errors from an intercepting proxy, or proxy settings the SDK is not using. +- **Actions:** + - For ad blockers, route events through your own domain with the [`tunnel` option](/platforms/javascript/troubleshooting/#using-the-tunnel-option). + - For browsers, confirm in devtools that requests to your ingest domain are not blocked, and check your CORS configuration. + - For servers, verify outbound connectivity to your ingest domain from the host or container. + +#### Send Error + +Reason code: `send_error`. + +The event reached Sentry and Sentry rejected it with an error status. + +- **Short:** Sentry rejected the event with an error response. +- **Causes:** + - Large `extra` or `contexts` data on events, such as full configuration objects or API responses, which can produce a `413`. + - Large attachments. +- **Actions:** + - Enable debug mode in your SDK and look for `Sentry responded with status code 413`. The log identifies which events were rejected. + - Reduce the size of those events. Trim large objects in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend), and lower `maxValueLength`, `normalizeDepth`, or `maxBreadcrumbs` as needed. + +#### Before Send + +Reason code: `before_send`. + +Your [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) function, or your [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) config, omitted the event. If that was not intentional, check your Sentry config. + +- **Short:** Event dropped by your before-send function. See [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). +- **Causes:** + - Your before-send filter is behaving as written. + - [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) omitted spans before they were sent. + - Application code in a before-send hook returned `false` or `null`. +- **Actions:** + - Update [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) if it is blocking spans you want to receive. + - Correct before-send logic that is omitting spans unintentionally. + +#### Ignored Spans + +Reason code: `ignore_spans`. + +Spans matched an ignore rule in your SDK configuration and were not sent. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). + +- **Short:** Span dropped by your ignored-spans configuration. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). +- **Causes:** + - [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) omitted specific spans before they were sent to Sentry. +- **Actions:** + - Update [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) if it is blocking spans you want to receive. + +#### Sample Rate + +Reason code: `sample_rate`. + +Events were dropped because of the sample rate configured in the SDK. + +- **Short:** Event dropped by your configured sample rate. +- **Causes:** + - The sample rate in your SDK config. See [`tracesSampleRate`](/platform-redirect/?next=/configuration/options/#tracesSampleRate). +- **Actions:** + - Raise the sample rate if you want more events sampled. + +### Category: Invalid or Malformed + +Sentry received the payload and could not accept it. + +#### Internal + +Reason code: `internal`. + +This indicates a bug or an infrastructure problem during ingestion. During healthy operation this count should be zero. + +- **Short:** Sentry failed to process the event. +- **Causes:** + - A problem in Sentry's ingestion service. +- **Actions:** + - Check the [Sentry status page](https://status.sentry.io/) for an ongoing incident. + - [Contact Sentry support](https://sentry.zendesk.com/hc/en-us) if this happens at a high rate. + +#### Invalid Dynamic Sampling Context + +Reason code: `invalid_dsc`. + +The trace ID in the metadata header did not match the trace ID on the spans. + +- **Short:** Trace header did not match the spans that were sent. +- **Causes:** + - A custom implementation of Sentry's transport protocol. + - An outdated SDK. +- **Actions:** + - If you use an official Sentry SDK, upgrade to the latest version. This is not fixable through configuration. + - [Contact Sentry support](https://sentry.zendesk.com/hc/en-us) if this continues after the upgrade. + +#### Invalid JSON + +Reason code: `invalid_json`. + +Sentry could not parse the event that was sent. + +- **Short:** Event rejected because the JSON was invalid. +- **Causes:** + - A truncated or incomplete payload. + - Unescaped control characters or non-UTF-8 bytes in string fields. + - A mismatch between the body encoding and the declared `Content-Encoding`. +- **Actions:** + - If you send payloads directly, log the raw body on failure and parse it locally. Confirm that envelope item length headers match the actual byte lengths. + - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://sentry.zendesk.com/hc/en-us) if it continues. + +#### Invalid Transaction + +Reason code: `invalid_transaction`. + +The transaction was valid JSON, but Sentry could not accept its contents. + +- **Short:** Transaction contained invalid data. +- **Causes:** + - Timestamps outside the accepted ingestion window. + - A negative duration, where the end timestamp is before the start timestamp. +- **Actions:** + - Verify clock synchronization (NTP) on the hosts that send the data. [Clock skew](/concepts/key-terms/tracing/distributed-tracing/#clock-skew) across machines can produce timestamps Sentry rejects. + - Check whether the affected transactions are backdated. Sentry does not ingest transactions older than the accepted window. + +#### Missing Dynamic Sampling Context + +Reason code: `missing_dsc`. + +The envelope contained spans and no trace header. + +- **Short:** Envelope was missing the required trace header. +- **Causes:** + - An outdated SDK. + - A custom implementation of Sentry's transport protocol. +- **Actions:** + - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://sentry.zendesk.com/hc/en-us) if it continues. + - If you are not running a custom SDK and upgrading does not help, [contact Sentry support](https://sentry.zendesk.com/hc/en-us). + +#### Too Large Event + +Reason code: `too_large:event`. + +The event exceeded the maximum payload size. The same limit applies to other item types, with a reason code such as `too_large:log` or `too_large:span`. The sections below cover the common types. + +- **Short:** The event exceeded the maximum payload size. +- **Causes:** + - Very deep stack traces, typically from recursion or stack-overflow errors. + - Too much data attached with `setContext`, or other large payloads. +- **Actions:** + - Trim the payload in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). That lets you drop the largest fields and still keep the event. + +#### Too Large Log + +Reason code: `too_large:log`. + +The log exceeded the maximum payload size. + +- **Short:** The log exceeded the maximum payload size. +- **Causes:** + - Large attributes or messages, such as request bodies or application configuration. +- **Actions:** + - Trim the payload in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). + - Do not attach an entire large JSON payload as log attributes. Pick the fields you need. + +#### Too Large Span + +Reason code: `too_large:span`. + +The span exceeded the maximum payload size. + +- **Short:** The span exceeded the maximum payload size. +- **Causes:** + - Large span attributes, such as a full request body instead of individual HTTP fields. + - Large context windows from AI agents attached to spans. +- **Actions:** + - Trim the payload in [`beforeSendSpan`](/platform-redirect/?next=/configuration/options/#beforeSendSpan). + +#### Too Large Application Metric + +Reason code: `too_large:trace_metric`. + +The metric event exceeded the maximum payload size. + +- **Short:** The application metric exceeded the maximum payload size. +- **Causes:** + - Large metric attributes, such as a full request body instead of individual fields. +- **Actions:** + - Audit attributes on application metrics. Set the specific parameters you need, not an entire HTTP request object. + +#### Too Large Transaction + +Reason code: `too_large:transaction`. + +The transaction exceeded the maximum payload size. Transactions carry their spans inline, so size usually comes from span count rather than one large field. + +- **Short:** The transaction exceeded the maximum payload size. +- **Causes:** + - A very high number of spans on one transaction. + - Long span descriptions, large span attributes, or both. +- **Actions:** + - Trim the payload in [`beforeSendTransaction`](/platform-redirect/?next=/configuration/options/#beforeSendTransaction). + - Reduce span volume at the source. Address N+1 query patterns, or narrow auto-instrumentation that creates a span per database call. + +### Category: Rate Limited + +Sentry throttled requests or dropped events after they arrived. + +#### Generic + +Your requests were throttled by Sentry's edge protection, not by a quota. The limit applies to a single DSN key and to all data types, for the duration Sentry returned in `Retry-After`. + +- **Short:** Requests across all event types were rate limited. +- **Causes:** + - A very high request rate from one DSN key. A runaway loop, or a retry storm after a batch of failures, is a common cause. + - A project with legitimately high traffic hitting the rate limit. +- **Actions:** + - Look for a loop or retry storm. Check whether the burst lines up with a deploy. + - If this volume is expected, [contact Sentry support](https://sentry.zendesk.com/hc/en-us) or your account manager. + +#### Project Abuse Limit + +Reason code: `project_abuse_limit`. + +Your project exceeded Sentry's abuse limit for a data type. This is a short-window rate limit. It is not your billing quota and it is not spike protection. + +- **Short:** Events of one data type exceeded the project abuse limit. +- **Causes:** + - A very high rate of one telemetry type on a project. An error emitted in a tight loop can trigger this. + - A project with legitimately high traffic hitting the abuse limit. +- **Actions:** + - Look for a loop or retry storm. Check whether the burst lines up with a deploy. + - If this volume is expected, [contact Sentry support](https://sentry.zendesk.com/hc/en-us) or your account manager. + +#### Spike Protection + +Reason code: `spike-protection`. + +[Spike protection](/pricing/quotas/spike-protection/) detected a sudden increase in event volume for this project and dropped events so the spike would not consume your quota. + +- **Short:** Spike protection dropped events to preserve quota. See [Spike Protection](/pricing/quotas/spike-protection/). +- **Causes:** + - A sudden increase in volume for one project. + - A low-volume or newly created project. Thresholds are derived partly from recent history. + - A real traffic spike, such as a badly behaved bot. +- **Actions:** + - Find what caused the spike. Sort the project's issues by event count over the affected window, and check whether it lines up with a deploy. + - Turn spike protection on or off per project in settings. See [Spike Protection](/pricing/quotas/spike-protection/). + +#### Quota + +Reason code: `usage_exceeded`. + +Your organization's [quota](/pricing/quotas/) for this data category was fully consumed, and no pay-as-you-go budget remained. + +- **Short:** Your organization hit its quota for this event type. +- **Causes:** + - Reserved monthly volume for this category was consumed. + - Newly enabled instrumentation started sending a category you had not budgeted for. +- **Actions:** + - Lower sampling rates or add [inbound filters](/concepts/data-management/filtering/) so the same overrun does not happen next period. + - Raise pay-as-you-go spend or reserved volume if the growth is expected. See [quotas](/pricing/quotas/). + +### Category: Inbound Filters + +A [project inbound filter](/concepts/data-management/filtering/) dropped the event when Sentry received it. Filtered events do not count toward quota. + +#### Filtered Transaction + +Reason code: `filtered_transaction`. + +The transaction name matched Sentry's [health check filter](/concepts/data-management/filtering/#transactions-coming-from-health-check), which drops endpoints such as `/health`, `/healthz`, `/ping`, and `/ready`. This filter is on by default. + +- **Short:** Transaction matched the default health check filter. See [health check filtering](/concepts/data-management/filtering/#transactions-coming-from-health-check). +- **Causes:** + - The health check filter is enabled by default on Sentry projects. +- **Actions:** + - Turn the filter off in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/) if you want these transactions. + +#### Error Message + +Reason code: `error-message`. + +The event matched a custom glob in your error-message filter. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). + +- **Short:** Event message matched one of your custom filters. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). +- **Causes:** + - A filter you configured. +- **Actions:** + - If events you expect are missing, review the glob in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Release Version + +Reason code: `release-version`. + +The event's release matched a custom release filter. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). + +- **Short:** Event release matched one of your custom filters. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). +- **Causes:** + - A filter you configured. +- **Actions:** + - If events you expect are missing, review the release rule in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### IP Addresses + +Reason code: `ip-addresses`. + +The event matched an IP range in a custom filter. See [IP address filters](/concepts/data-management/filtering/#ip-addresses). + +- **Short:** Event IP address matched one of your custom filters. See [IP address filters](/concepts/data-management/filtering/#ip-addresses). +- **Causes:** + - A filter you configured. +- **Actions:** + - If events you expect are missing, review the IP rule in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Legacy Browsers + +Reason code: `legacy-browsers`. + +The browser matched the [legacy browser filter](/concepts/data-management/filtering/#legacy-browser-filters). That filter drops events from older browsers that tend to produce broken telemetry. + +- **Short:** Browser matched your legacy browser filter. See [legacy browser filters](/concepts/data-management/filtering/#legacy-browser-filters). +- **Causes:** + - Bots spoofing old user agents. + - People connecting from old browsers, such as a kiosk that still runs an old browser. +- **Actions:** + - If the dropped browsers are ones your users actually use, review the legacy browser list in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/) and turn individual browsers off. + +#### Web Crawlers + +Reason code: `web-crawlers`. + +The user agent matched [Sentry's list of known web crawlers](/concepts/data-management/filtering/#web-crawler-errors). + +- **Short:** User agent matched Sentry's known crawler list. See [web crawler filters](/concepts/data-management/filtering/#web-crawler-errors). +- **Causes:** + - Bot traffic to your site. + - A user agent that matches the generic patterns. Any agent containing "bot" or "spider" as a word is filtered. +- **Actions:** + - Leave the filter on when you do not need crawler errors. + - To capture crawler-triggered errors, turn the filter off under [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). diff --git a/docs/product/explore/img/Trace_explorer_ingestion_delay.png b/docs/product/explore/img/Trace_explorer_ingestion_delay.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5785f35620289f4c26e8410365d392696c7a5c GIT binary patch literal 101783 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⁡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 G|NjNCOU)_( literal 0 HcmV?d00001 diff --git a/docs/product/explore/index.mdx b/docs/product/explore/index.mdx new file mode 100644 index 0000000000000..9a4ab1c21dec2 --- /dev/null +++ b/docs/product/explore/index.mdx @@ -0,0 +1,94 @@ +--- +title: Explore +sidebar_order: 190 +sidebar_section: debug +description: >- + Query and browse traces, logs, metrics, errors, replays, and all datasets from one + place in Sentry. +--- + +[Explore](https://sentry.io/orgredirect/organizations/:orgslug/explore/) is where you query and browse data in Sentry. [Issues](/product/issues/) group related errors so you can proactively triage and solve them. In Explore, filter a dataset, chart the results, and save queries in order to track trends in your application, and turn them into [dashboards](/product/dashboards/), [monitors](/product/monitors-and-alerts/monitors/), and [alerts](/product/monitors-and-alerts/alerts/). + +## Get Started in Explore + +Pick a [dataset](#data-types) from the sidebar. **Starred Queries** can also be found in the sidebar. + +You can query each dataset separately, using the same query language and controls. Or, if you select [Traces](https://sentry.io/orgredirect/organizations/:orgslug/explore/traces), you can add Logs and Application Metrics to your query builder. + +### Page Filters + +The **Project**, **Environment**, and **Time Range** filters at the top of the page scope every query on that dataset. + +### Search + +The search bar filters the current dataset. [Search syntax](/concepts/search/) is the same across search in Sentry. Attribute names depend on the dataset, and any customizations you've set through your platform SDK. See [Searchable Properties](/concepts/search/searchable-properties/) for more details on properties for each dataset. + +### Charts + +**Traces**, **Logs**, and **Metrics** have a visualization section to configure an aggregate (such as `count()`, `avg()`, or `p95()`), a **Group By**, and a **Sorty By** to split the chart's data representation. + +On **Errors**, set the **Interval**, **Display**, and **Y-Axis** on the chart. + +You will also see a representation of dropped data at the bottom of the chart for Traces, Logs, Metrics, and Errors. Click on the line to explore more details and troubleshoot. + +### Table + +**Traces**, **Logs**, and **Errors** have table views that can be customized to show different columns. All tables represent the data that is being queried, and is being displayed in the chart. + +Switch between a samples table and an aggregates table to move between the chart and individual events. + +### Save a Query + +**Save as** stores the current query. Saved queries are listed under **All Queries** in the Explore sidebar. Star a query to pin it under **Starred Queries**. Anyone in the organization with Explore access can open a saved query. + +From the *Save as* menu you can, add the query to a [dashboard](/product/dashboards/) as a widget, or create a [monitor](/product/monitors-and-alerts/monitors/) to turn the query parameters into [Issues](/product/issues/). The exact menu items depend on the dataset. On Errors, you can also set a query as the default view for the Errors page. + +Exporting data downloads the rows in the current results table. File format and row limits depend on the dataset. + +### Query Window + +Your plan limits how far back a query can look: Developer, 7 days | Team, 14 days | Business, 30 days. + +### Ingestion Delay + +Newly sent spans, logs, and metrics can take a short time to show up. Sentry estimates this delay for your organization, so the most recent part of a chart may be marked incomplete. Hover an incomplete bucket to see roughly when its data should settle. Counts there can go up as the rest of the data arrives. + +![Incomplete chart data tooltip](./img/Trace_explorer_ingestion_delay.png) + +This estimate is not a guarantee. Data sent late from your application is not included in the estimate, so events can still arrive after a bucket is marked settled. + +## Data Types + +### Traces + +Use [Traces](/product/trace-explorer/) to follow a request across services and query span attributes. Search span or trace samples, aggregate duration, and compare a time range to the baseline. Traces can also join logs and metrics from the same trace. + +Open [Explore → Traces](https://sentry.io/orgredirect/organizations/:orgslug/explore/traces/). + +### Logs + +Use [Logs](/product/logs/) for structured log lines. Search the message, filter on severity or custom attributes, and open related traces from a log line. + +Open [Explore → Logs](https://sentry.io/orgredirect/organizations/:orgslug/explore/logs/). + +### Metrics + +Use [Application Metrics](/product/metrics/) for counters, gauges, and distributions you send from code, such as `checkout.failed` or `queue.depth`. Chart a metric, group it, and open a sample to see the related traces. + +Open [Explore → Metrics](https://sentry.io/orgredirect/organizations/:orgslug/explore/metrics/). + +### Errors + +Use [Errors](/product/errors/) to query error events across projects. This is separate from Issues. Issues group events for triaging and solving known problems. Errors lets you count, group, and chart the underlying events, discovering patterns and trends in your application. + +Open [Explore → Errors](https://sentry.io/orgredirect/organizations/:orgslug/explore/errors/). + +## Also in Explore + +Profiles, Replays, Releases, and Agents also have Explore pages. They each have more unique functionalities for exploring the data. + +- [Profiles](/product/profiling/) shows the slowest functions and aggregate flame graphs. Open [Explore → Profiles](https://sentry.io/orgredirect/organizations/:orgslug/explore/profiles/). +- [Session Replay](/product/session-replay/) lists user sessions you can filter and watch. Open [Explore → Replays](https://sentry.io/orgredirect/organizations/:orgslug/explore/replays/). +- [Releases](/product/releases/) shows adoption, crash-free sessions, and the commits in a deploy. Open [Explore → Releases](https://sentry.io/orgredirect/organizations/:orgslug/explore/releases/). +- [Agents](/product/agents/) shows conversations, agent traces, and LLM calls. Open [Explore → Agents](https://sentry.io/orgredirect/organizations/:orgslug/explore/agents/). + diff --git a/docs/product/index.mdx b/docs/product/index.mdx index ded78e8dd36d6..af7677acb1d21 100644 --- a/docs/product/index.mdx +++ b/docs/product/index.mdx @@ -28,11 +28,17 @@ Monitor your mobile app build sizes for regressions before they reach users. ## Debug +### [Explore](/product/explore/) +Query and browse traces, logs, metrics, and errors from one sidebar. Saved queries remain in the sidebar when you switch datasets. Profiles, replays, releases, and agents are in the same place. + ### [Traces and Spans](/product/trace-explorer/) -Follow a request from your frontend through your backend and across services. Sentry auto-instruments common frameworks and lets you search, filter, and aggregate span data in the [Trace Explorer](/product/trace-explorer/). +Follow a request from your frontend through your backend and across services. Search, filter, and aggregate span data in [Explore → Traces](/product/trace-explorer/). + +### [Errors](/product/errors/) +Query error events across projects. [Issues](/product/issues/) groups those events for triage. Count, group, and chart the events in [Errors](/product/errors/). ### [Logs](/product/logs/) -Structured logs that live alongside your errors and traces — not in a separate tool. Search by severity, filter by properties, and click from a log line straight into the trace that produced it. [Set up Logs](/product/logs/getting-started/) +Structured logs that live alongside your errors and traces, not in a separate tool. Search by severity, filter by properties, and open the trace from a log line in [Explore → Logs](/product/logs/). [Set up Logs](/product/logs/getting-started/) ### [Agents](/product/agents/) Trace and debug agent workflows, conversations, and MCP servers. Sentry captures LLM calls, tool executions, token usage, and errors alongside the rest of your application telemetry. [Learn more →](/product/agents/) @@ -44,7 +50,7 @@ Watch video-like reproductions of user sessions on [web](/product/session-replay Go beyond "this endpoint is slow" to "this function on line 42 is slow". Continuous profiling captures CPU profiles in production so you can find hot paths without custom instrumentation. ### [Application Metrics](/product/metrics/) -Send counters, gauges, and distributions from your code to track signals like `email.sent`, `checkout.failed`, or `queue.depth`. Every metric is trace-connected. Click from a spike directly into the related traces and errors. +Send counters, gauges, and distributions from your code to track signals like `email.sent`, `checkout.failed`, or `queue.depth`. Every metric is trace-connected. Open a spike from [Explore → Metrics](/product/metrics/) and go straight to the related traces and errors. ### [Log and Trace Drains](/product/drains/) Forward logs and traces to Sentry from platforms like [Vercel](/product/drains/vercel/), [Cloudflare](/product/drains/cloudflare/), and [Heroku](/product/drains/heroku/) without modifying your application code. diff --git a/docs/product/logs/index.mdx b/docs/product/logs/index.mdx index 7dda832ec09e6..ab49b9a62bdfd 100644 --- a/docs/product/logs/index.mdx +++ b/docs/product/logs/index.mdx @@ -10,7 +10,7 @@ og_image: /og-images/product-explore-logs.png ## Overview -With Structured Logs, you can send text-based log information from your applications, whether frontend or backend, to Sentry. +With Structured Logs, you can send text-based log information from your applications, whether frontend or backend, to Sentry. Learn more about how to [Explore](/product/explore/) and [Query](/product/logs/#viewing-and-searching-logs) logs in Sentry. @@ -47,7 +47,7 @@ Raw text search is case sensitive and allows you to search for specific strings ![Raw Text Logs Search](./img/LogSearchRawText.png) **Default Properties Search** -You can also search using the default properties (like `severity`) or [additional custom properties](/concepts/search/searchable-properties/) that you've added to your log entries. +You can also search using the default properties (like `severity`) or [additional custom properties](/concepts/search/searchable-properties/logs/) that you've added to your log entries. ![Property Logs Search](./img/LogSearchTags.png) @@ -103,7 +103,7 @@ To pin or un-pin a log, click the push pin icon that appears when you hover over ## Visualizing Log Data -The Logs Explorer includes a **Visualize** panel under **Advanced** that controls the charts displayed above the log table. +The **Visualize** panel under **Advanced** controls the charts above the log table. ### Configuring Charts @@ -126,7 +126,7 @@ Use the aggregates view to identify high-volume log sources, compare payload siz ## Query Volumes -When the number of logs returned by a query is too high, there are a couple of changes to the logs explorer functionality. To reduce query volumes, consider [filtering logs](/concepts/data-management/filtering/#logs-filtering) or refining your [search query](/concepts/search/) with more specific criteria. +When a query returns too many logs, a few behaviors change in Explore. To reduce the volume, [filter logs](/concepts/data-management/filtering/#logs-filtering) or narrow the [search query](/concepts/search/). - Auto-refresh will be disabled. - Data shown in the chart will be extrapolated from a sampled amount of the complete dataset. @@ -157,11 +157,9 @@ Sentry's trace-connected logs enable a seamless debugging workflow that connects Instead of jumping between different tools and trying to correlate timestamps, trace-connected logs give you a **single flow**: Log search → log entry → trace → root cause. -## Log-based Alerts and Dashboard widgets +## Save Log Queries -You can create [Alerts](/product/monitors-and-alerts/alerts/) and [dashboard widgets](/product/dashboards/widget-builder/) based on your log queries. - -Learn more about [Alerts](/product/monitors-and-alerts/alerts/) and [custom dashboards](/product/dashboards/custom-dashboards/). +**Save as** stores the log query, adds a [dashboard widget](/product/dashboards/widget-builder/), or creates a [monitor](/product/monitors-and-alerts/monitors/). Saved and starred queries are shared across Explore. See [Save a Query](/product/explore/#save-a-query). ![Log Queries](./img/LogQueries.png) diff --git a/docs/product/metrics/index.mdx b/docs/product/metrics/index.mdx index 7f643920a9ae4..d1dac885087b2 100644 --- a/docs/product/metrics/index.mdx +++ b/docs/product/metrics/index.mdx @@ -10,7 +10,7 @@ og_image: /og-images/product-explore-metrics.png ## Overview -With Sentry's Application Metrics, you can send [counters](#counters), [gauges](#gauges), and [distributions](#distributions) from your code to track application health signals like `email.sent`, `checkout.failed`, or `queue.depth`. What makes Sentry's Application Metrics unique is that every metric event is **trace-connected**, meaning you can click directly into the related traces, logs, and errors when something looks off. +With Sentry's Application Metrics, you can send [counters](#counters), [gauges](#gauges), and [distributions](#distributions) from your code to track application health signals like `email.sent`, `checkout.failed`, or `queue.depth`. What makes Sentry's Application Metrics unique is that every metric event is **trace-connected**, meaning you can click directly into the related traces, logs, and errors when something looks off. Learn more about querying and exploring Application Metrics in [Explore](/product/explore/). @@ -66,7 +66,7 @@ Distributions record numeric values to compute statistical aggregates. ## Viewing and Exploring Application Metrics -Each metric query in the Explorer is displayed as its own block (labeled **A**, **B**, **C**, etc.) with a chart on the left and a data panel on the right. See [multiple metrics and equations](#multiple-metrics-and-equations) for more. Each block includes: +Each metric query has its own block (labeled **A**, **B**, **C**, etc.) with a chart on the left and a data panel on the right. See [multiple metrics and equations](#multiple-metrics-and-equations) for more. Each block includes: - **Metric selector** — choose the metric name (like `cart.add`, `chat.open`) - **Agg** — select the aggregation function (examples:`sum`, `avg`, `p95`) @@ -103,7 +103,7 @@ When you notice a spike or dip in the Aggregates view, switch to Samples to dril ### Multiple Metrics and Equations -You can compare several metrics side-by-side in a single Explorer view and derive new values from them without leaving the page: +Compare several metrics side-by-side in one view and derive new values from them without leaving the page: - Click **Add Metric** to add another metric query to the page. Each query gets its own panel and a short label (`A`, `B`, `C`, …) so you can reference it elsewhere. You can reorder queries by dragging their panels, and add up to 26 queries at once. - Click **Add Equation** to create a calculated series that references existing metric labels — for example, `A / B` to compute a ratio between two counters, or `A - B` to subtract a baseline from a current value. Equations appear alongside your metric queries and can be added to dashboards and monitors alongside the underlying metrics. @@ -125,9 +125,9 @@ This example demonstrates how threshold filters split one source metric into buc ## Turning Metrics Into Monitors -Any metric query you build in the Explorer can be turned into a [Monitor](/product/monitors-and-alerts/monitors/) so you get notified when its behavior changes. +Turn a metric query into a [Monitor](/product/monitors-and-alerts/monitors/) so you get notified when its behavior changes. Saved queries themselves are covered in [Explore](/product/explore/#save-a-query). -- From the **Metrics Explorer**, open **Save As → Monitor for** and choose the metric/aggregate you want to monitor. Sentry will pre-fill the Monitor with the metric, aggregate, filters, group-by, and time interval from your current query. +- From [Explore → Metrics](https://sentry.io/orgredirect/organizations/:orgslug/explore/metrics/), open **Save As → Monitor for** and choose the metric or aggregate you want to monitor. Sentry pre-fills the monitor with the metric, aggregate, filters, group-by, and time interval from your current query. When creating a [Monitor](/product/monitors-and-alerts/monitors/), **Application Metrics** is available as a dataset alongside Errors, Spans, Logs, and Releases, and there's a dedicated **Application Metrics** template in the Monitor form to get you started quickly. The Monitor detects threshold breaches, percentage changes, or dynamic anomalies on the metric and creates an issue when conditions are met — which you can then route through [Alerts](/product/monitors-and-alerts/alerts/) to Slack, PagerDuty, email, and more. @@ -135,7 +135,7 @@ When creating a [Monitor](/product/monitors-and-alerts/monitors/), **Application You can pin any metric query as a widget on a [Dashboard](/product/dashboards/) for longer-term tracking: -- From the Metrics Explorer, open **Save As → Dashboard widget** and choose the metric query you want to visualize. +- From [Explore → Metrics](https://sentry.io/orgredirect/organizations/:orgslug/explore/metrics/), open **Save As → Dashboard widget** and choose the metric query you want to visualize. - If you have multiple metric queries on the page, you can add them individually or pick **All Metrics** to create a single widget containing all of them. ## Saving Queries @@ -167,6 +167,8 @@ Application Metrics are typically sampled at 100% while traces are usually sampl ## Metric Attributes +Search these fields in Explore → Metrics with the keys in [Metric Properties](/concepts/search/searchable-properties/metrics/). + Each metric event automatically includes: | **Field** | **Description** | diff --git a/docs/product/monitors-and-alerts/monitors/uptime-monitoring/uptime-tracing.mdx b/docs/product/monitors-and-alerts/monitors/uptime-monitoring/uptime-tracing.mdx index 9b2ba878cc11e..ea8aabf4b611b 100644 --- a/docs/product/monitors-and-alerts/monitors/uptime-monitoring/uptime-tracing.mdx +++ b/docs/product/monitors-and-alerts/monitors/uptime-monitoring/uptime-tracing.mdx @@ -32,7 +32,7 @@ Sentry-Trace: 32d4011600324838afcd666edadc1d09-8d5ca7419a02ca36 ## Tracing Errors -Error tracing is enabled by default for uptime checks. When downtime is detected, an [Uptime Issue](/product/issues/issue-details/uptime-issues/) is created. You can then go to Sentry's [**Trace Explorer**](/product/trace-explorer/) page to view any related errors. +Error tracing is enabled by default for uptime checks. When downtime is detected, an [Uptime Issue](/product/issues/issue-details/uptime-issues/) is created. You can then go to [**Explore → Traces**](/product/trace-explorer/) to view any related errors. Because uptime requests won't override your SDK’s error sampling rate, some errors may not appear in traces if that rate is set to below 1. diff --git a/docs/product/profiling/index.mdx b/docs/product/profiling/index.mdx index 0ded0d4f7c7e7..d0791e0b31ee9 100644 --- a/docs/product/profiling/index.mdx +++ b/docs/product/profiling/index.mdx @@ -46,7 +46,7 @@ Sentry supports profiling for both backend and frontend use cases with two produ ## Profiling Page -On the [**Profiling**](https://sentry.io/orgredirect/organizations/:orgslug/profiling/) page, you’ll find high level metrics on the slowest functions in the selected project(s), as well as any functions that have regressed or improved in performance within the selected time range. +Open [**Profiles**](https://sentry.io/orgredirect/organizations/:orgslug/explore/profiles/) from [Explore](/product/explore/). On that page, you’ll find high level metrics on the slowest functions in the selected project(s), as well as any functions that have regressed or improved in performance within the selected time range. ![Slowest Functions and Most Regressed Functions on the Profiling page](./img/profiling-page-functions.png) diff --git a/docs/product/releases/index.mdx b/docs/product/releases/index.mdx index b7a9c70ce2e46..2c865873a5440 100644 --- a/docs/product/releases/index.mdx +++ b/docs/product/releases/index.mdx @@ -15,7 +15,7 @@ If you're looking for the latest Sentry SDK release details, head on over to -A _release_ is a version of your code deployed to an environment. When you notify Sentry about a release, you can easily identify new [issues](/product/issues/) and regressions, determine whether an issue was resolved, and monitor the health of your newly deployed app. The **Releases** page provides a visualization of your releases. It presents adoption of releases from the past 24 hours and provides a high-level view of: +A _release_ is a version of your code deployed to an environment. When you notify Sentry about a release, you can easily identify new [issues](/product/issues/) and regressions, determine whether an issue was resolved, and monitor the health of your newly deployed app. Open the **Releases** page from [Explore](https://sentry.io/orgredirect/organizations/:orgslug/explore/releases/). It presents adoption of releases from the past 24 hours and provides a high-level view of: - Each release version (a short version of the release name without the hash) - The associated project diff --git a/docs/product/sentry-basics/performance-monitoring.mdx b/docs/product/sentry-basics/performance-monitoring.mdx index 066b80ffd6dbe..d6f22518241bc 100644 --- a/docs/product/sentry-basics/performance-monitoring.mdx +++ b/docs/product/sentry-basics/performance-monitoring.mdx @@ -38,9 +38,9 @@ These appear alongside error issues in your [Issues](/product/issues/) feed, so ### Trace Explorer -The [Trace Explorer](/product/trace-explorer/) lets you query all your span data by any attribute. Find the p95 duration of a specific endpoint, identify which user segments are experiencing slowdowns, or compare a time window against your baseline to isolate regressions. +[Trace Explorer](/product/trace-explorer/) queries span data by any attribute. Find the p95 duration of a specific endpoint, identify which user segments are experiencing slowdowns, or compare a time window against your baseline to isolate regressions. -You can also calculate [span metrics](/product/trace-explorer/#span-metrics) — custom aggregations like p50, p95, and p99 durations grouped by any attribute — and use them to build [dashboards](/product/dashboards/) and [alerts](/product/monitors-and-alerts/alerts/). +You can also calculate [span metrics](/product/trace-explorer/#span-metrics), custom aggregations like p50, p95, and p99 durations grouped by any attribute, and use them to build [dashboards](/product/dashboards/) and [monitors](/product/monitors-and-alerts/monitors/). Page filters and saved queries are covered in [Explore](/product/explore/).
diff --git a/docs/product/session-replay/index.mdx b/docs/product/session-replay/index.mdx index d230773753f44..2afd16c9d2502 100644 --- a/docs/product/session-replay/index.mdx +++ b/docs/product/session-replay/index.mdx @@ -7,6 +7,8 @@ description: "Watch video-like reproductions of real user sessions to debug erro Session Replay gives you video-like reproductions of real user sessions so you can see exactly what a user did before, during, and after a bug or performance issue. Instead of guessing from stack traces and logs alone, you can watch the experience unfold — clicks, navigations, network requests, console output, and errors — all in context and synced to a timeline. +Open replays from [Explore](https://sentry.io/orgredirect/organizations/:orgslug/explore/replays/). + **Why it matters:** - **Reproduce issues without asking users** — See the exact sequence of actions that led to an error, a rage click, or a slow transaction, without needing to reproduce it locally. diff --git a/docs/product/trace-explorer/index.mdx b/docs/product/trace-explorer/index.mdx index cfdf70051369b..a3bc0102ff251 100644 --- a/docs/product/trace-explorer/index.mdx +++ b/docs/product/trace-explorer/index.mdx @@ -8,7 +8,7 @@ description: >- og_image: /og-images/product-explore-trace-explorer.png --- -The [**Trace Explorer**](https://sentry.io/orgredirect/organizations/:orgslug/traces/) in Sentry is designed to make performance investigation easier and more intuitive. You can now explore span samples, visualize span attributes, and aggregate your data with flexible queries and filters. This guide will walk you through the key concepts and features of the Trace Explorer. +[**Trace Explorer**](https://sentry.io/orgredirect/organizations/:orgslug/traces/) in Sentry is designed to make performance investigation easier and more intuitive. You can explore span samples, visualize span attributes, and aggregate your data with flexible queries and filters. This guide will walk you through the key concepts and features of Trace Explorer. To learn more about Explore as a whole, see [Explore](/product/explore/). ![Trace Explorer Screenshot](./img/Trace_Explorer_home.png) @@ -40,22 +40,16 @@ The [**Trace Explorer**](https://sentry.io/orgredirect/organizations/:orgslug/tr - **Finding problematic API calls**: Aggregate by `http.url` and filter where `avg.(span.duration) > 2s` to identify slow external API calls. - **Database query analysis**: Aggregate by `db.query` and sort by `avg(span.duration)` to find inefficient queries. -With these tools, the new Trace Explorer gives you powerful ways to understand your application's performance, identify bottlenecks, and make informed optimizations. - ### Agent Tracing -Set up Agent Tracing to capture traces for agents in Trace Explorer. [agent traces](/product/agents/) include model calls, tool executions, and token usage, so you can use the same search and aggregation tools when debugging agents. +Set up Agent Tracing to capture traces for agents in Trace Explorer. [Agent traces](/product/agents/) include model calls, tool executions, and token usage, so you can use the same search and aggregation tools when debugging agents. - **Finding slow agent runs**: Search for `span.op:gen_ai.invoke_agent` and visualize `p90(span.duration)` grouped by `gen_ai.agent.name` to compare traces for agents. - **Debugging tool calls**: Search for `span.op:gen_ai.execute_tool` and visualize `avg(span.duration)` grouped by `gen_ai.tool.name` to find tools that stall your agent. - - You plan type determines your query window: Developer: 7 days | Team: 14 days | Business: 30 days. - - ## Browsing Span and Trace Samples -Trace Explorer allows you to browse span and trace samples and inspect them. Here's how: +Browse span and trace samples, then inspect a single span or trace: 1. **Search for Samples**: - Use the search bar to filter results based on default or custom attributes, tags, and strings like `http.request_method is "GET` @@ -71,7 +65,7 @@ Trace Explorer allows you to browse span and trace samples and inspect them. Her ## Visualizing Span Attributes -Trace Explorer makes it easy to visualize metrics aggregated from any span attribute. +The Visualize section charts an aggregate of any span attribute. 1. **Set Up Visualization**: - Use the **Visualize** section to add metrics like `avg(span.duration)` or `p90(span.duration)` to the same chart by clicking **Add Series** or a different chart by clicking the **+** icon. @@ -87,7 +81,7 @@ The line chart updates dynamically as you apply filters, helping you track trend ## Aggregating Span Data -Dive deeper into your data with aggregation capabilities in Trace Explorer. +The Aggregates tab groups span data so you can compare patterns instead of reading individual spans. 1. Click into the **Aggregates** tab. @@ -115,7 +109,7 @@ This helps you quickly identify whether a latency spike, error surge, or other a ### How to Use Attribute Comparison -- On the Trace Explorer page, begin by dragging across a chart's timeline to narrow down to the time range that you want to compare. You will see an option to `Compare Attribute Breakdowns`. +- On the Traces page, drag across a chart's timeline to narrow down to the time range that you want to compare. You will see an option to `Compare Attribute Breakdowns`. - When you click on `Compare Attribute Breakdowns`, the attribute comparison charts below will load with the baseline and time range differences. Purple bars on the left are the time range values, and gray bars on the right are the baseline values. **Note:** Clicking anywhere else on the page while in *compare attributes* mode will stop the comparison and reset to baseline. @@ -170,12 +164,12 @@ Spans, logs, and application metrics are supported as join targets. ### How to Use Cross-Event Querying -1. In [Trace Explorer](https://sentry.io/orgredirect/organizations/:orgslug/traces/), click the **Plus (+)** button next to the search bar. +1. In [Traces](https://sentry.io/orgredirect/organizations/:orgslug/explore/traces/), click the **Plus (+)** button next to the search bar. 2. Choose the event type you want to join on: **Spans**, **Logs**, or **Metrics**. 3. If you chose **Metrics**, pick the specific metric you want to join on (for example, `checkout.duration`). 4. Add filters for that event type, such as `severity:error` on a logs join, `db.query:"SELECT *"` on a spans join, or `value > 5000` on a metrics join. -Trace Explorer returns spans whose trace also contains at least one event matching your join filter. +Traces returns spans whose trace also contains at least one event matching your join filter. ### Example: Backend Services That Logged Errors @@ -191,18 +185,18 @@ The span results now include only traces that also contain at least one error lo [Application Metrics](/product/metrics/) are typically sampled at 100%, while traces are sampled at a much lower rate, so a specific metric sample often won't have a trace attached to it. Joining on **Application Metrics** lets you search directly for traces that contain a matching metric event, giving you a comparable trace for the pattern you're investigating: -1. In Trace Explorer, click the **Plus (+)** next to the search bar and choose **Application Metrics**. +1. In Traces, click the **Plus (+)** next to the search bar and choose **Application Metrics**. 2. Pick the metric you want to trace back (for example, `checkout.duration`). 3. Add filters that match the pattern you're investigating — for example, `value > 5000` for slow checkouts, or a custom attribute like `region:eu` to scope by segment. 4. Pick a trace from the results. It contains at least one event of that metric matching your filter, giving you the same debugging context (spans, logs, related errors) as a trace directly attached to the metric sample would. -## Create Alerts and Dashboard Widgets From Queries or Compare Queries +## Save As Functionality -You can create Alerts and Dashboard widgets from your queries by clicking the "Save As" button: +**Save as** stores the query, adds a dashboard widget, or creates a monitor. Saved and starred queries are shared across Explore. See [Save a Query](/product/explore/#save-a-query). ![Trace Explorer Screenshot =800x](./img/trace_explorer_save.png) -You can also run side-by-side comparisons of different queries to analyze changes or differences in span data. +Run side-by-side comparisons of different queries to analyze changes in span data. Open compare from **Save as**. ## Practical Examples @@ -279,7 +273,7 @@ Since each span was sampled with different weights, Sentry extrapolates the **co 10 + 2 = 12 estimated spans ``` -Trace Explorer will display **Count: 12**. +Traces displays **Count: 12**. ### Sums @@ -289,7 +283,7 @@ Similarly, Sentry incorporates the weight into **sum**: 10 * 100ms + 2 * 200ms = 1.4s ``` -Trace Explorer will display **Sum: 1.4ms**. +Traces displays **Sum: 1.4ms**. ### Averages and Percentiles @@ -309,12 +303,12 @@ If your sampling rate is **too low** for an accurate extrapolation (for example, ![Trace Explorer Warning](./img/Trace_explorer_low_samples.png) -Even if you sample your spans, **Trace Explorer's extrapolation gives you reasonably accurate answers** for counts, averages, and percentiles -- without you needing to do anything extra. +Even if you sample your spans, extrapolation gives you reasonably accurate answers for counts, averages, and percentiles. You don't need to do anything extra. ### When to Turn Off Extrapolation While extrapolation is usually helpful, if you are exclusively looking to confirm your sampling usage or look exclusively at sampled data, you can turn off extrapolation. -You can disable extrapolation using the settings icon above charts in tools like Trace Explorer. +Disable extrapolation with the settings icon above the chart when you want the numbers to reflect only the spans Sentry stored. ### How to Tweak Client Side Sampling to Find More Samples @@ -328,10 +322,4 @@ For example, you might sample your checkout flow at 100% to catch any issues, wh To configure `tracesSampler` for your SDK, see the tracing options in your SDK's [configuration documentation](/platform-redirect/?next=/configuration/options/). -## Ingestion Delay - -Newly sent spans can take a short time to show up in Sentry. Sentry estimates this delay for your organization, so the most recent part of a chart may be marked as incomplete. Hover over an incomplete bucket to see roughly when its data should settle. Counts there may go up as the rest of the data arrives. This also applies to logs and metrics. - -![Incomplete chart data tooltip](./img/Trace_explorer_ingestion_delay.png) - -This estimate is not a guarantee. Some delays, such as data sent late from your application, can't be measured, so data may still arrive after buckets are marked as settled. +Recent spans, logs, and metrics can show up as incomplete while ingestion catches up. See [Ingestion Delay](/product/explore/#ingestion-delay). diff --git a/includes/ai-dashboards/ai-spans-view.mdx b/includes/ai-dashboards/ai-spans-view.mdx index e42b9e9156a3c..26f5aa7ffba3c 100644 --- a/includes/ai-dashboards/ai-spans-view.mdx +++ b/includes/ai-dashboards/ai-spans-view.mdx @@ -1,4 +1,4 @@ -When you click on a trace, you'll be taken to the Trace Explorer with the **AI Spans** tab selected. This view shows an abbreviated trace focused on AI-related spans: +When you click on a trace, you'll be taken to Explore → Traces with the **AI Spans** tab selected. This view shows an abbreviated trace focused on AI-related spans: ![AI Spans View =900x](./img/agent-ai-spans-view.png) diff --git a/includes/ai-dashboards/overview.mdx b/includes/ai-dashboards/overview.mdx index 44651f62f710d..6b31730879c85 100644 --- a/includes/ai-dashboards/overview.mdx +++ b/includes/ai-dashboards/overview.mdx @@ -17,4 +17,4 @@ Click into any model listed under widgets to get to the Models dashboard. Click Below these widgets is a traces table showing trace ID, agents, root duration, errors, LLM calls, tool calls, total tokens, total cost, and timestamp. -Click on any trace to open the [AI Spans view](#ai-spans-view) in Trace Explorer. +Click on any trace to open the [AI Spans view](#ai-spans-view) in Explore → Traces. diff --git a/redirects.js b/redirects.js index accaf922dca59..1b1ed74625363 100644 --- a/redirects.js +++ b/redirects.js @@ -2106,14 +2106,6 @@ const userDocsRedirects = [ source: '/product/explore/logs/:path*', destination: '/product/logs/:path*', }, - { - source: '/product/explore', - destination: '/product/trace-explorer/', - }, - { - source: '/product/explore/', - destination: '/product/trace-explorer/', - }, { source: '/platforms/javascript/best-practices/browser-extensions/', destination: '/platforms/javascript/best-practices/shared-environments/', From 955df0d732b6f24ebb442ab6916e56b78c46332c Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Thu, 8 Oct 2026 21:21:36 +0000 Subject: [PATCH 2/7] docs(search): Fix accuracy of log and metric searchable properties Co-Authored-By: Shannon Anahata --- .../concepts/search/searchable-properties/logs.mdx | 6 +++--- .../search/searchable-properties/metrics.mdx | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/concepts/search/searchable-properties/logs.mdx b/docs/concepts/search/searchable-properties/logs.mdx index 5adc4765e4348..d3cee47b93663 100644 --- a/docs/concepts/search/searchable-properties/logs.mdx +++ b/docs/concepts/search/searchable-properties/logs.mdx @@ -4,9 +4,9 @@ description: "Learn more about searchable log properties." sidebar_order: 22 --- -Search logs in [Explore → Logs](/product/logs/). The keys below are reserved. Any custom attribute you attach on the log is searchable too, using the same attribute name you set in the SDK. +Search logs in [Explore → Logs](/product/logs/). The keys below are common properties set by Sentry or the SDKs. Any custom attribute you attach on the log is searchable too, using the same attribute name you set in the SDK. -Raw text search matches `message` only, and it is case sensitive. It does not search the rest of the log. A regular expression uses `message://pattern//`. See [regular expressions](/concepts/search/#regular-expressions-logs-only). +Raw text search matches `message` only. It does not search the rest of the log. Search is case sensitive by default. Use the **Ignore case** toggle in the search bar to match regardless of case. A regular expression uses `message://pattern//`. See [regular expressions](/concepts/search/#regular-expressions-logs-only). ## Searchable Properties @@ -30,7 +30,7 @@ The parameterized template, when the SDK recorded one. For example, `Adding item One parameter from a parameterized message. `` is the parameter name or the positional index, such as `message.parameter.item` or `message.parameter.0`. -- **Type:** string +- **Type:** string or number, depending on the value the SDK sent ### `severity` diff --git a/docs/concepts/search/searchable-properties/metrics.mdx b/docs/concepts/search/searchable-properties/metrics.mdx index 4438c5e43de9b..5a6100505fb07 100644 --- a/docs/concepts/search/searchable-properties/metrics.mdx +++ b/docs/concepts/search/searchable-properties/metrics.mdx @@ -6,7 +6,7 @@ sidebar_order: 23 Search application metrics in [Explore → Metrics](/product/metrics/). Pick the metric in the metric selector, then filter with the keys below. Any custom attribute you attach on the metric is searchable too, using the same attribute name you set in the SDK. -The samples table uses shorter labels than the search bar. Search the name with `metric.name`, the type with `metric.type`, the unit with `metric.unit`, and the trace ID with `trace`. +The metric selector sets `metric.name`, `metric.type`, and `metric.unit` for you, so the search bar doesn't suggest those keys. ## Searchable Properties @@ -28,7 +28,7 @@ The metric type. One of `counter`, `gauge`, or `distribution`. ### `metric.unit` -Unit of measurement, such as `usd`, `ms`, or `bytes`. Empty when the SDK did not set one. +Unit of measurement, such as `millisecond`, `byte`, or `ratio`. SDKs can also send custom units. Empty or `none` when the SDK did not set one. - **Type:** string @@ -46,11 +46,11 @@ When the metric was recorded. ### `trace` -The trace ID for the active trace when the metric was recorded. Metrics are often sampled at 100% while traces are sampled at a lower rate, so some metric events have no trace. +The trace ID for the active trace when the metric was recorded. Every metric has a trace ID, but metrics are often sampled at 100% while traces are sampled at a lower rate, so the trace itself may not have been stored. - **Type:** string -### `span_id` +### `sentry.span_id` The span the metric was recorded on. Empty when no span was active. @@ -58,13 +58,13 @@ The span the metric was recorded on. Empty when no span was active. ### `trace.parent_span_id` -The parent span ID sent by some SDKs for the same association as `span_id`. +The parent span ID sent by some SDKs for the same association as `sentry.span_id`. - **Type:** string ### `transaction` -The name of the transaction or segment that was active when the metric was recorded. +The name of the transaction or segment that was active when the metric was recorded, when the SDK set one. - **Type:** string @@ -88,7 +88,7 @@ The environment set in the SDK, such as `development`, `staging`, or `production ### `release` -The release set in the SDK. `release:latest` selects the most recent release. [Learn more](/product/releases/usage/sorting-filtering/#latest-release). +The release set in the SDK. [Learn more](/product/releases/). - **Type:** string From 0c471d91d75e2a11ae041c5031c71a0e1d867af3 Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 16:39:10 +0000 Subject: [PATCH 3/7] docs(explore): Align dropped data descriptions with product and fix links Co-Authored-By: Shannon Anahata --- docs/product/explore/dropped-data.mdx | 66 ++++++++++++++++----------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/docs/product/explore/dropped-data.mdx b/docs/product/explore/dropped-data.mdx index 1a9a6d9495916..a67d0a6202450 100644 --- a/docs/product/explore/dropped-data.mdx +++ b/docs/product/explore/dropped-data.mdx @@ -6,6 +6,12 @@ description: >- Learn how to investigate and troubleshoot dropped data in Sentry. --- + + +Dropped data is in limited early access. It's only available to organizations that Sentry has invited to try it. + + + When data is ingested into Sentry, it can be dropped for a number of reasons. Sample rate, queue overflow, inbound filters, and invalid or malformed data are some top examples for why data might be dropped. @@ -13,6 +19,8 @@ dropped. ## Troubleshooting Dropped Data Traces, Logs, and Application Metrics charts in [Explore](/product/explore/) can show data that Sentry did not store. Hover over the dropped data line at the bottom of the chart to see the summary. Click on the line to see the details and troubleshoot. +The dropped data line leaves out data you chose to drop: inbound filters, `before_send`, and `sample_rate`. These reasons still appear in the details list. + Below are all the possible reasons why data might be dropped. They correspond with the title you will see when exploring dropped data in Sentry. Each reason includes what happened, why it happens, and what to change so less data is dropped. @@ -42,14 +50,14 @@ Reason code: `queue_overflow`. Your application is generating events faster than the SDK can buffer and send them. The SDK allows a limited number of operations in flight at once. Beyond that, new events are dropped immediately rather than queued. -- **Short:** SDK send queue was full. +- **Short:** SDK's send queue was full. - **Causes:** - Application code sending events in a tight loop, for example an exception inside a `while` loop. - Requests to Sentry are slow or hanging. A proxy, firewall, misconfigured Relay, or a request without a timeout can cause this. - **Actions:** - Confirm that requests to Sentry are completing. - Look for suspect code, including async work that does not finish inside [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) filters. - - If this volume of events is expected, [contact Sentry support](https://sentry.zendesk.com/hc/en-us). + - If this volume of events is expected, [contact Sentry support](https://www.sentry.help/en/). #### Buffer Overflow @@ -97,12 +105,14 @@ The event reached Sentry and Sentry rejected it with an error status. Reason code: `before_send`. -Your [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) function, or your [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) config, omitted the event. If that was not intentional, check your Sentry config. +Your [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) function omitted the event. If that was not intentional, check your Sentry config. -- **Short:** Event dropped by your before-send function. See [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). +Before JavaScript SDK v11, spans dropped by [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) are also reported under this reason. Starting with v11, they're reported as [Ignored Spans](#ignored-spans). + +- **Short:** Event dropped by your before send function. See [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). - **Causes:** - Your before-send filter is behaving as written. - - [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) omitted spans before they were sent. + - Before JavaScript SDK v11, [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) omitted spans before they were sent. - Application code in a before-send hook returned `false` or `null`. - **Actions:** - Update [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) if it is blocking spans you want to receive. @@ -114,7 +124,11 @@ Reason code: `ignore_spans`. Spans matched an ignore rule in your SDK configuration and were not sent. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). -- **Short:** Span dropped by your ignored-spans configuration. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). +{/* TODO: Update this copy when SDK versions that emit ignore_spans are widely adopted. */} + +This reason is only reported in span-first mode, which is the default starting with JavaScript SDK v11. In earlier versions, ignored spans are reported as [Before Send](#before-send). + +- **Short:** Span dropped by your ignored spans configuration. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). - **Causes:** - [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) omitted specific spans before they were sent to Sentry. - **Actions:** @@ -147,7 +161,7 @@ This indicates a bug or an infrastructure problem during ingestion. During healt - A problem in Sentry's ingestion service. - **Actions:** - Check the [Sentry status page](https://status.sentry.io/) for an ongoing incident. - - [Contact Sentry support](https://sentry.zendesk.com/hc/en-us) if this happens at a high rate. + - [Contact Sentry support](https://www.sentry.help/en/) if this happens at a high rate. #### Invalid Dynamic Sampling Context @@ -155,13 +169,13 @@ Reason code: `invalid_dsc`. The trace ID in the metadata header did not match the trace ID on the spans. -- **Short:** Trace header did not match the spans that were sent. +- **Short:** Trace header did not match the spans sent. - **Causes:** - A custom implementation of Sentry's transport protocol. - An outdated SDK. - **Actions:** - If you use an official Sentry SDK, upgrade to the latest version. This is not fixable through configuration. - - [Contact Sentry support](https://sentry.zendesk.com/hc/en-us) if this continues after the upgrade. + - [Contact Sentry support](https://www.sentry.help/en/) if this continues after the upgrade. #### Invalid JSON @@ -169,14 +183,14 @@ Reason code: `invalid_json`. Sentry could not parse the event that was sent. -- **Short:** Event rejected because the JSON was invalid. +- **Short:** Event rejected due to invalid JSON. - **Causes:** - A truncated or incomplete payload. - Unescaped control characters or non-UTF-8 bytes in string fields. - A mismatch between the body encoding and the declared `Content-Encoding`. - **Actions:** - If you send payloads directly, log the raw body on failure and parse it locally. Confirm that envelope item length headers match the actual byte lengths. - - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://sentry.zendesk.com/hc/en-us) if it continues. + - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://www.sentry.help/en/) if it continues. #### Invalid Transaction @@ -190,7 +204,7 @@ The transaction was valid JSON, but Sentry could not accept its contents. - A negative duration, where the end timestamp is before the start timestamp. - **Actions:** - Verify clock synchronization (NTP) on the hosts that send the data. [Clock skew](/concepts/key-terms/tracing/distributed-tracing/#clock-skew) across machines can produce timestamps Sentry rejects. - - Check whether the affected transactions are backdated. Sentry does not ingest transactions older than the accepted window. + - Check whether the affected transactions are backdated. Sentry does not ingest transactions older than the accepted window. See [How far back can errors and transactions be backdated?](https://www.sentry.help/en/articles/13964214-how-far-back-can-errors-and-transactions-be-backdated-when-uploaded-to-sentry) #### Missing Dynamic Sampling Context @@ -203,19 +217,19 @@ The envelope contained spans and no trace header. - An outdated SDK. - A custom implementation of Sentry's transport protocol. - **Actions:** - - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://sentry.zendesk.com/hc/en-us) if it continues. - - If you are not running a custom SDK and upgrading does not help, [contact Sentry support](https://sentry.zendesk.com/hc/en-us). + - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + - If you are not running a custom SDK and upgrading does not help, [contact Sentry support](https://www.sentry.help/en/). #### Too Large Event Reason code: `too_large:event`. -The event exceeded the maximum payload size. The same limit applies to other item types, with a reason code such as `too_large:log` or `too_large:span`. The sections below cover the common types. +The event exceeded the maximum payload size. The same limit applies to every item type, with a reason code such as `too_large:log` or `too_large:span`. Attachments are broken down further by attachment type, such as `too_large:attachment:minidump`. The sections below cover the common types. -- **Short:** The event exceeded the maximum payload size. +- **Short:** The event exceeded maximum payload size. - **Causes:** - Very deep stack traces, typically from recursion or stack-overflow errors. - - Too much data attached with `setContext`, or other large payloads. + - Too much data in `contexts` (for example, set with `setContext`) or added as `extra`. - **Actions:** - Trim the payload in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). That lets you drop the largest fields and still keep the event. @@ -225,7 +239,7 @@ Reason code: `too_large:log`. The log exceeded the maximum payload size. -- **Short:** The log exceeded the maximum payload size. +- **Short:** The log event exceeded maximum payload size. - **Causes:** - Large attributes or messages, such as request bodies or application configuration. - **Actions:** @@ -238,7 +252,7 @@ Reason code: `too_large:span`. The span exceeded the maximum payload size. -- **Short:** The span exceeded the maximum payload size. +- **Short:** The span event exceeded maximum payload size. - **Causes:** - Large span attributes, such as a full request body instead of individual HTTP fields. - Large context windows from AI agents attached to spans. @@ -251,7 +265,7 @@ Reason code: `too_large:trace_metric`. The metric event exceeded the maximum payload size. -- **Short:** The application metric exceeded the maximum payload size. +- **Short:** The application metric event exceeded maximum payload size. - **Causes:** - Large metric attributes, such as a full request body instead of individual fields. - **Actions:** @@ -263,7 +277,7 @@ Reason code: `too_large:transaction`. The transaction exceeded the maximum payload size. Transactions carry their spans inline, so size usually comes from span count rather than one large field. -- **Short:** The transaction exceeded the maximum payload size. +- **Short:** The transaction exceeded maximum payload size. - **Causes:** - A very high number of spans on one transaction. - Long span descriptions, large span attributes, or both. @@ -279,13 +293,13 @@ Sentry throttled requests or dropped events after they arrived. Your requests were throttled by Sentry's edge protection, not by a quota. The limit applies to a single DSN key and to all data types, for the duration Sentry returned in `Retry-After`. -- **Short:** Requests across all event types were rate limited. +- **Short:** Your requests across all event types were rate limited. - **Causes:** - A very high request rate from one DSN key. A runaway loop, or a retry storm after a batch of failures, is a common cause. - A project with legitimately high traffic hitting the rate limit. - **Actions:** - Look for a loop or retry storm. Check whether the burst lines up with a deploy. - - If this volume is expected, [contact Sentry support](https://sentry.zendesk.com/hc/en-us) or your account manager. + - If this volume is expected, [contact Sentry support](https://www.sentry.help/en/) or your account manager. #### Project Abuse Limit @@ -293,13 +307,13 @@ Reason code: `project_abuse_limit`. Your project exceeded Sentry's abuse limit for a data type. This is a short-window rate limit. It is not your billing quota and it is not spike protection. -- **Short:** Events of one data type exceeded the project abuse limit. +- **Short:** Your events exceeded the project abuse limit. - **Causes:** - A very high rate of one telemetry type on a project. An error emitted in a tight loop can trigger this. - A project with legitimately high traffic hitting the abuse limit. - **Actions:** - Look for a loop or retry storm. Check whether the burst lines up with a deploy. - - If this volume is expected, [contact Sentry support](https://sentry.zendesk.com/hc/en-us) or your account manager. + - If this volume is expected, [contact Sentry support](https://www.sentry.help/en/) or your account manager. #### Spike Protection @@ -307,7 +321,7 @@ Reason code: `spike-protection`. [Spike protection](/pricing/quotas/spike-protection/) detected a sudden increase in event volume for this project and dropped events so the spike would not consume your quota. -- **Short:** Spike protection dropped events to preserve quota. See [Spike Protection](/pricing/quotas/spike-protection/). +- **Short:** Spike protection dropped events to preserve your quota. See [Spike Protection](/pricing/quotas/spike-protection/). - **Causes:** - A sudden increase in volume for one project. - A low-volume or newly created project. Thresholds are derived partly from recent history. From f4a482411c0572ee184527b70022992e6251405a Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 16:50:20 +0000 Subject: [PATCH 4/7] docs(explore): Match dropped data headings to product titles Co-Authored-By: Shannon Anahata --- docs/product/explore/dropped-data.mdx | 54 +++++++++++++-------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/product/explore/dropped-data.mdx b/docs/product/explore/dropped-data.mdx index a67d0a6202450..eebc47a33d603 100644 --- a/docs/product/explore/dropped-data.mdx +++ b/docs/product/explore/dropped-data.mdx @@ -29,7 +29,7 @@ Each reason includes what happened, why it happens, and what to change so less d The SDK dropped the data before it left your application. -#### Backpressure +#### SDK Backpressure Drop Reason code: `backpressure`. @@ -44,7 +44,7 @@ Your SDK detected that it was under load and reduced trace sampling so telemetry - Check for unusual increases in application traffic or span volume around the time backpressure occurred. - Look for instrumentation that produces unexpectedly large numbers of spans, such as N+1 queries, tight loops, or high-frequency operations. -#### Queue Overflow +#### SDK Queue Overflow Reason code: `queue_overflow`. @@ -59,7 +59,7 @@ Your application is generating events faster than the SDK can buffer and send th - Look for suspect code, including async work that does not finish inside [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) filters. - If this volume of events is expected, [contact Sentry support](https://www.sentry.help/en/). -#### Buffer Overflow +#### SDK Buffer Overflow Reason code: `buffer_overflow`. @@ -71,7 +71,7 @@ A fixed-size in-memory buffer in the SDK reached its limit and dropped data. Thi - **Actions:** - For replays, record less. Use [block or ignore](/platforms/javascript/session-replay/privacy/#blocking) to skip high-churn elements, `blockAllMedia` for heavy media, [`mutationLimit`](/platforms/javascript/session-replay/configuration/#mutation-limits) to cap mutation storms from animations or infinite scroll, and [`maxReplayDuration`](/platforms/javascript/session-replay/configuration/#general-integration-configuration) to shorten sessions. If canvas recording is enabled, lower its sampling rate and quality. -#### Network Error +#### Unretried Network Error Reason code: `network_error`. @@ -87,7 +87,7 @@ The request failed without a response. Ad blockers and browser extensions are a - For browsers, confirm in devtools that requests to your ingest domain are not blocked, and check your CORS configuration. - For servers, verify outbound connectivity to your ingest domain from the host or container. -#### Send Error +#### SDK Send Failure Reason code: `send_error`. @@ -101,13 +101,13 @@ The event reached Sentry and Sentry rejected it with an error status. - Enable debug mode in your SDK and look for `Sentry responded with status code 413`. The log identifies which events were rejected. - Reduce the size of those events. Trim large objects in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend), and lower `maxValueLength`, `normalizeDepth`, or `maxBreadcrumbs` as needed. -#### Before Send +#### Dropped by Before Send Reason code: `before_send`. Your [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) function omitted the event. If that was not intentional, check your Sentry config. -Before JavaScript SDK v11, spans dropped by [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) are also reported under this reason. Starting with v11, they're reported as [Ignored Spans](#ignored-spans). +Before JavaScript SDK v11, spans dropped by [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) are also reported under this reason. Starting with v11, they're reported as [Dropped by Ignored Spans](#dropped-by-ignored-spans). - **Short:** Event dropped by your before send function. See [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). - **Causes:** @@ -118,7 +118,7 @@ Before JavaScript SDK v11, spans dropped by [`ignoreSpans`](/platform-redirect/? - Update [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) if it is blocking spans you want to receive. - Correct before-send logic that is omitting spans unintentionally. -#### Ignored Spans +#### Dropped by Ignored Spans Reason code: `ignore_spans`. @@ -126,7 +126,7 @@ Spans matched an ignore rule in your SDK configuration and were not sent. See [` {/* TODO: Update this copy when SDK versions that emit ignore_spans are widely adopted. */} -This reason is only reported in span-first mode, which is the default starting with JavaScript SDK v11. In earlier versions, ignored spans are reported as [Before Send](#before-send). +This reason is only reported in span-first mode, which is the default starting with JavaScript SDK v11. In earlier versions, ignored spans are reported as [Dropped by Before Send](#dropped-by-before-send). - **Short:** Span dropped by your ignored spans configuration. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). - **Causes:** @@ -134,7 +134,7 @@ This reason is only reported in span-first mode, which is the default starting w - **Actions:** - Update [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) if it is blocking spans you want to receive. -#### Sample Rate +#### Dropped by Sample Rate Reason code: `sample_rate`. @@ -150,7 +150,7 @@ Events were dropped because of the sample rate configured in the SDK. Sentry received the payload and could not accept it. -#### Internal +#### Sentry Processing Error Reason code: `internal`. @@ -163,7 +163,7 @@ This indicates a bug or an infrastructure problem during ingestion. During healt - Check the [Sentry status page](https://status.sentry.io/) for an ongoing incident. - [Contact Sentry support](https://www.sentry.help/en/) if this happens at a high rate. -#### Invalid Dynamic Sampling Context +#### Invalid Trace Context Reason code: `invalid_dsc`. @@ -177,7 +177,7 @@ The trace ID in the metadata header did not match the trace ID on the spans. - If you use an official Sentry SDK, upgrade to the latest version. This is not fixable through configuration. - [Contact Sentry support](https://www.sentry.help/en/) if this continues after the upgrade. -#### Invalid JSON +#### Malformed JSON Payload Reason code: `invalid_json`. @@ -192,7 +192,7 @@ Sentry could not parse the event that was sent. - If you send payloads directly, log the raw body on failure and parse it locally. Confirm that envelope item length headers match the actual byte lengths. - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://www.sentry.help/en/) if it continues. -#### Invalid Transaction +#### Invalid Transaction Data Reason code: `invalid_transaction`. @@ -206,7 +206,7 @@ The transaction was valid JSON, but Sentry could not accept its contents. - Verify clock synchronization (NTP) on the hosts that send the data. [Clock skew](/concepts/key-terms/tracing/distributed-tracing/#clock-skew) across machines can produce timestamps Sentry rejects. - Check whether the affected transactions are backdated. Sentry does not ingest transactions older than the accepted window. See [How far back can errors and transactions be backdated?](https://www.sentry.help/en/articles/13964214-how-far-back-can-errors-and-transactions-be-backdated-when-uploaded-to-sentry) -#### Missing Dynamic Sampling Context +#### Missing Trace Context Reason code: `missing_dsc`. @@ -220,7 +220,7 @@ The envelope contained spans and no trace header. - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://www.sentry.help/en/) if it continues. - If you are not running a custom SDK and upgrading does not help, [contact Sentry support](https://www.sentry.help/en/). -#### Too Large Event +#### Event Payload Too Large Reason code: `too_large:event`. @@ -233,7 +233,7 @@ The event exceeded the maximum payload size. The same limit applies to every ite - **Actions:** - Trim the payload in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). That lets you drop the largest fields and still keep the event. -#### Too Large Log +#### Log Payload Too Large Reason code: `too_large:log`. @@ -246,7 +246,7 @@ The log exceeded the maximum payload size. - Trim the payload in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). - Do not attach an entire large JSON payload as log attributes. Pick the fields you need. -#### Too Large Span +#### Span Payload Too Large Reason code: `too_large:span`. @@ -259,7 +259,7 @@ The span exceeded the maximum payload size. - **Actions:** - Trim the payload in [`beforeSendSpan`](/platform-redirect/?next=/configuration/options/#beforeSendSpan). -#### Too Large Application Metric +#### Application Metric Payload Too Large Reason code: `too_large:trace_metric`. @@ -271,7 +271,7 @@ The metric event exceeded the maximum payload size. - **Actions:** - Audit attributes on application metrics. Set the specific parameters you need, not an entire HTTP request object. -#### Too Large Transaction +#### Transaction Payload Too Large Reason code: `too_large:transaction`. @@ -289,7 +289,7 @@ The transaction exceeded the maximum payload size. Transactions carry their span Sentry throttled requests or dropped events after they arrived. -#### Generic +#### Generic Rate Limit Your requests were throttled by Sentry's edge protection, not by a quota. The limit applies to a single DSN key and to all data types, for the duration Sentry returned in `Retry-After`. @@ -330,7 +330,7 @@ Reason code: `spike-protection`. - Find what caused the spike. Sort the project's issues by event count over the affected window, and check whether it lines up with a deploy. - Turn spike protection on or off per project in settings. See [Spike Protection](/pricing/quotas/spike-protection/). -#### Quota +#### Quota Exceeded Reason code: `usage_exceeded`. @@ -360,7 +360,7 @@ The transaction name matched Sentry's [health check filter](/concepts/data-manag - **Actions:** - Turn the filter off in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/) if you want these transactions. -#### Error Message +#### Error Message Filter Reason code: `error-message`. @@ -372,7 +372,7 @@ The event matched a custom glob in your error-message filter. See [custom filter - **Actions:** - If events you expect are missing, review the glob in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). -#### Release Version +#### Release Version Filter Reason code: `release-version`. @@ -384,7 +384,7 @@ The event's release matched a custom release filter. See [custom filtering](/con - **Actions:** - If events you expect are missing, review the release rule in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). -#### IP Addresses +#### IP Address Filter Reason code: `ip-addresses`. @@ -396,7 +396,7 @@ The event matched an IP range in a custom filter. See [IP address filters](/conc - **Actions:** - If events you expect are missing, review the IP rule in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). -#### Legacy Browsers +#### Legacy Browser Filter Reason code: `legacy-browsers`. @@ -409,7 +409,7 @@ The browser matched the [legacy browser filter](/concepts/data-management/filter - **Actions:** - If the dropped browsers are ones your users actually use, review the legacy browser list in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/) and turn individual browsers off. -#### Web Crawlers +#### Web Crawler Filter Reason code: `web-crawlers`. From 60f72dc824f373ce0b0d73dc6c4ef7fb2888e22d Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Fri, 16 Oct 2026 22:43:42 +0000 Subject: [PATCH 5/7] docs(explore): Add missing dropped data reasons and fix reason codes Co-Authored-By: Shannon Anahata --- docs/product/explore/dropped-data.mdx | 1604 ++++++++++++++++++++++--- 1 file changed, 1461 insertions(+), 143 deletions(-) diff --git a/docs/product/explore/dropped-data.mdx b/docs/product/explore/dropped-data.mdx index eebc47a33d603..a73f7eca3db98 100644 --- a/docs/product/explore/dropped-data.mdx +++ b/docs/product/explore/dropped-data.mdx @@ -19,11 +19,90 @@ dropped. ## Troubleshooting Dropped Data Traces, Logs, and Application Metrics charts in [Explore](/product/explore/) can show data that Sentry did not store. Hover over the dropped data line at the bottom of the chart to see the summary. Click on the line to see the details and troubleshoot. -The dropped data line leaves out data you chose to drop: inbound filters, `before_send`, and `sample_rate`. These reasons still appear in the details list. +The dropped data line leaves out data you chose to drop: everything in [Client Sampled](#category-client-sampled) and [Inbound Filters](#category-inbound-filters), plus [Disallowed Origin](#disallowed-origin), [Missing Signature](#missing-signature), and [DSN Rate Limit](#dsn-rate-limit). These reasons still appear in the details list. Below are all the possible reasons why data might be dropped. They correspond with the title you will see when exploring dropped data in Sentry. -Each reason includes what happened, why it happens, and what to change so less data is dropped. +Each reason includes what happened, why it happens, and what to change so less data is dropped. Reasons marked **Legacy** are no longer reported by current Sentry ingestion, so you'll only see them in older data. + +### Category: Client Sampled + +The SDK dropped the data on purpose, because of your configuration or an SDK default. In Sentry, these reasons currently appear under **Client Discard**. + +#### Dropped by Before Send + +Reason code: `before_send`. + +Your [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) function omitted the event. If that was not intentional, check your Sentry config. + +Before JavaScript SDK v11, spans dropped by [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) are also reported under this reason. Starting with v11, they're reported as [Dropped by Ignored Spans](#dropped-by-ignored-spans). + +- **Short:** Event dropped by your before send function. See [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). +- **Causes:** + - Your before-send filter is behaving as written. + - Before JavaScript SDK v11, [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) omitted spans before they were sent. + - Application code in a before-send hook returned `false` or `null`. +- **Actions:** + - Update [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) if it is blocking spans you want to receive. + - Correct before-send logic that is omitting spans unintentionally. + +#### Dropped by Ignored Spans + +Reason code: `ignored`. + +Spans matched an ignore rule in your SDK configuration and were not sent. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). + +{/* TODO: Update this copy when SDK versions that emit ignored are widely adopted. */} + +This reason is only reported in span-first mode, which is the default starting with JavaScript SDK v11. In earlier versions, ignored spans are reported as [Dropped by Before Send](#dropped-by-before-send). + +- **Short:** Span dropped by your ignored spans configuration. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). +- **Causes:** + - [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) omitted specific spans before they were sent to Sentry. +- **Actions:** + - Update [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) if it is blocking spans you want to receive. + +#### Dropped by Sample Rate + +Reason code: `sample_rate`. + +Events were dropped because of the sample rate configured in the SDK. + +- **Short:** Event dropped by your configured sample rate. +- **Causes:** + - The sample rate in your SDK config. See [`tracesSampleRate`](/platform-redirect/?next=/configuration/options/#tracesSampleRate). +- **Actions:** + - Raise the sample rate if you want more events sampled. + +#### Missing Parent Span + +Reason code: `no_parent_span`. + +Your SDK skipped a span because no parent span was active when it started. For automatically traced `fetch` and XHR requests, this is default SDK behavior. + +- **Short:** Span skipped because no parent span was active. +- **Causes:** + - A `fetch` or XHR request ran while no span was active. The JavaScript SDK skips those request spans by default. + - Your code started a span with the `onlyIfParent` option while no parent span was active. +- **Actions:** + - For automatic `fetch` and XHR spans, you usually don't need to do anything. + - Wrap the work in a parent span if you need it traced. + +#### Event Processor + +Reason code: `event_processor`. + +Your SDK dropped data in an event processor, a step that can change or discard data before it's sent. This includes filters you configure, your own custom event processors, and built-in ones like the Dedupe integration. + +- **Short:** Dropped by an SDK event processor. +- **Causes:** + - In JavaScript, the event matched your [`ignoreErrors`](/platform-redirect/?next=/configuration/options/#ignoreErrors) or [`ignoreTransactions`](/platform-redirect/?next=/configuration/options/#ignoreTransactions) filter, or a custom event processor you added discarded it. + - A built-in default dropped it. For example, the Dedupe integration removed a duplicate, or the JavaScript SDK filtered a known noisy error or an error with no message, type, or stack trace. + - In the Cocoa SDK, a profile had fewer than two samples. +- **Actions:** + - If the drops are unexpected, review your `ignoreErrors`, `ignoreTransactions`, and custom event processors. + - If you need that data, turn off the Dedupe integration or the JavaScript SDK's default filters in your SDK setup. + - For Cocoa profiles with too few samples, you usually don't need to do anything. ### Category: Client Discard @@ -101,50 +180,97 @@ The event reached Sentry and Sentry rejected it with an error status. - Enable debug mode in your SDK and look for `Sentry responded with status code 413`. The log identifies which events were rejected. - Reduce the size of those events. Trim large objects in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend), and lower `maxValueLength`, `normalizeDepth`, or `maxBreadcrumbs` as needed. -#### Dropped by Before Send +#### Cache Overflow -Reason code: `before_send`. +Reason code: `cache_overflow`. -Your [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) function omitted the event. If that was not intentional, check your Sentry config. +Your SDK deleted data it had cached offline, usually the oldest items once the cache reached its limit. The offline cache holds data the SDK could not send yet, so long offline periods can fill it. -Before JavaScript SDK v11, spans dropped by [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) are also reported under this reason. Starting with v11, they're reported as [Dropped by Ignored Spans](#dropped-by-ignored-spans). +- **Short:** SDK's offline cache was full. +- **Causes:** + - In the Java and Cocoa SDKs, the offline cache reached its `maxCacheItems` limit, so the oldest items were deleted. + - In the .NET SDK, sending a cached item failed with an unexpected error. +- **Actions:** + - Increase [`maxCacheItems`](/platform-redirect/?next=/configuration/options/#maxCacheItems) in your SDK options to keep more data while offline. + - Confirm the device can reach Sentry so cached data is sent before the cache fills. -- **Short:** Event dropped by your before send function. See [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). +#### Internal SDK Error + +Reason code: `internal_sdk_error`. + +Your SDK dropped data because of an error inside the SDK itself, such as a Session Replay buffer or web worker failure, or a failure building the request to Sentry. + +- **Short:** SDK hit an internal error. - **Causes:** - - Your before-send filter is behaving as written. - - Before JavaScript SDK v11, [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) omitted spans before they were sent. - - Application code in a before-send hook returned `false` or `null`. + - In JavaScript, the Session Replay event buffer failed, for example because its web worker crashed. + - In Python, the async transport was called with no running event loop. This is often caused by app shutdown timing rather than an SDK bug. + - In Go, the SDK failed to build the payload or HTTP request to send to Sentry. - **Actions:** - - Update [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) if it is blocking spans you want to receive. - - Correct before-send logic that is omitting spans unintentionally. + - Update to the latest version of your SDK. + - If you use Python's async transport, check whether the drops happen while your app is shutting down. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues. -#### Dropped by Ignored Spans +#### Insufficient Data -Reason code: `ignore_spans`. +Reason code: `insufficient_data`. -Spans matched an ignore rule in your SDK configuration and were not sent. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). +Your SDK dropped data that didn't have enough content to send, such as a profile with too few samples. This is often expected for very short operations. + +- **Short:** Not enough data to send. +- **Causes:** + - In the Python SDK, a profile captured fewer than two samples, usually because the profiled operation was very short. + - In the Cocoa SDK, a session replay could not be packaged for sending. + - In the Cocoa SDK, a user feedback submission was invalid. +- **Actions:** + - For very short profiled operations, you usually don't need to do anything. + - Update the Cocoa SDK if replays or feedback are being dropped. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues. -{/* TODO: Update this copy when SDK versions that emit ignore_spans are widely adopted. */} +#### Failed SDK Validation -This reason is only reported in span-first mode, which is the default starting with JavaScript SDK v11. In earlier versions, ignored spans are reported as [Dropped by Before Send](#dropped-by-before-send). +Reason code: `invalid`. -- **Short:** Span dropped by your ignored spans configuration. See [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans). +Your SDK dropped data that failed its own checks before sending, such as a replay that ran too long, a child span left open when its parent ended, or a malformed log or metric. The SDK made this decision, not Sentry's servers. + +- **Short:** Data failed the SDK's validation checks. - **Causes:** - - [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) omitted specific spans before they were sent to Sentry. + - In JavaScript, a child span was still open when its parent span ended. + - In JavaScript, a session replay passed its maximum duration by the time it was sent, often because the browser was suspended. + - In .NET, a structured log's message template failed to format, or a metric had an empty name or an unsupported value type. - **Actions:** - - Update [`ignoreSpans`](/platform-redirect/?next=/configuration/options/#ignoreSpans) if it is blocking spans you want to receive. + - End child spans before ending their parent span. + - For overlong replays after a suspended browser, you usually don't need to do anything. + - Fix log message templates that fail to format, and metrics with an empty name or unsupported value type. -#### Dropped by Sample Rate +#### Callback Error -Reason code: `sample_rate`. +Reason code: `callback_error`. -Events were dropped because of the sample rate configured in the SDK. +Your SDK dropped data because one of your callbacks, such as `beforeSend`, `tracesSampler`, or a custom event processor, threw an error while handling it. -- **Short:** Event dropped by your configured sample rate. +- **Short:** An SDK callback threw an error. - **Causes:** - - The sample rate in your SDK config. See [`tracesSampleRate`](/platform-redirect/?next=/configuration/options/#tracesSampleRate). + - A [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend) callback, or a similar hook for transactions, replays, feedback, logs, or metrics, threw an error. + - A [`tracesSampler`](/platform-redirect/?next=/configuration/options/#tracesSampler) function threw an error while making a sampling decision. + - A custom event processor threw an error while processing the event. - **Actions:** - - Raise the sample rate if you want more events sampled. + - Find the callback that threw and fix the error. An error in any of these callbacks drops the data. + +#### SDK Rate-Limit Backoff + +Reason code: `ratelimit_backoff`. + +Your SDK discarded data locally while backing off, usually because Sentry had earlier told it to pause sending that data type. The real cause is whatever triggered that original limit. + +- **Short:** SDK backed off due to a rate limit. +- **Causes:** + - Your organization ran out of quota for that data type, or [spike protection](#spike-protection) started during a sudden surge. + - Your [DSN rate limit](#dsn-rate-limit), your [project abuse limit](#project-abuse-limit), or a [generic rate limit](#generic-rate-limit) was hit. + - The SDK's own internal rate limiter dropped the data. +- **Actions:** + - Find which limit triggered the backoff, such as quota, spike protection, or a DSN rate limit, and fix it there. + - Reduce traffic, adjust sampling, or increase your quota so you stay within your limits. + - Avoid sudden event spikes, such as errors sent in a tight loop. ### Category: Invalid or Malformed @@ -177,6 +303,20 @@ The trace ID in the metadata header did not match the trace ID on the spans. - If you use an official Sentry SDK, upgrade to the latest version. This is not fixable through configuration. - [Contact Sentry support](https://www.sentry.help/en/) if this continues after the upgrade. +#### Missing Trace Context + +Reason code: `missing_dsc`. + +The envelope contained spans and no trace header. + +- **Short:** Envelope was missing the required trace header. +- **Causes:** + - An outdated SDK. + - A custom implementation of Sentry's transport protocol. +- **Actions:** + - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + - If you are not running a custom SDK and upgrading does not help, [contact Sentry support](https://www.sentry.help/en/). + #### Malformed JSON Payload Reason code: `invalid_json`. @@ -206,219 +346,1397 @@ The transaction was valid JSON, but Sentry could not accept its contents. - Verify clock synchronization (NTP) on the hosts that send the data. [Clock skew](/concepts/key-terms/tracing/distributed-tracing/#clock-skew) across machines can produce timestamps Sentry rejects. - Check whether the affected transactions are backdated. Sentry does not ingest transactions older than the accepted window. See [How far back can errors and transactions be backdated?](https://www.sentry.help/en/articles/13964214-how-far-back-can-errors-and-transactions-be-backdated-when-uploaded-to-sentry) -#### Missing Trace Context +#### Invalid Timestamp -Reason code: `missing_dsc`. +Reason code: `timestamp`. -The envelope contained spans and no trace header. +Sentry dropped data because its timestamp was missing or outside the accepted ingestion window, or because a span had a missing or reversed start and end time. -- **Short:** Envelope was missing the required trace header. +- **Short:** Event timestamp was too far in the past or future. +- **Causes:** + - The clock on the device or host that sent the data is wrong. + - The data was backdated past the accepted window, for example when an offline device sends cached data much later. + - A span's end time is missing or earlier than its start time. +- **Actions:** + - Verify clock synchronization (NTP) on the hosts and devices that send the data. + - Check custom instrumentation that sets span start or end times manually. + +#### Disallowed Origin + +Reason code: `cors`. + +The request's `Origin` or `Referer` header isn't in the project's [Allowed Domains](/concepts/data-management/filtering/#allowed-domains). Because this is a setting you control, it's left out of the dropped data line. + +- **Short:** Origin not in project's Allowed Domains. +- **Causes:** + - Your app is served from a domain that isn't in the list, such as a new domain, a staging site, or a preview deployment. + - Another site is loading your script and sending events with your DSN. +- **Actions:** + - If the origin is expected, add it to your project's [Allowed Domains](/concepts/data-management/filtering/#allowed-domains). + +#### Invalid or Disabled Project + +Reason code: `project_id`. + +Sentry couldn't match the request to an active project. The project ID in the DSN didn't match its key, or the project or key is disabled. + +- **Short:** DSN mismatch or disabled project or key. +- **Causes:** + - The DSN in your SDK config is mistyped, outdated, or from a different project. + - The project was deleted, or the client key was disabled or removed. +- **Actions:** + - Copy the DSN from [Client Keys (DSN)](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/keys/) and confirm the key is enabled. + +#### Invalid Event ID + +Reason code: `invalid_event_id`. + +Sentry dropped an item with a malformed or missing event ID, such as an attachment sent without one. + +- **Short:** Event ID was malformed or missing. - **Causes:** + - Custom upload code that does not set a valid event ID. - An outdated SDK. - - A custom implementation of Sentry's transport protocol. - **Actions:** - - If you use an official Sentry SDK, upgrade to the latest version. [Contact Sentry support](https://www.sentry.help/en/) if it continues. - - If you are not running a custom SDK and upgrading does not help, [contact Sentry support](https://www.sentry.help/en/). + - Update your SDK, or fix custom upload code so every item has a valid event ID. -#### Event Payload Too Large +#### Request Too Large -Reason code: `too_large:event`. +Reason code: `request_too_large`. -The event exceeded the maximum payload size. The same limit applies to every item type, with a reason code such as `too_large:log` or `too_large:span`. Attachments are broken down further by attachment type, such as `too_large:attachment:minidump`. The sections below cover the common types. +The whole request was over the endpoint's size limit, or a log, span, or metric batch was over the parsing limit. This is different from the `too_large:` reasons, which apply to a single item. -- **Short:** The event exceeded maximum payload size. +- **Short:** Request exceeded a size or parsing limit. - **Causes:** - - Very deep stack traces, typically from recursion or stack-overflow errors. - - Too much data in `contexts` (for example, set with `setContext`) or added as `extra`. + - The SDK or exporter batched too much data into one request. - **Actions:** - - Trim the payload in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). That lets you drop the largest fields and still keep the event. + - Send smaller payloads or batches, for example by flushing more often. -#### Log Payload Too Large +#### Feature Disabled -Reason code: `too_large:log`. +Reason code: `feature_disabled`. -The log exceeded the maximum payload size. +Sentry dropped data that needs a feature that isn't enabled for this organization or project, such as PlayStation crash reports, minidump uploads, or logs sent over OpenTelemetry (OTLP). -- **Short:** The log event exceeded maximum payload size. +- **Short:** Feature not enabled for org or project. - **Causes:** - - Large attributes or messages, such as request bodies or application configuration. + - Your app sends a data type, such as OTLP logs, before that feature is enabled for your organization or project. - **Actions:** - - Trim the payload in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). - - Do not attach an entire large JSON payload as log attributes. Pick the fields you need. + - Enable the feature for your organization or project, or stop sending that data. -#### Span Payload Too Large +#### Duplicate ID -Reason code: `too_large:span`. +Reason code: `duplicate`. -The span exceeded the maximum payload size. +Sentry dropped a span whose span ID repeated another span in the same envelope (one SDK upload). Sentry keeps the later one. -- **Short:** The span event exceeded maximum payload size. +- **Short:** Span ID repeated in the same envelope. - **Causes:** - - Large span attributes, such as a full request body instead of individual HTTP fields. - - Large context windows from AI agents attached to spans. + - Custom instrumentation that reuses span IDs. + - An outdated SDK. - **Actions:** - - Trim the payload in [`beforeSendSpan`](/platform-redirect/?next=/configuration/options/#beforeSendSpan). + - Make sure each span ID is unique, and update your SDK. -#### Application Metric Payload Too Large +#### Duplicate Envelope Item -Reason code: `too_large:trace_metric`. +Reason code: `duplicate_item`. -The metric event exceeded the maximum payload size. +Sentry dropped items from an envelope that had more than one event or check-in, or repeated or mixed log, span, or metric batches. -- **Short:** The application metric event exceeded maximum payload size. +- **Short:** Envelope had duplicate or mixed items. - **Causes:** - - Large metric attributes, such as a full request body instead of individual fields. + - An outdated SDK. + - Custom code that builds envelopes. - **Actions:** - - Audit attributes on application metrics. Set the specific parameters you need, not an entire HTTP request object. + - Update your SDK. If you build envelopes yourself, send at most one event or check-in, and one batch of each kind, per envelope. -#### Transaction Payload Too Large +#### Unsupported Envelope Item -Reason code: `too_large:transaction`. +Reason code: `invalid_envelope`. -The transaction exceeded the maximum payload size. Transactions carry their spans inline, so size usually comes from span count rather than one large field. +Sentry dropped an envelope item that was not allowed or supported in that envelope. -- **Short:** The transaction exceeded maximum payload size. +- **Short:** Envelope item was not allowed or supported. - **Causes:** - - A very high number of spans on one transaction. - - Long span descriptions, large span attributes, or both. + - An outdated SDK. + - Custom code that builds envelopes with item types Sentry doesn't accept. - **Actions:** - - Trim the payload in [`beforeSendTransaction`](/platform-redirect/?next=/configuration/options/#beforeSendTransaction). - - Reduce span volume at the source. Address N+1 query patterns, or narrow auto-instrumentation that creates a span per database call. + - Update your SDK, or fix custom code that builds envelopes. -### Category: Rate Limited +#### No Data -Sentry throttled requests or dropped events after they arrived. +Reason code: `no_data`. -#### Generic Rate Limit +Sentry received the request, but nothing valid was left to store after validation. For example, every item in a log, span, or metric batch was invalid. -Your requests were throttled by Sentry's edge protection, not by a quota. The limit applies to a single DSN key and to all data types, for the duration Sentry returned in `Retry-After`. +- **Short:** No valid data was left after validation. +- **Causes:** + - An outdated SDK. + - Custom code that sends empty or fully invalid batches. +- **Actions:** + - Update your SDK, and check custom code that builds batches. -- **Short:** Your requests across all event types were rate limited. +#### Invalid Span + +Reason code: `invalid_span`. + +Sentry dropped a span that was missing required fields or had an invalid span or trace ID. + +- **Short:** Span was missing fields or had a bad ID. - **Causes:** - - A very high request rate from one DSN key. A runaway loop, or a retry storm after a batch of failures, is a common cause. - - A project with legitimately high traffic hitting the rate limit. + - Custom instrumentation or an OpenTelemetry exporter sending spans without valid IDs, start times, or end times. + - An outdated SDK. - **Actions:** - - Look for a loop or retry storm. Check whether the burst lines up with a deploy. - - If this volume is expected, [contact Sentry support](https://www.sentry.help/en/) or your account manager. + - Update your SDK. If you send spans over OTLP, check that every span has valid IDs and timestamps. -#### Project Abuse Limit +#### Invalid Log -Reason code: `project_abuse_limit`. +Reason code: `invalid_log`. -Your project exceeded Sentry's abuse limit for a data type. This is a short-window rate limit. It is not your billing quota and it is not spike protection. +Sentry dropped a log that was missing a required field after normalization, such as a timestamp or level. -- **Short:** Your events exceeded the project abuse limit. +- **Short:** Log was missing a required field. - **Causes:** - - A very high rate of one telemetry type on a project. An error emitted in a tight loop can trigger this. - - A project with legitimately high traffic hitting the abuse limit. + - Custom log ingestion, such as a log drain or OTLP exporter, sending logs without a timestamp or level. - **Actions:** - - Look for a loop or retry storm. Check whether the burst lines up with a deploy. - - If this volume is expected, [contact Sentry support](https://www.sentry.help/en/) or your account manager. + - Fix custom log ingestion so every log includes a timestamp and level. -#### Spike Protection +#### Invalid Metric -Reason code: `spike-protection`. +Reason code: `invalid_trace_metric`. -[Spike protection](/pricing/quotas/spike-protection/) detected a sudden increase in event volume for this project and dropped events so the spike would not consume your quota. +Sentry dropped an application metric that had no name, or an unsupported type or value. -- **Short:** Spike protection dropped events to preserve your quota. See [Spike Protection](/pricing/quotas/spike-protection/). +- **Short:** Metric had no name or a bad type or value. - **Causes:** - - A sudden increase in volume for one project. - - A low-volume or newly created project. Thresholds are derived partly from recent history. - - A real traffic spike, such as a badly behaved bot. + - Code that emits metrics with an empty name or a non-numeric value. - **Actions:** - - Find what caused the spike. Sort the project's issues by event count over the affected window, and check whether it lines up with a deploy. - - Turn spike protection on or off per project in settings. See [Spike Protection](/pricing/quotas/spike-protection/). + - Give every metric a name and a supported type and value. -#### Quota Exceeded +#### Invalid Check-In -Reason code: `usage_exceeded`. +Reason code: `invalid_check_in`. -Your organization's [quota](/pricing/quotas/) for this data category was fully consumed, and no pay-as-you-go budget remained. +Sentry dropped a [cron](/product/monitors-and-alerts/monitors/crons/) check-in with an empty monitor slug, or an environment name over 64 characters. -- **Short:** Your organization hit its quota for this event type. +- **Short:** Check-in had a bad slug or environment. - **Causes:** - - Reserved monthly volume for this category was consumed. - - Newly enabled instrumentation started sending a category you had not budgeted for. + - A check-in sent without a monitor slug. + - A long, generated environment name. - **Actions:** - - Lower sampling rates or add [inbound filters](/concepts/data-management/filtering/) so the same overrun does not happen next period. - - Raise pay-as-you-go spend or reserved volume if the growth is expected. See [quotas](/pricing/quotas/). + - Set a monitor slug, and shorten the environment name to 64 characters or less. -### Category: Inbound Filters +#### Invalid Span Attachment -A [project inbound filter](/concepts/data-management/filtering/) dropped the event when Sentry received it. Filtered events do not count toward quota. +Reason code: `invalid_span_attachment`. -#### Filtered Transaction +Sentry dropped a span attachment that had invalid item headers or metadata, or no matching span. + +- **Short:** Span attachment had no matching span. +- **Causes:** + - The attachment was sent without the span it belongs to. + - An outdated SDK. +- **Actions:** + - Update your SDK, and send span attachments together with their span. -Reason code: `filtered_transaction`. +#### Invalid Trace Attachment -The transaction name matched Sentry's [health check filter](/concepts/data-management/filtering/#transactions-coming-from-health-check), which drops endpoints such as `/health`, `/healthz`, `/ping`, and `/ready`. This filter is on by default. +Reason code: `invalid_trace_attachment`. -- **Short:** Transaction matched the default health check filter. See [health check filtering](/concepts/data-management/filtering/#transactions-coming-from-health-check). +Sentry dropped a trace attachment that had invalid item headers or metadata. + +- **Short:** Trace attachment metadata was invalid. - **Causes:** - - The health check filter is enabled by default on Sentry projects. + - An outdated SDK. + - Custom code that builds trace attachments. - **Actions:** - - Turn the filter off in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/) if you want these transactions. + - Update your SDK, or fix custom code that sets trace attachment metadata. -#### Error Message Filter +#### Invalid Replay -Reason code: `error-message`. +Reason code: `invalid_replay`. -The event matched a custom glob in your error-message filter. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). +Sentry dropped a [session replay](/product/session-replay/) event that was malformed or missing required IDs. -- **Short:** Event message matched one of your custom filters. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). +- **Short:** Replay event was malformed or missing IDs. - **Causes:** - - A filter you configured. + - An outdated Replay SDK. - **Actions:** - - If events you expect are missing, review the glob in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - Update the Replay SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. -#### Release Version Filter +#### Empty Replay Event -Reason code: `release-version`. +Reason code: `invalid_replay_no_payload`. -The event's release matched a custom release filter. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). +Sentry dropped a replay event that contained no data. -- **Short:** Event release matched one of your custom filters. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). +- **Short:** Replay event contained no data. - **Causes:** - - A filter you configured. + - An outdated Replay SDK. - **Actions:** - - If events you expect are missing, review the release rule in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - Update the Replay SDK. -#### IP Address Filter +#### Replay Scrubbing Failed -Reason code: `ip-addresses`. +Reason code: `invalid_replay_pii_scrubber_failed`. -The event matched an IP range in a custom filter. See [IP address filters](/concepts/data-management/filtering/#ip-addresses). +**Legacy:** Sentry couldn't scrub sensitive data from a replay event, so it dropped the event. -- **Short:** Event IP address matched one of your custom filters. See [IP address filters](/concepts/data-management/filtering/#ip-addresses). +- **Short:** PII scrubbing of the replay event failed. - **Causes:** - - A filter you configured. + - A replay event that Sentry's data scrubber could not process. - **Actions:** - - If events you expect are missing, review the IP rule in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - No action is needed for historical data. -#### Legacy Browser Filter +#### Invalid Replay Recording -Reason code: `legacy-browsers`. +Reason code: `invalid_replay_recording`. -The browser matched the [legacy browser filter](/concepts/data-management/filtering/#legacy-browser-filters). That filter drops events from older browsers that tend to produce broken telemetry. +Sentry couldn't parse or decompress a replay recording while scrubbing it, so it dropped the recording. -- **Short:** Browser matched your legacy browser filter. See [legacy browser filters](/concepts/data-management/filtering/#legacy-browser-filters). +- **Short:** Replay recording could not be parsed. - **Causes:** - - Bots spoofing old user agents. - - People connecting from old browsers, such as a kiosk that still runs an old browser. + - An outdated Replay SDK. + - A proxy or custom transport that modified the recording. - **Actions:** - - If the dropped browsers are ones your users actually use, review the legacy browser list in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/) and turn individual browsers off. + - Update the Replay SDK. -#### Web Crawler Filter +#### Invalid Replay Video -Reason code: `web-crawlers`. +Reason code: `invalid_replay_video`. -The user agent matched [Sentry's list of known web crawlers](/concepts/data-management/filtering/#web-crawler-errors). +Sentry dropped a mobile replay video that was empty or could not be decoded. -- **Short:** User agent matched Sentry's known crawler list. See [web crawler filters](/concepts/data-management/filtering/#web-crawler-errors). +- **Short:** Replay video was empty or undecodable. - **Causes:** - - Bot traffic to your site. - - A user agent that matches the generic patterns. Any agent containing "bot" or "spider" as a word is filtered. + - An outdated mobile SDK. + - The video was cut off before it was sent, for example because the app was closed. - **Actions:** - - Leave the filter on when you do not need crawler errors. - - To capture crawler-triggered errors, turn the filter off under [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - Update your mobile SDK. + +#### Replay Missing Recording + +Reason code: `invalid_replay_missing_recording`. + +Sentry dropped a replay event that arrived without its recording in the same envelope. + +- **Short:** Replay event arrived without its recording. +- **Causes:** + - An outdated Replay SDK that sends the event and recording separately. +- **Actions:** + - Update the Replay SDK so both are sent together. + +#### Missing Event Payload + +Reason code: `no_event_payload`. + +Sentry dropped a crash report or profile that arrived without the event it belongs to. + +- **Short:** Crash or profile was missing its event. +- **Causes:** + - An outdated SDK. + - Custom upload code that sends the crash or profile without its event. +- **Actions:** + - Update your SDK, or fix custom upload code. + +#### Unprocessable Crash Payload + +Reason code: `payload`. + +Sentry couldn't process crash data from a game console, such as a Nintendo Switch dying message or a PlayStation crash dump. + +- **Short:** Console crash data could not be processed. +- **Causes:** + - The crash data was incomplete or modified before upload. + - An outdated console SDK. +- **Actions:** + - Update your console SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### Missing Minidump Upload + +Reason code: `missing_minidump_upload`. + +Sentry rejected a minidump upload because no minidump file was attached. + +- **Short:** Minidump upload had no minidump file. +- **Causes:** + - The crash reporter sent the file under the wrong form field name. +- **Actions:** + - Send the crash file in the `upload_file_minidump` form field. + +#### Invalid Minidump + +Reason code: `invalid_minidump`. + +Sentry rejected a minidump that didn't start with a valid minidump (`MDMP`) file header. + +- **Short:** Minidump lacked a valid file header. +- **Causes:** + - The uploaded file isn't a minidump, or it was modified before upload. +- **Actions:** + - Check that your crash reporter uploads an unmodified minidump. + +#### Unreadable Request Body + +Reason code: `invalid_body`. + +Sentry could not read the body of a raw minidump upload, for example because the stream was cut off. + +- **Short:** Minidump upload body could not be read. +- **Causes:** + - The upload was interrupted, or a proxy changed the body. +- **Actions:** + - Check the crash reporter and any proxy between it and Sentry. + +#### Invalid Compression + +Reason code: `invalid_compression`. + +Sentry could not decompress a minidump (gzip, zstd, bzip2, or xz) or an Unreal Engine crash report. + +- **Short:** Crash file could not be decompressed. +- **Causes:** + - The file was compressed with an unsupported format, or the compressed data is corrupt. +- **Actions:** + - Check the crash reporter or tool that compresses and sends the file. + +#### Invalid Multipart Upload + +Reason code: `invalid_multipart`. + +Sentry could not parse a multipart form-data upload, such as a minidump upload. + +- **Short:** Multipart upload could not be parsed. +- **Causes:** + - A malformed form-data body, or a proxy that changed it. +- **Actions:** + - Check the crash reporter and any proxy between it and Sentry. + +#### Nesting Too Deep + +Reason code: `nesting_too_deep`. + +Sentry rejected a crash upload because its form-data keys were nested more than 15 levels deep. + +- **Short:** Form-data keys nested over 15 levels deep. +- **Causes:** + - Custom crash upload code that sends deeply nested form field names. +- **Actions:** + - Flatten the form fields you send with the crash upload. + +#### Invalid MessagePack + +Reason code: `invalid_msgpack`. + +Sentry couldn't parse the MessagePack-encoded event or breadcrumbs attached to a native crash upload. + +- **Short:** Crash event or breadcrumbs failed to parse. +- **Causes:** + - An outdated native SDK. + - The crash files were modified or cut off before upload. +- **Actions:** + - Update your native SDK. + +#### Invalid OTLP Protobuf + +Reason code: `invalid_proto`. + +Sentry couldn't decode an OpenTelemetry (OTLP) payload sent as protobuf. + +- **Short:** OTLP protobuf payload could not be decoded. +- **Causes:** + - The exporter's protocol doesn't match what it sends, such as JSON sent with a protobuf content type. + - The request body was cut off or changed by a proxy. +- **Actions:** + - Check that your exporter's protocol setting and `Content-Type` header match, and that nothing between the exporter and Sentry changes the body. + +#### Invalid Unreal Report + +Reason code: `invalid_unreal_report`. + +**Legacy:** Sentry couldn't read an Unreal Engine crash report sent to the Unreal endpoint. Current Sentry ingestion reports this as [Unreal Processing Failed](#unreal-processing-failed). + +- **Short:** Unreal report unreadable; not recorded. +- **Causes:** + - An incomplete or invalid Unreal crash report. +- **Actions:** + - No action is needed for historical data. + +#### Unreal Processing Failed + +Reason code: `process_unreal`. + +Sentry couldn't extract an Unreal Engine crash report sent to the Unreal endpoint. + +- **Short:** Unreal crash report couldn't be read. +- **Causes:** + - The Crash Reporter uploaded an incomplete or invalid report. +- **Actions:** + - Check that the Crash Reporter uploads a complete, valid report. + +#### Missing PlayStation Dump + +Reason code: `missing_prosperodump_upload`. + +Sentry rejected a PlayStation crash upload because no `.prosperodmp` file was attached. + +- **Short:** PlayStation upload had no .prosperodmp. +- **Causes:** + - The upload didn't include the crash dump file. +- **Actions:** + - Include the `.prosperodmp` file in the upload. + +#### Invalid PlayStation Dump + +Reason code: `invalid_prosperodump`. + +Sentry rejected a PlayStation crash dump that had an invalid file header. + +- **Short:** PlayStation dump had an invalid header. +- **Causes:** + - The uploaded file isn't a PlayStation crash dump, or it was modified before upload. +- **Actions:** + - Check that you upload an unmodified crash dump. + +#### Invalid Security Report + +Reason code: `security_report`. + +Sentry rejected a security report, such as a CSP report, whose JSON didn't match the expected report format. + +- **Short:** CSP report didn't match expected format. +- **Causes:** + - A browser, extension, or custom code sent a report that doesn't follow the specification. +- **Actions:** + - These reports are usually browser-generated, so you usually don't need to do anything. If you send reports yourself, check them against the specification. + +#### Unrecognized Security Report Type + +Reason code: `security_report_type`. + +Sentry couldn't tell what kind of security report this was, so it dropped it. + +- **Short:** Security report type wasn't recognized. +- **Causes:** + - The report was missing the data that identifies its type, or used a type Sentry doesn't support. +- **Actions:** + - Send only supported security report types, such as CSP reports. + +#### Unsupported Protocol Version + +Reason code: `auth_version`. + +**Legacy:** Sentry dropped data sent with an unsupported Sentry protocol version in its auth header. + +- **Short:** Legacy: unsupported protocol version. +- **Causes:** + - A very old SDK. +- **Actions:** + - Update your SDK. + +#### Unsupported Content Type + +Reason code: `content_type`. + +**Legacy:** Sentry dropped a request whose `Content-Type` isn't allowed for that endpoint. + +- **Short:** Legacy: unsupported content type. +- **Causes:** + - Custom code that sends the wrong content type. +- **Actions:** + - Send the content type the endpoint expects. + +#### Empty Request Body + +Reason code: `empty_body`. + +**Legacy:** Sentry received a request with an empty body, so there was nothing to ingest. + +- **Short:** Request body was empty. +- **Causes:** + - An SDK or proxy forwarded a request without its body. +- **Actions:** + - Check the SDK and any proxy forwarding requests to Sentry. + +#### Transaction Attachment + +Reason code: `transaction_attachment`. + +**Legacy:** Sentry dropped an attachment that was sent with a transaction. + +- **Short:** Legacy: attachment sent with transaction. +- **Causes:** + - An older SDK that attached files to transactions. +- **Actions:** + - No action is needed for historical data. + +#### Dynamic Sampling (Legacy) + +Reason code: `transaction_sampled`. + +**Legacy:** [Dynamic sampling](/organization/dynamic-sampling/) dropped an envelope that contained only a transaction. Current dynamic sampling drops are reported as [Dynamic Sampling](#dynamic-sampling) under Inbound Filters. Because this is expected sampling, it's left out of the dropped data line. + +- **Short:** Legacy: dropped by dynamic sampling. +- **Causes:** + - The dynamic sampling rules in effect at the time. +- **Actions:** + - No action is needed for historical data. + +#### Internal Envelope + +Reason code: `internal_envelope`. + +**Legacy:** Sentry rejected an envelope that contained items meant only for internal integrations. + +- **Short:** Envelope had internal-only items. +- **Causes:** + - Custom code that sent integration data, such as OTLP data, inside a regular envelope. +- **Actions:** + - Send that data to its integration endpoint, such as the OTLP endpoint. + +#### Project Config Unreadable + +Reason code: `project_state`. + +**Legacy:** Sentry couldn't read this project's configuration, so it dropped the data. This is a Sentry-side issue. + +- **Short:** Project config couldn't be read. +- **Causes:** + - A problem in Sentry's ingestion service. +- **Actions:** + - [Contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### Data Scrubbing Config Error + +Reason code: `project_state_pii`. + +**Legacy:** Sentry couldn't convert this project's data scrubbing settings, so it dropped the data. This is a Sentry-side issue. + +- **Short:** Data scrubbing config failed to convert. +- **Causes:** + - A problem in Sentry's ingestion service. +- **Actions:** + - [Contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### Project Unavailable + +Reason code: `project_unavailable`. + +Sentry couldn't load the project's configuration in time and rejected the upload. This should be close to zero when Sentry is healthy. + +- **Short:** Project config couldn't load in time. +- **Causes:** + - A temporary problem in Sentry's ingestion service. +- **Actions:** + - The SDK may retry. Check the [Sentry status page](https://status.sentry.io/), and [contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### Queue Failed + +Reason code: `queue_failed`. + +**Legacy:** Sentry's internal queue was full, so it dropped the data. Current Sentry ingestion reports this as [Sentry Processing Error](#sentry-processing-error). + +- **Short:** Sentry queue full; shown as internal. +- **Causes:** + - A problem in Sentry's ingestion service. +- **Actions:** + - No action is needed for historical data. + +#### Upload Failed + +Reason code: `upload_failed`. + +Sentry couldn't store an attachment. This is a Sentry-side issue and should be close to zero when Sentry is healthy. + +- **Short:** Sentry couldn't store an attachment. +- **Causes:** + - A problem in Sentry's storage service. +- **Actions:** + - Check the [Sentry status page](https://status.sentry.io/), and [contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### Invalid Signature + +Reason code: `invalid_signature`. + +Sentry rejected data from a [Relay](/product/relay/) that isn't registered with your organization, or whose signature has expired. + +- **Short:** Relay signature unknown or expired. +- **Causes:** + - The Relay's public key isn't registered in your organization settings. + - The Relay's clock is wrong, so its signatures look expired. +- **Actions:** + - [Register the Relay's key](/product/relay/getting-started/#registering-relay-with-sentry) and check its clock. + +#### Missing Signature + +Reason code: `missing_signature`. + +Your project only accepts data through trusted [Relays](/product/relay/), and this data arrived without a Relay signature. Because this is a setting you control, it's left out of the dropped data line. + +- **Short:** Unsigned data bypassed trusted Relays. +- **Causes:** + - An SDK is sending directly to Sentry instead of through your Relay. +- **Actions:** + - Point the SDK at your Relay, or review the trusted Relays setting in your organization's security settings. + +#### Event Payload Too Large + +Reason code: `too_large:event`. + +The event exceeded the maximum payload size. Other item types have their own reason codes, such as `too_large:log` or `too_large:span`, and attachments are broken down by attachment type, such as `too_large:attachment:minidump`. Each one is listed below. + +- **Short:** The event exceeded maximum payload size. +- **Causes:** + - Very deep stack traces, typically from recursion or stack-overflow errors. + - Too much data in `contexts` (for example, set with `setContext`) or added as `extra`. +- **Actions:** + - Trim the payload in [`beforeSend`](/platform-redirect/?next=/configuration/options/#beforeSend). That lets you drop the largest fields and still keep the event. + +#### Log Payload Too Large + +Reason code: `too_large:log`. + +The log exceeded the maximum payload size. + +- **Short:** The log event exceeded maximum payload size. +- **Causes:** + - Large attributes or messages, such as request bodies or application configuration. +- **Actions:** + - Trim the payload in [`beforeSendLog`](/platform-redirect/?next=/configuration/options/#beforeSendLog). + - Do not attach an entire large JSON payload as log attributes. Pick the fields you need. + +#### Span Payload Too Large + +Reason code: `too_large:span`. + +The span exceeded the maximum payload size. + +- **Short:** The span event exceeded maximum payload size. +- **Causes:** + - Large span attributes, such as a full request body instead of individual HTTP fields. + - Large context windows from AI agents attached to spans. +- **Actions:** + - Trim the payload in [`beforeSendSpan`](/platform-redirect/?next=/configuration/options/#beforeSendSpan). + +#### Application Metric Payload Too Large + +Reason code: `too_large:trace_metric`. + +The metric event exceeded the maximum payload size. + +- **Short:** The application metric event exceeded maximum payload size. +- **Causes:** + - Large metric attributes, such as a full request body instead of individual fields. +- **Actions:** + - Audit attributes on application metrics. Set the specific parameters you need, not an entire HTTP request object. + +#### Transaction Payload Too Large + +Reason code: `too_large:transaction`. + +The transaction exceeded the maximum payload size. Transactions carry their spans inline, so size usually comes from span count rather than one large field. + +- **Short:** The transaction exceeded maximum payload size. +- **Causes:** + - A very high number of spans on one transaction. + - Long span descriptions, large span attributes, or both. +- **Actions:** + - Trim the payload in [`beforeSendTransaction`](/platform-redirect/?next=/configuration/options/#beforeSendTransaction). + - Reduce span volume at the source. Address N+1 query patterns, or narrow auto-instrumentation that creates a span per database call. + +#### Profile Payload Too Large + +Reason code: `too_large:profile`. + +The profile exceeded the maximum payload size. + +- **Short:** The profile event exceeded maximum payload size. +- **Causes:** + - A long-running transaction profile with many samples or deep stacks. +- **Actions:** + - Profile shorter operations, or lower your profile sample rate. + +#### Profile Chunk Too Large + +Reason code: `too_large:profile_chunk`. + +A [continuous profiling](/product/profiling/) chunk was over the size limit, or too many chunks were sent in one envelope. + +- **Short:** Profile chunk over size or count limit. +- **Causes:** + - Very deep stacks or many threads in one chunk. + - An outdated SDK that batches too many chunks together. +- **Actions:** + - Update your SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### Replay Event Too Large + +Reason code: `too_large:replay_event`. + +The replay metadata event was over the size limit. + +- **Short:** Replay metadata event over size limit. +- **Causes:** + - Large tags, contexts, or other metadata attached to the replay. +- **Actions:** + - Reduce the tags and context data you attach to replays. + +#### Replay Recording Too Large + +Reason code: `too_large:replay_recording`. + +A replay recording segment was over the size limit. + +- **Short:** Replay recording over size limit. +- **Causes:** + - Pages with large or rapidly changing DOMs, or heavy media. +- **Actions:** + - Record less, using the same options as [SDK Buffer Overflow](#sdk-buffer-overflow). + +#### Replay Video Too Large + +Reason code: `too_large:replay_video`. + +A mobile replay segment's video was over the size limit. + +- **Short:** Mobile replay video over size limit. +- **Causes:** + - High replay quality settings or long segments. +- **Actions:** + - Lower the replay quality option in your mobile SDK to reduce video size. + +#### Check-In Too Large + +Reason code: `too_large:check_in`. + +A cron check-in was over the size limit, or too many check-ins were sent in one envelope. + +- **Short:** Cron check-in over size or count limit. +- **Causes:** + - Large monitor config or context sent with the check-in. + - Custom code that batches several check-ins together. +- **Actions:** + - Send one check-in per envelope, and keep monitor config small. + +#### Session Update Too Large + +Reason code: `too_large:session`. + +Session updates in the envelope were over the size or count limit. Session updates and session aggregates in the same envelope count toward a shared limit. + +- **Short:** Too many or too large session updates. +- **Causes:** + - An SDK that sends many session updates at once, for example after a long offline period. +- **Actions:** + - Update your SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### Session Aggregates Too Large + +Reason code: `too_large:sessions`. + +Session aggregates in the envelope were over the size or count limit. Session updates and session aggregates in the same envelope count toward a shared limit. + +- **Short:** Too many or too large session aggregates. +- **Causes:** + - A server SDK that sends a very large number of aggregated sessions at once. +- **Actions:** + - Update your SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### Legacy User Feedback Too Large + +Reason code: `too_large:user_report`. + +A user report from the legacy User Feedback API went over the attachment limits it shares with other attachments. + +- **Short:** User report hit shared attachment limits. +- **Causes:** + - Other attachments sent in the same envelope pushed it over the limit. +- **Actions:** + - Move to the current [User Feedback](/product/user-feedback/) API, and send fewer or smaller attachments. + +#### User Feedback Too Large + +Reason code: `too_large:user_report_v2`. + +A user feedback submission was over the event size limit. + +- **Short:** User feedback over event size limit. +- **Causes:** + - A very long feedback message, or large tags or context attached to the feedback. +- **Actions:** + - Reduce the context and tags you attach to feedback. + +#### Security Event Too Large + +Reason code: `too_large:security`. + +A security event, such as a forwarded CSP report, was over the event size limit. + +- **Short:** Forwarded CSP event over size limit. +- **Causes:** + - Custom code or a proxy that forwards very large security reports. +- **Actions:** + - Trim the reports before forwarding them. + +#### Security Report Too Large + +Reason code: `too_large:raw_security`. + +A browser security report, such as a CSP violation, was larger than the event size limit. These reports are browser-generated and rarely need action. + +- **Short:** Browser security report over size limit. +- **Causes:** + - A browser sent a very large report, for example with a long script sample. +- **Actions:** + - You usually don't need to do anything. + +#### Unreal Crash Report Too Large + +Reason code: `too_large:unreal_report`. + +An Unreal Engine crash report was over the size limit. + +- **Short:** Unreal crash report over size limit. +- **Causes:** + - Large minidumps or logs included in the crash report. +- **Actions:** + - Reduce the data included in crash reports, such as full memory dumps and long logs. + +#### Form Data Too Large + +Reason code: `too_large:form_data`. + +The form fields sent with a crash upload, such as a minidump upload, were over the size limit. + +- **Short:** Crash upload form fields over size limit. +- **Causes:** + - Large context or extra data sent as form fields with the crash. +- **Actions:** + - Send less data in the crash upload's form fields. + +#### Client Report Too Large + +Reason code: `too_large:client_report`. + +The SDK's client report, its summary of data it dropped, was over the size or count limits. A lone client report records nothing here, so this only appears when other items in the same envelope were dropped with it. It points to an SDK problem rather than your data. + +- **Short:** SDK's client report exceeded its limits. +- **Causes:** + - An SDK problem produced an oversized client report, or too many client reports in one envelope. +- **Actions:** + - Update your SDK to the latest version. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues after updating. + +#### Legacy Custom Metrics Too Large + +Reason code: `too_large:statsd`. + +**Legacy:** Sentry rejected custom metrics sent in the old statsd format because they were over the size limit. Sentry no longer accepts this format. + +- **Short:** Legacy statsd metrics over size limit. +- **Causes:** + - Your SDK sent custom metrics in the statsd format with a payload over the size limit. +- **Actions:** + - Migrate to [Application Metrics](/product/metrics/). + - No action is needed for historical data. + +#### Metric Buckets Too Large + +Reason code: `too_large:metric_buckets`. + +Sentry rejected metric buckets sent by a downstream [Relay](/product/relay/) because they were over the size limit, or because more than one was sent in the same envelope. SDKs never send metric buckets, so this comes from Relay-to-Relay traffic. + +- **Short:** Relay metric buckets over size limit. +- **Causes:** + - The sending Relay's batches were larger than the receiving limit. + - More than one metric buckets item was sent in the same envelope. +- **Actions:** + - Check the version and configuration of the Relay that sent the data. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### Integration Payload Too Large + +Reason code: `too_large:integration`. + +Sentry rejected an OpenTelemetry (OTLP), Vercel log drain, or Network Error Logging (NEL) payload because it was over the size limit. This is rare, because those endpoints usually refuse oversized requests before this check. + +- **Short:** OTLP, Vercel, or NEL payload too large. +- **Causes:** + - Integration data sent directly in an envelope was too large, such as a large exporter or log drain batch. + - An envelope carried more than one integration item of the same kind. +- **Actions:** + - Send smaller batches from your exporter or drain. + - If you build envelopes yourself, include at most one integration logs item and one spans item per envelope. + +#### Unknown Item Too Large + +Reason code: `too_large:unknown`. + +**Legacy:** Sentry rejected an item of a type that Relay didn't recognize because it was over the size limit. Current Relay versions no longer report this reason, so it only appears in historical data or from older Relays, such as ones you run yourself. + +- **Short:** Unrecognized item type over size limit. +- **Causes:** + - An older Relay received an item of a type it did not recognize that was over the size limit. +- **Actions:** + - Update your SDK and any Relay you run to current versions. + +#### Attachment Too Large + +Reason code: `too_large:attachment:attachment`. + +Sentry rejected an envelope because an attachment was over the size limit, or because there were too many attachments. The whole envelope is rejected, including the event the attachments belong to. + +- **Short:** Attachment over size or count limit. +- **Causes:** + - A single attachment is over the per-attachment size limit. + - The envelope held too many attachments, or too much attachment data in total. + - A multipart upload's attachments together went over the total size limit. +- **Actions:** + - Send fewer or smaller attachments. + +#### Minidump Too Large + +Reason code: `too_large:attachment:minidump`. + +Sentry rejected a crash minidump because it was over the attachment size limit, which is checked on upload and again after decompression. + +- **Short:** Minidump over attachment size limit. +- **Causes:** + - The minidump captures a lot of memory, making it too large once decompressed. + - Other attachments sent with the minidump pushed it over the shared attachment limits. +- **Actions:** + - Capture smaller minidumps, for example without full memory. + - Send fewer or smaller attachments with the minidump. + +#### Apple Crash Report Too Large + +Reason code: `too_large:attachment:apple_crash_report`. + +Sentry rejected an envelope because an Apple crash report attachment was over the attachment size or count limits. These limits are shared, so other attachments sent with the crash may be what pushed it over. + +- **Short:** Apple crash report hit attachment limits. +- **Causes:** + - The Apple crash report attachment itself is too large. + - Other attachments sent with the crash pushed the envelope over the shared limits. +- **Actions:** + - Send fewer or smaller attachments with the crash. + +#### Crash Event Payload Too Large + +Reason code: `too_large:attachment:event_payload`. + +Sentry rejected the event data attached to a native crash upload because it was over the event size limit. Native crash uploads from sentry-native, Crashpad, and Breakpad send this data, and Unreal crash files can contain it too. + +- **Short:** Native crash event data over size limit. +- **Causes:** + - The crash event carries too much context, tags, or extra data. +- **Actions:** + - Reduce context, tags, and extra data on crash events. + +#### Crash Breadcrumbs Too Large + +Reason code: `too_large:attachment:breadcrumbs`. + +Sentry rejected the breadcrumbs file attached to a native crash upload because it was over the event size limit. + +- **Short:** Native crash breadcrumbs over size limit. +- **Causes:** + - Too many breadcrumbs were recorded before the crash. + - Individual breadcrumbs carry large amounts of data. +- **Actions:** + - Lower [`maxBreadcrumbs`](/platform-redirect/?next=/configuration/options/#maxBreadcrumbs) in your SDK options. + - Reduce the data attached to each breadcrumb. + +#### PlayStation Crash Dump Too Large + +Reason code: `too_large:attachment:prosperodump`. + +Sentry rejected a PlayStation crash dump because it was over the attachment size limit once decompressed, or because it and the attachments sent with it went over the attachment limits on upload. + +- **Short:** PlayStation crash dump over size limit. +- **Causes:** + - The crash dump is too large after decompression. + - Other attachments sent with the dump pushed it over the shared attachment limits. +- **Actions:** + - Reduce the data included in the dump. + - Send fewer or smaller attachments with the dump. + +#### Unreal Context Too Large + +Reason code: `too_large:attachment:unreal_context`. + +Sentry rejected an Unreal Engine crash context attachment because it was over the attachment size or count limits. Sentry normally creates this file itself when unpacking an Unreal crash report, so this only appears when a client sends the context attachment directly. + +- **Short:** Unreal context over attachment limits. +- **Causes:** + - A client sent the Unreal context attachment directly, and it was too large. + - Other attachments sent with it pushed the total over the shared limits. +- **Actions:** + - Send fewer or smaller crash attachments. + +#### Unreal Crash Logs Too Large + +Reason code: `too_large:attachment:unreal_logs`. + +Sentry rejected an Unreal Engine crash log attachment because it was over the attachment size or count limits. Sentry normally extracts these logs itself when unpacking an Unreal crash report, so this only appears when a client sends the log attachment directly. + +- **Short:** Unreal crash logs over attachment limits. +- **Causes:** + - A client sent the Unreal crash log attachment directly with too much log output. + - Other attachments sent with it pushed the total over the shared limits. +- **Actions:** + - Reduce log output included in crash reports. + - Send fewer or smaller other attachments with the logs. + +#### View Hierarchy Too Large + +Reason code: `too_large:attachment:view_hierarchy`. + +Sentry rejected an event because its view hierarchy attachment, which mobile SDKs send when view hierarchy capture is turned on, was over the attachment size or count limits. The shared count or total size limit is the more likely trigger. + +- **Short:** View hierarchy over attachment limits. +- **Causes:** + - The event's attachments together went over the shared count or total size limit, and the view hierarchy was the one that crossed it. + - The view hierarchy attachment itself is unusually large. +- **Actions:** + - Send fewer or smaller attachments with each event. + +#### Switch Dying Message Too Large + +Reason code: `too_large:attachment:nnswitch_dying_message`. + +Sentry rejected an envelope because a Nintendo Switch dying message attachment was over the attachment size or count limits. The dying message has no count of its own, so the drop is recorded against the error event and other attachments. + +- **Short:** Switch dying message hit attachment limit. +- **Causes:** + - The dying message attachment itself is too large. + - Other attachments sent with it pushed the envelope over the shared limits. +- **Actions:** + - Send fewer or smaller attachments. + +### Category: Rate Limited + +Sentry throttled requests or dropped events after they arrived. + +#### Generic Rate Limit + +Reason code: `generic`. + +Your requests were throttled by Sentry's edge protection, not by a quota. The limit applies to a single DSN key and to all data types, for the duration Sentry returned in `Retry-After`. + +- **Short:** Your requests across all event types were rate limited. +- **Causes:** + - A very high request rate from one DSN key. A runaway loop, or a retry storm after a batch of failures, is a common cause. + - A project with legitimately high traffic hitting the rate limit. +- **Actions:** + - Look for a loop or retry storm. Check whether the burst lines up with a deploy. + - If this volume is expected, [contact Sentry support](https://www.sentry.help/en/) or your account manager. + +#### Project Abuse Limit + +Reason code: `project_abuse_limit`. + +Your project exceeded Sentry's abuse limit for a data type. This is a short-window rate limit. It is not your billing quota and it is not spike protection. + +- **Short:** Your events exceeded the project abuse limit. +- **Causes:** + - A very high rate of one telemetry type on a project. An error emitted in a tight loop can trigger this. + - A project with legitimately high traffic hitting the abuse limit. +- **Actions:** + - Look for a loop or retry storm. Check whether the burst lines up with a deploy. + - If this volume is expected, [contact Sentry support](https://www.sentry.help/en/) or your account manager. + +#### Spike Protection + +Reason code: `smart_rate_limit`. + +[Spike protection](/pricing/quotas/spike-protection/) detected a sudden increase in event volume for this project and dropped events so the spike would not consume your quota. + +- **Short:** Spike protection dropped events to preserve your quota. See [Spike Protection](/pricing/quotas/spike-protection/). +- **Causes:** + - A sudden increase in volume for one project. + - A low-volume or newly created project. Thresholds are derived partly from recent history. + - A real traffic spike, such as a badly behaved bot. +- **Actions:** + - Find what caused the spike. Sort the project's issues by event count over the affected window, and check whether it lines up with a deploy. + - Turn spike protection on or off per project in settings. See [Spike Protection](/pricing/quotas/spike-protection/). + +#### Quota Exceeded + +Reason code: `usage_exceeded`, or a per-category code such as `error_usage_exceeded` or `span_usage_exceeded`. + +Your organization's [quota](/pricing/quotas/) for this data category was fully consumed, and no pay-as-you-go budget remained. The prefix names the data category. The bare `usage_exceeded` code is the older, all-category version. When a project hits its [spend allocation](/pricing/quotas/spend-allocation/), the code is `project_quota__usage_exceeded`. + +- **Short:** Your organization hit its quota for this event type. +- **Causes:** + - Reserved monthly volume for this category was consumed. + - Newly enabled instrumentation started sending a category you had not budgeted for. + - A project hit its spend allocation limit. +- **Actions:** + - Lower sampling rates or add [inbound filters](/concepts/data-management/filtering/) so the same overrun does not happen next period. + - Raise pay-as-you-go spend or reserved volume if the growth is expected. See [quotas](/pricing/quotas/). + +#### Internal Rate Limit + +Reason code: `rate_limited`. + +Sentry dropped data that went over one of its internal rate limits. This covers attachments over the per-project save limit, cron check-ins over the per-monitor limit, and Seer scanner and autofix runs that Sentry starts automatically. + +- **Short:** Over an internal Sentry rate limit. +- **Causes:** + - Your project saved more attachments than Sentry's per-project attachment save limit allows. + - A cron monitor sent more check-ins than allowed. By default, that's 6 per minute for each project, monitor, and environment combination. + - Automatic Seer scanner or autofix runs went over their limit. Sentry starts these runs, so they aren't data your application sent. +- **Actions:** + - Lower the volume of attachments your project sends. + - Reduce how often each cron monitor checks in. + - These limits aren't configurable. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + +#### DSN Rate Limit + +Reason code: `key_quota`. + +Sentry dropped events because they went over the [rate limit set on the project's client key (DSN)](/pricing/quotas/manage-event-stream-guide/#rate-limiting). The limit covers errors and security reports, such as CSP reports. Because this is a setting you control, it's left out of the dropped data line. + +- **Short:** Exceeded the DSN rate limit. +- **Causes:** + - A rate limit is set on the client key, and your application sent more errors or security reports than it allows. + - Security reports, such as CSP reports, count toward the same limit as errors. +- **Actions:** + - Raise or remove the rate limit in [Client Keys (DSN)](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/keys/). + - Find what is sending the extra errors or security reports if the volume is higher than expected. + +### Category: Inbound Filters + +Sentry dropped the data on purpose when it arrived, usually because of a [project inbound filter](/concepts/data-management/filtering/). Filtered events do not count toward quota. + +#### Filtered Transaction + +Reason code: `filtered-transaction`. + +The transaction name matched Sentry's [health check filter](/concepts/data-management/filtering/#transactions-coming-from-health-check), which drops endpoints such as `/health`, `/healthz`, `/ping`, and `/ready`. This filter is on by default. + +- **Short:** Transaction matched the default health check filter. See [health check filtering](/concepts/data-management/filtering/#transactions-coming-from-health-check). +- **Causes:** + - The health check filter is enabled by default on Sentry projects. +- **Actions:** + - Turn the filter off in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/) if you want these transactions. + +#### Error Message Filter + +Reason code: `error-message`. + +The event matched a custom glob in your error-message filter. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). + +- **Short:** Event message matched one of your custom filters. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). +- **Causes:** + - A filter you configured. +- **Actions:** + - If events you expect are missing, review the glob in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Release Version Filter + +Reason code: `release-version`. + +The event's release matched a custom release filter. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). + +- **Short:** Event release matched one of your custom filters. See [custom filtering](/concepts/data-management/filtering/#how-custom-filtering-works). +- **Causes:** + - A filter you configured. +- **Actions:** + - If events you expect are missing, review the release rule in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### IP Address Filter + +Reason code: `ip-address`. + +The event matched an IP range in a custom filter. See [IP address filters](/concepts/data-management/filtering/#ip-addresses). + +- **Short:** Event IP address matched one of your custom filters. See [IP address filters](/concepts/data-management/filtering/#ip-addresses). +- **Causes:** + - A filter you configured. +- **Actions:** + - If events you expect are missing, review the IP rule in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Legacy Browser Filter + +Reason code: `legacy-browsers`. + +The browser matched the [legacy browser filter](/concepts/data-management/filtering/#legacy-browser-filters). That filter drops events from older browsers that tend to produce broken telemetry. + +- **Short:** Browser matched your legacy browser filter. See [legacy browser filters](/concepts/data-management/filtering/#legacy-browser-filters). +- **Causes:** + - Bots spoofing old user agents. + - People connecting from old browsers, such as a kiosk that still runs an old browser. +- **Actions:** + - If the dropped browsers are ones your users actually use, review the legacy browser list in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/) and turn individual browsers off. + +#### Web Crawler Filter + +Reason code: `web-crawlers`. + +The user agent matched [Sentry's list of known web crawlers](/concepts/data-management/filtering/#web-crawler-errors). + +- **Short:** User agent matched Sentry's known crawler list. See [web crawler filters](/concepts/data-management/filtering/#web-crawler-errors). +- **Causes:** + - Bot traffic to your site. + - A user agent that matches the generic patterns. Any agent containing "bot" or "spider" as a word is filtered. +- **Actions:** + - Leave the filter on when you do not need crawler errors. + - To capture crawler-triggered errors, turn the filter off under [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Localhost Filter + +Reason code: `localhost`. + +The event was sent from `localhost`, such as `127.0.0.1`, `::1`, or a `localhost` URL, and the localhost filter is on. + +- **Short:** Event was sent from a local address. +- **Causes:** + - Events from local development, or from a server that reports through a local address. +- **Actions:** + - To keep these events, turn off the localhost filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Browser Extensions Filter + +Reason code: `browser-extensions`. + +The error is known to be caused by a browser extension, and the [browser extension filter](/concepts/data-management/filtering/#browser-extension-errors) is on. + +- **Short:** Error came from a browser extension. +- **Causes:** + - Your users have browser extensions installed that throw errors on your pages. +- **Actions:** + - To keep these errors, turn off the browser extension filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### React Hydration Errors Filter + +Reason code: `react-hydration-errors`. + +The error is a React hydration error, and the React hydration errors filter is on. + +- **Short:** Error was a React hydration error. +- **Causes:** + - Your React app threw a hydration error because the HTML rendered on the server didn't match the first render in the browser. +- **Actions:** + - To keep these errors, turn off the hydration errors filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### ChunkLoadError Filter + +Reason code: `chunk-load-error`. + +The error is a `ChunkLoadError`, and the ChunkLoadError filter is on. + +- **Short:** Error was a ChunkLoadError. +- **Causes:** + - A redeploy removed JavaScript chunks while users still had an older version of the page open. +- **Actions:** + - To keep these errors, turn off the ChunkLoadError filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Sentry-Managed Error Filter + +Reason code: `custom-error`. + +The error matched a filter that Sentry manages for known malicious payloads, such as fake setup commands. + +- **Short:** Error matched a known malicious payload. +- **Causes:** + - Someone sent your project a known malicious payload. +- **Actions:** + - You don't need to do anything. + +#### Log Message Filter + +Reason code: `log-message`. + +The log's message matched the project's [Log Message filter](/concepts/data-management/filtering/#log-message). + +- **Short:** Log message matched an inbound filter. +- **Causes:** + - A filter you configured. +- **Actions:** + - If logs you expect are missing, review the pattern in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Application Metric Name Filter + +Reason code: `trace-metric-name`. + +The metric name matched the project's [Application Metrics filter](/concepts/data-management/filtering/#application-metrics). + +- **Short:** Metric name matched an inbound filter. +- **Causes:** + - A filter you configured. +- **Actions:** + - If metrics you expect are missing, review the pattern in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Custom Inbound Filter + +Reason code: `custom-inbound-filter:`, where `` identifies the filter. + +The data matched one of the project's custom inbound filters. + +- **Short:** Matched a custom inbound filter. +- **Causes:** + - A filter you configured. +- **Actions:** + - If data you expect is missing, edit or turn off that filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + +#### Invalid CSP Report + +Reason code: `invalid-csp`. + +Sentry dropped a CSP report from an ignored source, such as a browser extension, or a security report type it doesn't support. + +- **Short:** CSP report ignored or unsupported. +- **Causes:** + - A CSP violation caused by a browser extension or another source on the project's ignored list. +- **Actions:** + - To keep these reports, edit the ignored sources in the project's security header settings. + +#### Dynamic Sampling + +Reason code: `Sampled:`, where the rule IDs identify the sampling rules that applied. + +[Dynamic sampling](/organization/dynamic-sampling/) dropped the data to keep a representative sample. + +- **Short:** Dropped by a dynamic sampling rule. +- **Causes:** + - Your organization's or project's dynamic sampling settings. +- **Actions:** + - To keep more data, raise the target sample rate in your [dynamic sampling](/organization/dynamic-sampling/) settings. + +#### Discarded Transaction + +Reason code: `discarded`. + +Sentry dropped the stored transaction after extracting its spans, so the data is kept as spans. + +- **Short:** Transaction kept as spans instead. +- **Causes:** + - Sentry stores this data as spans. +- **Actions:** + - You don't need to do anything. + +#### Denied Metric Name + +Reason code: `denied-name`. + +**Legacy:** Sentry dropped a metric whose name was on the project's block list in the retired custom metrics product. + +- **Short:** Legacy: metric name was on a block list. +- **Causes:** + - A block list in the retired custom metrics product. +- **Actions:** + - No action is needed for historical data. + +#### Unsupported Metric Namespace + +Reason code: `disabled-namespace`. + +Sentry dropped metrics sent to an unsupported namespace, such as the removed custom metrics product. + +- **Short:** Metrics sent to an unsupported namespace. +- **Causes:** + - Code that still calls the removed custom metrics APIs. +- **Actions:** + - Remove those metric calls from your code, or move to [Application Metrics](/product/metrics/). From ce454dfb77e4b6077150f4dae51191bde3e77c50 Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Fri, 16 Oct 2026 22:55:14 +0000 Subject: [PATCH 6/7] docs(explore): Align dropped data reasons with full Notion draft Rewrite reason entries from the complete draft descriptions: inbound filter defaults and settings, invalid/malformed causes, too-large limits, and legacy reasons. Co-Authored-By: Shannon Anahata --- docs/product/explore/dropped-data.mdx | 641 +++++++++++++++----------- 1 file changed, 381 insertions(+), 260 deletions(-) diff --git a/docs/product/explore/dropped-data.mdx b/docs/product/explore/dropped-data.mdx index a73f7eca3db98..bb35ed2d1c2f6 100644 --- a/docs/product/explore/dropped-data.mdx +++ b/docs/product/explore/dropped-data.mdx @@ -350,229 +350,259 @@ The transaction was valid JSON, but Sentry could not accept its contents. Reason code: `timestamp`. -Sentry dropped data because its timestamp was missing or outside the accepted ingestion window, or because a span had a missing or reversed start and end time. +Sentry dropped data because its timestamp was older than its retention period, or because a span had a missing start or end time, or an end time before its start. Only logs, spans, application metrics, and replays are dropped for an old timestamp. Future timestamps are shifted rather than dropped, and error events are never dropped for their timestamp. - **Short:** Event timestamp was too far in the past or future. - **Causes:** - - The clock on the device or host that sent the data is wrong. - - The data was backdated past the accepted window, for example when an offline device sends cached data much later. - - A span's end time is missing or earlier than its start time. + - Device or server clocks are set so far in the past that the data looks older than the retention period. + - Span instrumentation records a missing start or end time, or an end time earlier than the start time. + - A backlog in Sentry's ingestion pipeline held the data for more than 24 hours before it could be processed. - **Actions:** - - Verify clock synchronization (NTP) on the hosts and devices that send the data. - - Check custom instrumentation that sets span start or end times manually. + - Check that device and server clocks are set correctly. + - Make sure span instrumentation sets both a start and an end time, with the end after the start. + - [Contact Sentry support](https://www.sentry.help/en/) if drops spike with no clock or span problem on your side, since it may be an ingestion backlog. #### Disallowed Origin Reason code: `cors`. -The request's `Origin` or `Referer` header isn't in the project's [Allowed Domains](/concepts/data-management/filtering/#allowed-domains). Because this is a setting you control, it's left out of the dropped data line. +The request's `Origin` header, or its `Referer` header when there is no `Origin`, didn't match any entry in your project's [Allowed Domains](/concepts/data-management/filtering/#allowed-domains). Requests that send neither header always pass. Because this is a setting you control, it's left out of the dropped data line. - **Short:** Origin not in project's Allowed Domains. - **Causes:** - - Your app is served from a domain that isn't in the list, such as a new domain, a staging site, or a preview deployment. - - Another site is loading your script and sending events with your DSN. + - Your app runs on a domain that isn't in Allowed Domains, such as a new staging or production domain. + - A non-browser client sends a `Referer` header that doesn't match Allowed Domains. + - Allowed Domains is empty, which rejects every request that sends an `Origin` or `Referer`. - **Actions:** - - If the origin is expected, add it to your project's [Allowed Domains](/concepts/data-management/filtering/#allowed-domains). + - Add the expected origin to your project's Allowed Domains. + - To accept data from any origin, set Allowed Domains back to `*`, which is the default. + - If you don't recognize the origin, leave the setting as is. The filter is working as intended. #### Invalid or Disabled Project Reason code: `project_id`. -Sentry couldn't match the request to an active project. The project ID in the DSN didn't match its key, or the project or key is disabled. +Sentry rejected the data because the project ID in your DSN didn't match its key, or because the project is disabled or the client key is disabled or deleted. Drops caused by a disabled project or key likely won't appear in your organization's stats. Only the ID mismatch case does. - **Short:** DSN mismatch or disabled project or key. - **Causes:** - - The DSN in your SDK config is mistyped, outdated, or from a different project. - - The project was deleted, or the client key was disabled or removed. + - The DSN's project ID doesn't belong to its key, for example because the DSN was mistyped or edited by hand. + - The client key in the DSN was disabled or deleted. + - The project the DSN points to was disabled. - **Actions:** - - Copy the DSN from [Client Keys (DSN)](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/keys/) and confirm the key is enabled. + - Copy the active DSN exactly as shown in [Client Keys (DSN)](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/keys/). + - If you disabled the key or project on purpose, remove its DSN from any apps still using it. #### Invalid Event ID Reason code: `invalid_event_id`. -Sentry dropped an item with a malformed or missing event ID, such as an attachment sent without one. +Your SDK or upload code sent an item with a malformed or missing event ID, so Sentry couldn't accept it. This happens with attachments, user reports, and replays sent without an event ID, or with an upload whose `sentry[event_id]` form field can't be parsed. - **Short:** Event ID was malformed or missing. - **Causes:** - - Custom upload code that does not set a valid event ID. - - An outdated SDK. + - An outdated or custom SDK sends attachments, user reports, or replays without an event ID. + - Custom upload code sets a `sentry[event_id]` form field that isn't a valid event ID. - **Actions:** - - Update your SDK, or fix custom upload code so every item has a valid event ID. + - Update your Sentry SDK to the latest version. + - If you upload files with custom code, set `sentry[event_id]` to a valid event ID. #### Request Too Large Reason code: `request_too_large`. -The whole request was over the endpoint's size limit, or a log, span, or metric batch was over the parsing limit. This is different from the `too_large:` reasons, which apply to a single item. +Sentry rejected a whole request that was over the endpoint's size limit, or a batch of logs, spans, or metrics that needed more parsing work than Sentry allows. This is separate from the `too_large:` reasons, which drop individual items rather than the whole request. - **Short:** Request exceeded a size or parsing limit. - **Causes:** - - The SDK or exporter batched too much data into one request. + - A request is over the endpoint's size limit, for example an upload with oversized attachments. + - A batch of logs, spans, or metrics needs more parsing work than Sentry allows. - **Actions:** - - Send smaller payloads or batches, for example by flushing more often. + - Check for a matching `too_large:attachment` drop, which means oversized attachments caused the request to fail. + - Reduce attachment sizes or send less data per request. + - Send logs, spans, and metrics in smaller batches. #### Feature Disabled Reason code: `feature_disabled`. -Sentry dropped data that needs a feature that isn't enabled for this organization or project, such as PlayStation crash reports, minidump uploads, or logs sent over OpenTelemetry (OTLP). +Sentry dropped data that relies on a feature that isn't enabled for your organization or project, such as PlayStation ingestion, resumable minidump uploads, or logs sent over OpenTelemetry (OTLP). Sentry controls these features, so you can't turn them on yourself. - **Short:** Feature not enabled for org or project. - **Causes:** - - Your app sends a data type, such as OTLP logs, before that feature is enabled for your organization or project. + - Your app sends data to the PlayStation endpoint before PlayStation ingestion is enabled for your organization. + - Your app sends logs over OTLP before log ingestion is enabled for your organization. + - Your app uses resumable minidump uploads before they're enabled for your project. - **Actions:** - - Enable the feature for your organization or project, or stop sending that data. + - Stop sending that data type if you don't need it. + - [Contact Sentry support](https://www.sentry.help/en/) if you expected the feature to be available. #### Duplicate ID Reason code: `duplicate`. -Sentry dropped a span whose span ID repeated another span in the same envelope (one SDK upload). Sentry keeps the later one. +A span was dropped because another span in the same envelope (the bundle of data an SDK sends in one request) had the same span ID. Sentry keeps the later span and drops the earlier one. - **Short:** Span ID repeated in the same envelope. - **Causes:** - - Custom instrumentation that reuses span IDs. - - An outdated SDK. + - Custom instrumentation reuses span IDs or generates them in a way that isn't unique. + - The same span is sent more than once in a single envelope. - **Actions:** - - Make sure each span ID is unique, and update your SDK. + - Make sure every span gets a unique span ID. + - Check custom instrumentation or exporters for code that sends the same span twice. #### Duplicate Envelope Item Reason code: `duplicate_item`. -Sentry dropped items from an envelope that had more than one event or check-in, or repeated or mixed log, span, or metric batches. +An envelope held more than one event or check-in, repeated or mixed log or span batches, repeated metric batches, or an invalid mix of replay items. Only the extra events and check-ins are dropped. For logs, spans, metrics, and replays, every item of that type in the envelope is dropped. - **Short:** Envelope had duplicate or mixed items. - **Causes:** - - An outdated SDK. - - Custom code that builds envelopes. + - An outdated or custom SDK puts more than one event or check-in into one envelope. + - Custom code puts repeated or mixed log or span batches, or repeated metric batches, into one envelope. + - An envelope contains an invalid mix of replay items. - **Actions:** - - Update your SDK. If you build envelopes yourself, send at most one event or check-in, and one batch of each kind, per envelope. + - Update your Sentry SDK to the latest version. + - If you build envelopes yourself, send at most one event or check-in, and at most one batch each of logs, spans, and metrics, per envelope. #### Unsupported Envelope Item Reason code: `invalid_envelope`. -Sentry dropped an envelope item that was not allowed or supported in that envelope. +Sentry dropped an item that was not allowed or supported in the envelope it arrived in. Envelopes are the container format SDKs use to send events and related data to Sentry. - **Short:** Envelope item was not allowed or supported. - **Causes:** - - An outdated SDK. - - Custom code that builds envelopes with item types Sentry doesn't accept. + - Extra items in an error envelope that aren't supported alongside the error. These make up the counts you see. + - An outdated SDK putting items into an envelope that doesn't support them. + - Custom code that builds envelopes by hand with unknown item types. These are dropped but add nothing to the counts. - **Actions:** - - Update your SDK, or fix custom code that builds envelopes. + - Update your SDK. + - Fix any custom code that builds envelopes so it only includes supported items. #### No Data Reason code: `no_data`. -Sentry received the request, but nothing valid was left to store after validation. For example, every item in a log, span, or metric batch was invalid. +Sentry dropped a span, log, or application metric because nothing valid was left after checking it against the expected format. This often happens when a required field is missing, so the whole item is removed. - **Short:** No valid data was left after validation. - **Causes:** - - An outdated SDK. - - Custom code that sends empty or fully invalid batches. + - A span, log, or metric is missing a required field, which removes it during validation. + - An outdated SDK sends spans, logs, or metrics that don't match the expected format. - **Actions:** - - Update your SDK, and check custom code that builds batches. + - Update your SDK. + - Check custom span, log, or metric instrumentation for missing required fields. #### Invalid Span Reason code: `invalid_span`. -Sentry dropped a span that was missing required fields or had an invalid span or trace ID. +Sentry dropped a span that was missing required fields or had an invalid span ID or segment ID. This also covers spans taken from transactions that could not be converted. - **Short:** Span was missing fields or had a bad ID. - **Causes:** - - Custom instrumentation or an OpenTelemetry exporter sending spans without valid IDs, start times, or end times. - - An outdated SDK. + - Manual span instrumentation that leaves out the span ID or another required field. + - A span with an invalid segment ID. + - An outdated SDK sending spans without the required fields. - **Actions:** - - Update your SDK. If you send spans over OTLP, check that every span has valid IDs and timestamps. + - Update your SDK. + - Fix manual span instrumentation so every span has a valid span ID, a valid segment ID, and its required fields. #### Invalid Log Reason code: `invalid_log`. -Sentry dropped a log that was missing a required field after normalization, such as a timestamp or level. +Sentry dropped a log that was missing a required field, such as its timestamp or level, after normalization. Normalization is the step where Sentry cleans up incoming data before storing it. - **Short:** Log was missing a required field. - **Causes:** - - Custom log ingestion, such as a log drain or OTLP exporter, sending logs without a timestamp or level. + - An outdated SDK sending logs without a required field. + - Custom log ingestion code that leaves out the timestamp or level. - **Actions:** + - Update your SDK. - Fix custom log ingestion so every log includes a timestamp and level. #### Invalid Metric Reason code: `invalid_trace_metric`. -Sentry dropped an application metric that had no name, or an unsupported type or value. +Sentry dropped an application metric that had an empty name, an unknown or missing type, a non-numeric value, or a missing required field. This applies to [Application Metrics](/product/metrics/), not legacy custom metrics. - **Short:** Metric had no name or a bad type or value. - **Causes:** - - Code that emits metrics with an empty name or a non-numeric value. + - A metric sent with a missing or blank name. + - A metric with no type, or a type other than counter, gauge, or distribution. + - A metric with a non-numeric value. - **Actions:** - - Give every metric a name and a supported type and value. + - Give every metric a non-empty name. + - Use counter, gauge, or distribution types with numeric values. #### Invalid Check-In Reason code: `invalid_check_in`. -Sentry dropped a [cron](/product/monitors-and-alerts/monitors/crons/) check-in with an empty monitor slug, or an environment name over 64 characters. +Sentry dropped a [cron monitor](/product/monitors-and-alerts/monitors/crons/) check-in that had an empty monitor slug or an environment name longer than 64 characters. Slugs longer than 50 characters are shortened automatically, so only an empty slug is rejected. - **Short:** Check-in had a bad slug or environment. - **Causes:** - A check-in sent without a monitor slug. - - A long, generated environment name. + - A check-in with an environment name longer than 64 characters. - **Actions:** - - Set a monitor slug, and shorten the environment name to 64 characters or less. + - Set a monitor slug on every check-in. + - Shorten the environment name to 64 characters or fewer. #### Invalid Span Attachment Reason code: `invalid_span_attachment`. -Sentry dropped a span attachment that had invalid item headers or metadata, or no matching span. +Sentry dropped a span attachment that had no span ID, or that pointed to a span not sent in the same envelope. A span attachment has to arrive together with the span it belongs to. - **Short:** Span attachment had no matching span. - **Causes:** - - The attachment was sent without the span it belongs to. - - An outdated SDK. + - A span attachment sent without a span ID. + - A span attachment sent in a different envelope from its span. - **Actions:** - - Update your SDK, and send span attachments together with their span. + - Update your SDK. + - If you send span attachments yourself, set the span ID and include the span in the same envelope. #### Invalid Trace Attachment Reason code: `invalid_trace_attachment`. -Sentry dropped a trace attachment that had invalid item headers or metadata. +Sentry dropped a trace attachment whose `meta_length` header was missing or larger than the attachment itself, or that lacked required metadata such as its trace ID or content type. - **Short:** Trace attachment metadata was invalid. - **Causes:** - - An outdated SDK. - - Custom code that builds trace attachments. + - A trace attachment with a missing `meta_length` header, or one larger than the payload. + - A trace attachment missing required metadata, such as its trace ID or content type. - **Actions:** - - Update your SDK, or fix custom code that sets trace attachment metadata. + - Update your SDK. + - If you build trace attachments yourself, set a correct `meta_length` header and include the trace ID and content type. #### Invalid Replay Reason code: `invalid_replay`. -Sentry dropped a [session replay](/product/session-replay/) event that was malformed or missing required IDs. +Sentry dropped a [session replay](/product/session-replay/) event that was not valid JSON, was missing its `replay_id` or `segment_id`, or had invalid error or trace IDs. A `segment_id` that's too large is also rejected. - **Short:** Replay event was malformed or missing IDs. - **Causes:** - - An outdated Replay SDK. + - A replay event missing its `replay_id` or `segment_id`, or with invalid error or trace IDs. + - A replay event that isn't valid JSON, including one bundled with a mobile replay video. - **Actions:** - - Update the Replay SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + - Update the Replay SDK. #### Empty Replay Event Reason code: `invalid_replay_no_payload`. -Sentry dropped a replay event that contained no data. +Sentry dropped a replay event that parsed correctly but contained no data, for example a JSON `null`. - **Short:** Replay event contained no data. - **Causes:** - - An outdated Replay SDK. + - An SDK sending a replay event with empty content, such as JSON `null`. - **Actions:** - Update the Replay SDK. @@ -580,24 +610,25 @@ Sentry dropped a replay event that contained no data. Reason code: `invalid_replay_pii_scrubber_failed`. -**Legacy:** Sentry couldn't scrub sensitive data from a replay event, so it dropped the event. +Sentry dropped a replay because applying data scrubbing rules to the replay event failed. This isn't expected to happen in practice, so it points to a problem on Sentry's side rather than with your data. - **Short:** PII scrubbing of the replay event failed. - **Causes:** - - A replay event that Sentry's data scrubber could not process. + - An unexpected failure inside Sentry while scrubbing sensitive data from the replay event. - **Actions:** - - No action is needed for historical data. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues. #### Invalid Replay Recording Reason code: `invalid_replay_recording`. -Sentry couldn't parse or decompress a replay recording while scrubbing it, so it dropped the recording. +Sentry couldn't parse or decompress a replay recording while scrubbing it for sensitive data, so the recording was dropped. This only happens when Sentry scrubs replay recordings for your project, which requires your project to have data scrubbing rules or settings. - **Short:** Replay recording could not be parsed. - **Causes:** - - An outdated Replay SDK. - - A proxy or custom transport that modified the recording. + - A replay recording that isn't valid JSON. + - A replay recording with broken compression. + - A replay recording with an empty body or missing headers. - **Actions:** - Update the Replay SDK. @@ -605,379 +636,424 @@ Sentry couldn't parse or decompress a replay recording while scrubbing it, so it Reason code: `invalid_replay_video`. -Sentry dropped a mobile replay video that was empty or could not be decoded. +Sentry dropped a mobile replay video that couldn't be decoded or was empty. These videos arrive as a single bundle of the replay event, recording, and video. A broken replay event inside the bundle is reported as [Invalid Replay](#invalid-replay) instead. - **Short:** Replay video was empty or undecodable. - **Causes:** - - An outdated mobile SDK. - - The video was cut off before it was sent, for example because the app was closed. + - A replay video bundle that couldn't be decoded. + - A replay video bundle with an empty video. - **Actions:** - - Update your mobile SDK. + - Update the mobile Replay SDK. #### Replay Missing Recording Reason code: `invalid_replay_missing_recording`. -Sentry dropped a replay event that arrived without its recording in the same envelope. +Sentry dropped a replay event that was sent without its recording in the same envelope. Recordings sent on their own are still accepted, but a replay event must come with its recording. - **Short:** Replay event arrived without its recording. - **Causes:** - - An outdated Replay SDK that sends the event and recording separately. + - An SDK sending a replay event and its recording in separate envelopes. - **Actions:** - - Update the Replay SDK so both are sent together. + - Update the Replay SDK so the event and recording are sent together. #### Missing Event Payload Reason code: `no_event_payload`. -Sentry dropped a crash report or profile that arrived without the event it belongs to. +Sentry received a crash upload but couldn't build an event from it, or received a profile without the transaction it belongs to. Without that primary data, there was nothing to ingest. - **Short:** Crash or profile was missing its event. - **Causes:** - - An outdated SDK. - - Custom upload code that sends the crash or profile without its event. + - A crash upload whose items couldn't be turned into an event. + - A profile sent without its transaction in the same envelope. - **Actions:** - - Update your SDK, or fix custom upload code. + - Check the SDK or crash reporter sending the crash upload. + - Send each profile in the same envelope as its transaction. #### Unprocessable Crash Payload Reason code: `payload`. -Sentry couldn't process crash data from a game console, such as a Nintendo Switch dying message or a PlayStation crash dump. +Sentry couldn't process a Nintendo Switch crash or a PlayStation crash dump that your app sent, for example because the file was corrupt, cut off, or badly compressed. - **Short:** Console crash data could not be processed. - **Causes:** - - The crash data was incomplete or modified before upload. - - An outdated console SDK. + - A Nintendo Switch crash that's corrupt, cut off, or contains unexpected values. + - A PlayStation crash dump that's corrupt and can't be read. + - Crash data that's badly compressed and fails to decompress. - **Actions:** - - Update your console SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + - Check the SDK or tool that sends your Switch or PlayStation crashes. + - Confirm the crash files it uploads are complete and not corrupted. #### Missing Minidump Upload Reason code: `missing_minidump_upload`. -Sentry rejected a minidump upload because no minidump file was attached. +Sentry rejected a minidump upload because the request didn't include a minidump file. This only happens with multipart form uploads, and any other attachments or breadcrumbs in the same upload are dropped under this reason too. - **Short:** Minidump upload had no minidump file. - **Causes:** - - The crash reporter sent the file under the wrong form field name. + - The multipart upload didn't include the crash file at all. + - The crash file was sent under a form field other than `upload_file_minidump`, so Sentry didn't recognize it as the minidump. - **Actions:** - Send the crash file in the `upload_file_minidump` form field. + - Or send the raw minidump as the request body with the content type `application/octet-stream` or `application/x-dmp`. #### Invalid Minidump Reason code: `invalid_minidump`. -Sentry rejected a minidump that didn't start with a valid minidump (`MDMP`) file header. +Sentry rejected a minidump because the file didn't start with a valid minidump header. Large minidumps whose compressed file is corrupt are also reported this way. Corrupt compression on other minidumps is reported as [Invalid Compression](#invalid-compression). - **Short:** Minidump lacked a valid file header. - **Causes:** - The uploaded file isn't a minidump, or it was modified before upload. + - A large minidump was uploaded compressed, and the compressed file was corrupt. - **Actions:** - - Check that your crash reporter uploads an unmodified minidump. + - Check that your crash reporter uploads the unmodified minidump file. + - If you compress minidumps before upload, confirm the compressed files are intact. #### Unreadable Request Body Reason code: `invalid_body`. -Sentry could not read the body of a raw minidump upload, for example because the stream was cut off. +Sentry couldn't read the body of a minidump uploaded directly rather than as multipart form data, for example because the stream was cut off. Each failed upload is counted as a single error as a best-effort estimate. - **Short:** Minidump upload body could not be read. - **Causes:** - - The upload was interrupted, or a proxy changed the body. + - A raw minidump upload stream that was cut off before it finished. + - A proxy between the crash reporter and Sentry that cut off or changed the upload. + - Possibly, a compressed upload (HTTP `Content-Encoding`) that Sentry couldn't decode. - **Actions:** - - Check the crash reporter and any proxy between it and Sentry. + - Check that the crash reporter sends the complete minidump. + - Check any proxy between the crash reporter and Sentry for cut-off or changed requests. #### Invalid Compression Reason code: `invalid_compression`. -Sentry could not decompress a minidump (gzip, zstd, bzip2, or xz) or an Unreal Engine crash report. +Sentry couldn't decompress a minidump or an Unreal Engine crash report your app sent. For minidumps, Sentry detects the format (gzip, zstd, bzip2, or xz) from the file header. Large minidumps that fail to decompress are reported as [Invalid Minidump](#invalid-minidump) instead. - **Short:** Crash file could not be decompressed. - **Causes:** - - The file was compressed with an unsupported format, or the compressed data is corrupt. + - A minidump whose gzip, zstd, bzip2, or xz data is corrupt or incomplete. + - An Unreal crash report whose compression is invalid. - **Actions:** - - Check the crash reporter or tool that compresses and sends the file. + - Check the crash reporter or tool sending the file. + - For minidumps, make sure the file is valid gzip, zstd, bzip2, or xz data. #### Invalid Multipart Upload Reason code: `invalid_multipart`. -Sentry could not parse a multipart form-data upload, such as a minidump upload. +Sentry couldn't parse a multipart form-data upload, such as a minidump or PlayStation crash report. Each failed upload is counted as a single error as a best-effort estimate. - **Short:** Multipart upload could not be parsed. - **Causes:** - - A malformed form-data body, or a proxy that changed it. + - A crash reporter or upload client sending a malformed multipart body. + - An upload with a missing or invalid multipart boundary. - **Actions:** - - Check the crash reporter and any proxy between it and Sentry. + - Check the crash reporter or upload client. + - Make sure uploads are valid multipart form data with a correct boundary. #### Nesting Too Deep Reason code: `nesting_too_deep`. -Sentry rejected a crash upload because its form-data keys were nested more than 15 levels deep. +Sentry dropped a crash report because its form-data keys (like `sentry[a][b]...`) were nested more than 15 levels deep. This applies to Breakpad- or Crashpad-style uploads that send event fields as form data. - **Short:** Form-data keys nested over 15 levels deep. - **Causes:** - - Custom crash upload code that sends deeply nested form field names. + - A crash reporter sending event fields as bracketed form keys nested more than 15 levels after `sentry`. - **Actions:** - - Flatten the form fields you send with the crash upload. + - Flatten the fields your crash reporter sends so keys stay within 15 levels. #### Invalid MessagePack Reason code: `invalid_msgpack`. -Sentry couldn't parse the MessagePack-encoded event or breadcrumbs attached to a native crash upload. +Sentry couldn't decode the event or breadcrumbs attached to a native crash. These are sent in MessagePack, a compact binary format. - **Short:** Crash event or breadcrumbs failed to parse. - **Causes:** - - An outdated native SDK. - - The crash files were modified or cut off before upload. + - An outdated native SDK or crash reporter sending malformed MessagePack in the `__sentry-event`, `__sentry-breadcrumb1`, or `__sentry-breadcrumb2` fields. + - MessagePack data nested more than 128 levels deep, which likely also fails to decode. - **Actions:** - - Update your native SDK. + - Update the native SDK or crash reporter. + - If you attach these fields yourself, make sure they contain valid MessagePack. #### Invalid OTLP Protobuf Reason code: `invalid_proto`. -Sentry couldn't decode an OpenTelemetry (OTLP) payload sent as protobuf. +Sentry couldn't decode an OpenTelemetry (OTLP) payload for traces or logs sent in protobuf binary encoding. JSON-encoded OTLP payloads that fail to parse are reported as [Malformed JSON Payload](#malformed-json-payload) instead. - **Short:** OTLP protobuf payload could not be decoded. - **Causes:** - - The exporter's protocol doesn't match what it sends, such as JSON sent with a protobuf content type. - - The request body was cut off or changed by a proxy. + - An OpenTelemetry exporter whose protocol or encoding settings are misconfigured. + - A malformed protobuf payload sent to Sentry's OTLP traces or logs endpoint. - **Actions:** - - Check that your exporter's protocol setting and `Content-Type` header match, and that nothing between the exporter and Sentry changes the body. + - Check your OpenTelemetry exporter's protocol and encoding settings. + - Confirm the data sent to the OTLP traces or logs endpoint is valid OTLP protobuf. #### Invalid Unreal Report Reason code: `invalid_unreal_report`. -**Legacy:** Sentry couldn't read an Unreal Engine crash report sent to the Unreal endpoint. Current Sentry ingestion reports this as [Unreal Processing Failed](#unreal-processing-failed). +**Legacy:** This reason was defined for unreadable Unreal Engine crash reports, but Sentry never recorded it as a dropped event, so it shouldn't appear in your stats. Unreadable Unreal crash reports are recorded as [Unreal Processing Failed](#unreal-processing-failed) instead. - **Short:** Unreal report unreadable; not recorded. - **Causes:** - - An incomplete or invalid Unreal crash report. + - A short-lived, feature-gated version of Sentry's Unreal endpoint returned this error to the client but never recorded a dropped event. - **Actions:** - - No action is needed for historical data. + - You don't need to do anything for this reason. + - For real Unreal crash report failures, see [Unreal Processing Failed](#unreal-processing-failed), [Invalid Compression](#invalid-compression), and [Unreal Crash Report Too Large](#unreal-crash-report-too-large). #### Unreal Processing Failed Reason code: `process_unreal`. -Sentry couldn't extract an Unreal Engine crash report sent to the Unreal endpoint. +Sentry couldn't extract an Unreal Engine crash report from the upload during processing, so the crash was dropped. This is recorded by Sentry's servers or by self-hosted Sentry, never by a Relay you run in front of Sentry. - **Short:** Unreal crash report couldn't be read. - **Causes:** - - The Crash Reporter uploaded an incomplete or invalid report. + - The Unreal Engine Crash Reporter sent an incomplete or corrupted report. + - The upload sent to the Unreal endpoint isn't a valid Unreal crash report. - **Actions:** - - Check that the Crash Reporter uploads a complete, valid report. + - Check that the Unreal Engine Crash Reporter sends a complete, valid report. + - For badly compressed or oversized Unreal reports, see [Invalid Compression](#invalid-compression) and [Unreal Crash Report Too Large](#unreal-crash-report-too-large). #### Missing PlayStation Dump Reason code: `missing_prosperodump_upload`. -Sentry rejected a PlayStation crash upload because no `.prosperodmp` file was attached. +Sentry rejected a PlayStation crash upload because it didn't include a `.prosperodmp` core dump file. Sentry recognizes the dump only by a filename ending in `.prosperodmp`, and any other files in the upload are dropped with it. - **Short:** PlayStation upload had no .prosperodmp. - **Causes:** - - The upload didn't include the crash dump file. + - The crash upload didn't include the core dump file. + - The dump was attached with a filename that doesn't end in `.prosperodmp`. - **Actions:** - - Include the `.prosperodmp` file in the upload. + - Make sure the upload includes the core dump file. + - Check that the dump's filename ends in `.prosperodmp`. #### Invalid PlayStation Dump Reason code: `invalid_prosperodump`. -Sentry rejected a PlayStation crash dump that had an invalid file header. +Sentry rejected a PlayStation crash dump because the `.prosperodmp` file didn't start with an ELF or LZ4 header. This check only looks at the start of the file. A dump that fails later during processing is reported as [Unprocessable Crash Payload](#unprocessable-crash-payload) instead. - **Short:** PlayStation dump had an invalid header. - **Causes:** - - The uploaded file isn't a PlayStation crash dump, or it was modified before upload. + - The `.prosperodmp` file was modified before upload and its header was damaged. + - A file that isn't a PlayStation core dump was uploaded with a `.prosperodmp` filename. - **Actions:** - - Check that you upload an unmodified crash dump. + - Check that the `.prosperodmp` file is an unmodified core dump. + - Use the `.prosperodmp` extension only for PlayStation core dump files. #### Invalid Security Report Reason code: `security_report`. -Sentry rejected a security report, such as a CSP report, whose JSON didn't match the expected report format. +Sentry rejected a Content Security Policy (CSP) report because its JSON didn't match the expected report format. Browsers and extensions generate these reports, so you rarely control the payload. - **Short:** CSP report didn't match expected format. - **Causes:** - - A browser, extension, or custom code sent a report that doesn't follow the specification. + - The CSP report body had a shape Sentry didn't recognize. + - Sentry couldn't work out which CSP directive was violated. - **Actions:** - - These reports are usually browser-generated, so you usually don't need to do anything. If you send reports yourself, check them against the specification. + - Check what is posting to your security endpoint. + - Treat occasional drops as expected noise, since browsers and extensions generate these reports. #### Unrecognized Security Report Type Reason code: `security_report_type`. -Sentry couldn't tell what kind of security report this was, so it dropped it. +Sentry couldn't tell what kind of security report it received because the JSON had neither a `csp-report` key nor a `type` field. This is the shape of legacy Expect-CT, HPKP, and Expect-Staple reports, and only CSP reports are accepted. - **Short:** Security report type wasn't recognized. - **Causes:** - - The report was missing the data that identifies its type, or used a type Sentry doesn't support. + - Your site still sends legacy Expect-CT, HPKP (`Public-Key-Pins`), or Expect-Staple reports to Sentry. + - An older Relay in front of Sentry forwarded a security report that wasn't CSP. + - A Sentry ingestion change shipped in mid-September 2026, so you may see a step change in volume from then. - **Actions:** - - Send only supported security report types, such as CSP reports. + - Remove legacy `Expect-CT` or `Public-Key-Pins` `report-uri` headers that point at Sentry. + - Send only CSP reports to your security endpoint. #### Unsupported Protocol Version Reason code: `auth_version`. -**Legacy:** Sentry dropped data sent with an unsupported Sentry protocol version in its auth header. +**Legacy:** Sentry no longer reports this reason, so it only appears in historical data. It was recorded when an SDK sent an unsupported Sentry protocol version in its auth header. Today those requests are rejected with an HTTP `400` and no dropped data record. - **Short:** Legacy: unsupported protocol version. - **Causes:** - - A very old SDK. + - An SDK sent an auth header with a Sentry protocol version that Sentry didn't support. - **Actions:** - - Update your SDK. + - No action is needed for historical data. + - If the SDK that sent this data is still in use, update it to the latest version. #### Unsupported Content Type Reason code: `content_type`. -**Legacy:** Sentry dropped a request whose `Content-Type` isn't allowed for that endpoint. +**Legacy:** Sentry no longer reports this reason, so it only appears in historical data. It was recorded when a request's `Content-Type` wasn't allowed for the endpoint it was sent to. - **Short:** Legacy: unsupported content type. - **Causes:** - - Custom code that sends the wrong content type. + - A request was sent with a `Content-Type` the endpoint didn't accept. - **Actions:** - - Send the content type the endpoint expects. + - No action is needed for historical data. + - If you send data with custom code, use the content type the endpoint expects. #### Empty Request Body Reason code: `empty_body`. -**Legacy:** Sentry received a request with an empty body, so there was nothing to ingest. +**Legacy:** Sentry received a request with an empty body, so there was nothing to ingest. This reason isn't reported today, because Sentry rejects empty requests with an HTTP `400` error before recording them. - **Short:** Request body was empty. - **Causes:** - - An SDK or proxy forwarded a request without its body. + - An SDK, or a proxy forwarding requests to Sentry, sending requests with no body. - **Actions:** - - Check the SDK and any proxy forwarding requests to Sentry. + - You usually don't need to do anything, since this reason isn't expected to appear. + - If requests to Sentry fail with HTTP `400` errors, check the SDK and any proxy forwarding them. #### Transaction Attachment Reason code: `transaction_attachment`. -**Legacy:** Sentry dropped an attachment that was sent with a transaction. +**Legacy:** Sentry no longer reports this reason, so it only appears in historical data. It was recorded when an attachment sent alongside a transaction was dropped while an internal Sentry option disallowed it. That option has since been removed. - **Short:** Legacy: attachment sent with transaction. - **Causes:** - - An older SDK that attached files to transactions. + - Your SDK sent an attachment with a transaction while Sentry had transaction attachments turned off on its side. - **Actions:** - - No action is needed for historical data. + - You don't need to do anything. Sentry no longer drops attachments for this reason. #### Dynamic Sampling (Legacy) Reason code: `transaction_sampled`. -**Legacy:** [Dynamic sampling](/organization/dynamic-sampling/) dropped an envelope that contained only a transaction. Current dynamic sampling drops are reported as [Dynamic Sampling](#dynamic-sampling) under Inbound Filters. Because this is expected sampling, it's left out of the dropped data line. +**Legacy:** Sentry no longer reports this reason, so it only appears in historical data. It was recorded when [dynamic sampling](/organization/dynamic-sampling/) dropped a transaction under the rules in effect at the time. Current sampling drops are reported as [Dynamic Sampling](#dynamic-sampling) under Inbound Filters. Because this is expected sampling, it's left out of the dropped data line. - **Short:** Legacy: dropped by dynamic sampling. - **Causes:** - - The dynamic sampling rules in effect at the time. + - A transaction was dropped by the dynamic sampling rules in effect at the time. - **Actions:** - No action is needed for historical data. + - For current dynamic sampling drops, see [Dynamic Sampling](#dynamic-sampling). #### Internal Envelope Reason code: `internal_envelope`. -**Legacy:** Sentry rejected an envelope that contained items meant only for internal integrations. +**Legacy:** Sentry never records this reason in your stats. It only returns an HTTP `400` error to the client. It applies when an envelope sent to the regular envelope or store endpoint contains internal-only integration items, which only Sentry's own integration endpoints, such as OTLP and Vercel, create. - **Short:** Envelope had internal-only items. - **Causes:** - - Custom code that sent integration data, such as OTLP data, inside a regular envelope. + - A client or proxy sent internal integration items to the regular envelope or store endpoint. - **Actions:** - - Send that data to its integration endpoint, such as the OTLP endpoint. + - Send that data to its integration endpoint, such as OTLP, instead. + - Check any proxy or custom client that forwards envelopes to Sentry. #### Project Config Unreadable Reason code: `project_state`. -**Legacy:** Sentry couldn't read this project's configuration, so it dropped the data. This is a Sentry-side issue. +**Legacy:** Sentry couldn't read this project's configuration, so it dropped the data. Current Sentry no longer reports this reason. It can only come from very old Relays you run yourself. - **Short:** Project config couldn't be read. - **Causes:** - - A problem in Sentry's ingestion service. + - A very old Relay couldn't parse the project configuration it received from Sentry. + - A Sentry-side bug or infrastructure problem, not something in your setup. - **Actions:** + - If you run your own Relays, upgrade any very old versions. - [Contact Sentry support](https://www.sentry.help/en/) if it continues. #### Data Scrubbing Config Error Reason code: `project_state_pii`. -**Legacy:** Sentry couldn't convert this project's data scrubbing settings, so it dropped the data. This is a Sentry-side issue. +**Legacy:** Sentry couldn't convert this project's data scrubbing settings into a usable configuration, so it dropped the data. Current Sentry can no longer fail this way. It can only come from old Relays. - **Short:** Data scrubbing config failed to convert. - **Causes:** - - A problem in Sentry's ingestion service. + - A regular expression in the project's data scrubbing settings failed to compile during conversion. + - An old Relay processed the data. Current versions can't hit this error. - **Actions:** + - Check your [Security & Privacy](https://sentry.io/orgredirect/organizations/:orgslug/settings/security-and-privacy/) data scrubbing settings for invalid regular expressions. + - If you run your own Relays, upgrade any old versions. - [Contact Sentry support](https://www.sentry.help/en/) if it continues. #### Project Unavailable Reason code: `project_unavailable`. -Sentry couldn't load the project's configuration in time and rejected the upload. This should be close to zero when Sentry is healthy. +Sentry couldn't load the project's configuration in time, so it rejected a minidump or PlayStation crash upload. This is a Sentry-side infrastructure issue, and your SDK may retry the upload. - **Short:** Project config couldn't load in time. - **Causes:** - - A temporary problem in Sentry's ingestion service. + - Sentry's infrastructure couldn't provide the project configuration in time when a crash upload arrived. - **Actions:** - - The SDK may retry. Check the [Sentry status page](https://status.sentry.io/), and [contact Sentry support](https://www.sentry.help/en/) if it continues. + - You usually don't need to do anything, since the SDK may retry the upload. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues. #### Queue Failed Reason code: `queue_failed`. -**Legacy:** Sentry's internal queue was full, so it dropped the data. Current Sentry ingestion reports this as [Sentry Processing Error](#sentry-processing-error). +**Legacy:** This reason is defined for when Sentry's ingestion queue is full or shutting down, but those failures are always recorded as [Sentry Processing Error](#sentry-processing-error) instead. You shouldn't see it in your stats. - **Short:** Sentry queue full; shown as internal. - **Causes:** - - A problem in Sentry's ingestion service. + - Sentry's ingestion queue was full, shutting down, or out of memory, and the drop was recorded under `internal`. - **Actions:** - - No action is needed for historical data. + - Look under [Sentry Processing Error](#sentry-processing-error) for queue-related drops instead. + - [Contact Sentry support](https://www.sentry.help/en/) if those drops continue, since queue failures are a Sentry-side issue. #### Upload Failed Reason code: `upload_failed`. -Sentry couldn't store an attachment. This is a Sentry-side issue and should be close to zero when Sentry is healthy. +Sentry failed to save an attachment or crash file to its storage, so the data was dropped. If a minidump fails to save, the whole crash upload is rejected. A failed extra attachment is dropped on its own. - **Short:** Sentry couldn't store an attachment. - **Causes:** - - A problem in Sentry's storage service. + - Sentry's attachment storage returned an error during the upload. + - Sentry's attachment storage was shedding load and refused the upload. - **Actions:** - - Check the [Sentry status page](https://status.sentry.io/), and [contact Sentry support](https://www.sentry.help/en/) if it continues. + - You don't need to do anything for occasional drops, since this is a Sentry-side issue. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues. #### Invalid Signature Reason code: `invalid_signature`. -Sentry rejected data from a [Relay](/product/relay/) that isn't registered with your organization, or whose signature has expired. +Sentry rejected data signed by a [Relay](/product/relay/) that isn't registered with your organization, or whose signature had expired. This check only runs when your organization has **Ingest Through Trusted Relays Only** turned on. - **Short:** Relay signature unknown or expired. - **Causes:** - - The Relay's public key isn't registered in your organization settings. + - The Relay's public key isn't registered with your organization. - The Relay's clock is wrong, so its signatures look expired. - **Actions:** - - [Register the Relay's key](/product/relay/getting-started/#registering-relay-with-sentry) and check its clock. + - [Register the Relay's public key](/product/relay/getting-started/#registering-relay-with-sentry) in your organization's [Relay settings](https://sentry.io/orgredirect/organizations/:orgslug/settings/relay/). + - Check that the Relay's system clock is accurate. #### Missing Signature Reason code: `missing_signature`. -Your project only accepts data through trusted [Relays](/product/relay/), and this data arrived without a Relay signature. Because this is a setting you control, it's left out of the dropped data line. +Your organization only accepts data through trusted [Relays](/product/relay/), so data sent directly without a Relay signature was rejected. This is the **Ingest Through Trusted Relays Only** setting working as intended, so it's left out of the dropped data line. - **Short:** Unsigned data bypassed trusted Relays. - **Causes:** - - An SDK is sending directly to Sentry instead of through your Relay. + - Some SDKs or DSNs send data straight to Sentry instead of through your Relay. + - Your organization turned on **Ingest Through Trusted Relays Only**, which rejects all unsigned direct traffic by design. - **Actions:** - - Point the SDK at your Relay, or review the trusted Relays setting in your organization's security settings. + - Route all SDKs through your trusted Relay. + - If you don't need this restriction, turn off **Ingest Through Trusted Relays Only** in your organization's [Relay settings](https://sentry.io/orgredirect/organizations/:orgslug/settings/relay/). #### Event Payload Too Large @@ -1017,6 +1093,7 @@ The span exceeded the maximum payload size. - Large context windows from AI agents attached to spans. - **Actions:** - Trim the payload in [`beforeSendSpan`](/platform-redirect/?next=/configuration/options/#beforeSendSpan). + - Use attachments instead of attributes for large payload data, such as images or videos. #### Application Metric Payload Too Large @@ -1060,165 +1137,186 @@ The profile exceeded the maximum payload size. Reason code: `too_large:profile_chunk`. -A [continuous profiling](/product/profiling/) chunk was over the size limit, or too many chunks were sent in one envelope. +Sentry rejected a continuous [profiling](/product/profiling/) chunk because it was over the profile size limit (50 MiB by default), or because it was sent in the same envelope (one SDK upload) as another profile or profile chunk. The whole envelope is rejected. - **Short:** Profile chunk over size or count limit. - **Causes:** - - Very deep stacks or many threads in one chunk. - - An outdated SDK that batches too many chunks together. + - A single profile chunk is larger than the 50 MiB profile size limit. + - More than one profile or profile chunk was sent in the same envelope, where only one is allowed. - **Actions:** - - Update your SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + - Update your SDK to the latest version. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues after updating. #### Replay Event Too Large Reason code: `too_large:replay_event`. -The replay metadata event was over the size limit. +Sentry rejected a replay's metadata event because it was over the event size limit (1 MiB by default), or because it was sent in the same envelope (one SDK upload) as another event. The whole envelope is rejected, including the replay recording sent with it, so that replay segment is lost. - **Short:** Replay metadata event over size limit. - **Causes:** - - Large tags, contexts, or other metadata attached to the replay. + - The replay event carried more than 1 MiB of data, for example from custom data added to it. + - The replay event was sent in the same envelope as another event, such as an error, transaction, or user feedback. - **Actions:** - - Reduce the tags and context data you attach to replays. + - Reduce custom data added to replay events. + - Update your SDK to the latest version if it continues. #### Replay Recording Too Large Reason code: `too_large:replay_recording`. -A replay recording segment was over the size limit. +Sentry dropped a replay segment because its recording was over 10 MiB compressed (the default limit), because more than one recording was sent in the same envelope (one SDK upload), or because the replay event, recording, and video together reached 15 MiB. Oversized mobile video segments can also show up under this reason. - **Short:** Replay recording over size limit. - **Causes:** - - Pages with large or rapidly changing DOMs, or heavy media. + - Very large or rapidly changing page elements made the recorded segment too big. + - More than one replay recording was sent in the same envelope. + - On mobile, a segment's replay event, recording, and video together reached the 15 MiB combined limit. - **Actions:** - - Record less, using the same options as [SDK Buffer Overflow](#sdk-buffer-overflow). + - [Block or ignore](/platforms/javascript/session-replay/privacy/#blocking) very large or rapidly changing page elements in your replay setup. + - Update your SDK to the latest version if it continues. #### Replay Video Too Large Reason code: `too_large:replay_video`. -A mobile replay segment's video was over the size limit. +Sentry rejected a mobile replay segment because its video was over the size limit (10 MiB compressed by default), or because more than one video was sent in the same envelope (one SDK upload). Normal segments are far below this limit, so this likely points to an SDK problem or an unusual segment. - **Short:** Mobile replay video over size limit. - **Causes:** - - High replay quality settings or long segments. + - An SDK problem or an unusual segment produced a video far larger than normal. + - More than one replay video was sent in the same envelope. - **Actions:** - - Lower the replay quality option in your mobile SDK to reduce video size. + - Update your mobile SDK to the latest version. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues after updating. #### Check-In Too Large Reason code: `too_large:check_in`. -A cron check-in was over the size limit, or too many check-ins were sent in one envelope. +Sentry rejected a cron monitor check-in because it was over the check-in size limit (100 KiB by default), or because the envelope (one SDK upload) held more than one check-in. The whole envelope is rejected. - **Short:** Cron check-in over size or count limit. - **Causes:** - - Large monitor config or context sent with the check-in. - - Custom code that batches several check-ins together. + - The check-in payload was larger than the 100 KiB limit. + - More than one check-in was sent in a single envelope. - **Actions:** - - Send one check-in per envelope, and keep monitor config small. + - Keep each check-in payload under 100 KiB. + - Send one check-in per request. #### Session Update Too Large Reason code: `too_large:session`. -Session updates in the envelope were over the size or count limit. Session updates and session aggregates in the same envelope count toward a shared limit. +Sentry rejected release health session updates because the envelope (one SDK upload) was over the session size limit (10 MiB by default) or held more than 100 session items. The whole envelope is rejected. - **Short:** Too many or too large session updates. - **Causes:** - - An SDK that sends many session updates at once, for example after a long offline period. + - More than 100 session updates, or more than 10 MiB of them, were sent in one envelope. + - Session updates and session aggregates in the same envelope together crossed the shared size or count limit. - **Actions:** - - Update your SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + - Send fewer session updates per envelope. #### Session Aggregates Too Large Reason code: `too_large:sessions`. -Session aggregates in the envelope were over the size or count limit. Session updates and session aggregates in the same envelope count toward a shared limit. +Sentry rejected pre-aggregated release health sessions, which server-mode SDKs send, because the envelope (one SDK upload) was over the shared session size limit (10 MiB by default) or held more than 100 session items. The whole envelope is rejected. - **Short:** Too many or too large session aggregates. - **Causes:** - - A server SDK that sends a very large number of aggregated sessions at once. + - A server-mode SDK sent more than 100 session aggregate items, or more than 10 MiB of them, in one envelope. + - Session aggregates and session updates in the same envelope together crossed the shared size or count limit. - **Actions:** - - Update your SDK. [Contact Sentry support](https://www.sentry.help/en/) if it continues. + - Send fewer session aggregates per envelope. #### Legacy User Feedback Too Large Reason code: `too_large:user_report`. -A user report from the legacy User Feedback API went over the attachment limits it shares with other attachments. +Sentry rejected an envelope (one SDK upload) because a user report from the older user feedback API pushed it over the attachment size or count limits it shares with attachments. User reports are small, so the attachments sent with it are usually what caused the overflow. - **Short:** User report hit shared attachment limits. - **Causes:** - - Other attachments sent in the same envelope pushed it over the limit. + - Attachments in the same envelope were too large or too many (defaults are 200 MiB per item, 30 items, and 200 MiB total), and the user report tipped the envelope over. - **Actions:** - - Move to the current [User Feedback](/product/user-feedback/) API, and send fewer or smaller attachments. + - Send fewer or smaller attachments with the user report. #### User Feedback Too Large Reason code: `too_large:user_report_v2`. -A user feedback submission was over the event size limit. +Sentry rejected [user feedback](/product/user-feedback/) because it was over the event size limit (1 MiB by default), or because it was sent in the same envelope (one SDK upload) as another event. Feedback screenshots are separate attachments and don't count toward this check. - **Short:** User feedback over event size limit. - **Causes:** - - A very long feedback message, or large tags or context attached to the feedback. + - The feedback carried too much context or extra data. + - The feedback was sent in the same envelope as another event, such as an error, transaction, or replay event. - **Actions:** - - Reduce the context and tags you attach to feedback. + - Reduce context and extra data on feedback. + - Update your SDK to the latest version if it continues. #### Security Event Too Large Reason code: `too_large:security`. -A security event, such as a forwarded CSP report, was over the event size limit. +Sentry rejected a Content Security Policy (CSP) event because it was over the event size limit (1 MiB by default), or because it was sent in the same envelope (one upload) as another event. Sentry's own endpoints already cap these reports, so this usually comes from a downstream [Relay](/product/relay/) forwarding an oversized CSP event. - **Short:** Forwarded CSP event over size limit. - **Causes:** - - Custom code or a proxy that forwards very large security reports. + - A downstream Relay, such as one you run, forwarded a CSP event larger than the event size limit. + - The CSP event was sent in the same envelope as another event. - **Actions:** - - Trim the reports before forwarding them. + - Check the size limits configured on any Relay you run. + - [Contact Sentry support](https://www.sentry.help/en/) if it continues. #### Security Report Too Large Reason code: `too_large:raw_security`. -A browser security report, such as a CSP violation, was larger than the event size limit. These reports are browser-generated and rarely need action. +Sentry rejected a browser security report, such as a CSP violation, because it was larger than the event size limit (1 MiB by default). The security report endpoint already caps reports at this limit, so this only happens when a raw report is sent directly inside an envelope (one upload), for example by your own client or by a Relay running in proxy mode. - **Short:** Browser security report over size limit. - **Causes:** - - A browser sent a very large report, for example with a long script sample. + - A client or a Relay running in proxy mode sent a raw security report directly, and it was over the event size limit. + - The security report was sent in the same envelope as another event. - **Actions:** - - You usually don't need to do anything. + - You usually don't need to do anything. These reports are browser-generated and this is very rare. + - If you send reports through your own client or Relay, send one report per envelope. #### Unreal Crash Report Too Large Reason code: `too_large:unreal_report`. -An Unreal Engine crash report was over the size limit. +Sentry rejected an Unreal Engine crash report because it was over the shared attachment limits (200 MiB per item, 30 items, and 200 MiB total by default), or because it grew past 200 MiB once unpacked. These drops are counted as errors. - **Short:** Unreal crash report over size limit. - **Causes:** - - Large minidumps or logs included in the crash report. + - The crash report bundles large logs or other files. + - Other attachments in the same envelope (one upload) pushed it over the shared attachment limits. + - The report is over 200 MiB once unpacked, even though its upload was smaller. - **Actions:** - - Reduce the data included in crash reports, such as full memory dumps and long logs. + - Reduce the logs and files included in crash reports. + - Send fewer or smaller attachments with the crash report. #### Form Data Too Large Reason code: `too_large:form_data`. -The form fields sent with a crash upload, such as a minidump upload, were over the size limit. +Sentry rejected a multipart crash upload, such as a minidump upload, because its non-file form fields together were over the event size limit (1 MiB by default). Form data has no data category of its own, so the drop is recorded against the other items in the upload, such as the minidump. - **Short:** Crash upload form fields over size limit. - **Causes:** - - Large context or extra data sent as form fields with the crash. + - Too much event data was sent in the upload's form fields, such as the `sentry` JSON field or `sentry[...]` fields. + - Form data was sent in the same envelope (one upload) as another event. - **Actions:** - - Send less data in the crash upload's form fields. + - Send less event data in the upload's form fields. #### Client Report Too Large Reason code: `too_large:client_report`. -The SDK's client report, its summary of data it dropped, was over the size or count limits. A lone client report records nothing here, so this only appears when other items in the same envelope were dropped with it. It points to an SDK problem rather than your data. +Sentry rejected an envelope (one SDK upload) because the SDK's client report, its summary of data it dropped, was over the size or count limits. A lone client report records nothing here, so this only appears when other items in the same envelope were dropped with it. It points to an SDK problem rather than your data. - **Short:** SDK's client report exceeded its limits. - **Causes:** @@ -1244,11 +1342,11 @@ Reason code: `too_large:statsd`. Reason code: `too_large:metric_buckets`. -Sentry rejected metric buckets sent by a downstream [Relay](/product/relay/) because they were over the size limit, or because more than one was sent in the same envelope. SDKs never send metric buckets, so this comes from Relay-to-Relay traffic. +Sentry rejected metric buckets sent by a downstream [Relay](/product/relay/) (Sentry's ingestion service, which some customers run themselves) because they were over the size limit (1 MiB by default), or because more than one was sent in the same envelope (one upload). SDKs never send metric buckets, so this comes from Relay-to-Relay traffic, and many of these rejections record no count. - **Short:** Relay metric buckets over size limit. - **Causes:** - - The sending Relay's batches were larger than the receiving limit. + - The sending Relay's batches were larger than the receiving limit. A Relay batches up to about 5 MB by default, while the receiving default is 1 MiB. - More than one metric buckets item was sent in the same envelope. - **Actions:** - Check the version and configuration of the Relay that sent the data. @@ -1258,12 +1356,12 @@ Sentry rejected metric buckets sent by a downstream [Relay](/product/relay/) bec Reason code: `too_large:integration`. -Sentry rejected an OpenTelemetry (OTLP), Vercel log drain, or Network Error Logging (NEL) payload because it was over the size limit. This is rare, because those endpoints usually refuse oversized requests before this check. +Sentry rejected an OpenTelemetry (OTLP), Vercel log drain, or Network Error Logging (NEL) payload because it was over the size limit (12 MiB by default). Those endpoints usually refuse oversized requests before this check, so this reason needs an envelope (one upload) that carries the integration data directly, or more than one item of the same kind, and is rare. - **Short:** OTLP, Vercel, or NEL payload too large. - **Causes:** - - Integration data sent directly in an envelope was too large, such as a large exporter or log drain batch. - - An envelope carried more than one integration item of the same kind. + - Integration data sent directly in an envelope was larger than 12 MiB, such as a large exporter or log drain batch. + - An envelope carried more than one integration item of the same kind, logs or spans. - **Actions:** - Send smaller batches from your exporter or drain. - If you build envelopes yourself, include at most one integration logs item and one spans item per envelope. @@ -1272,25 +1370,26 @@ Sentry rejected an OpenTelemetry (OTLP), Vercel log drain, or Network Error Logg Reason code: `too_large:unknown`. -**Legacy:** Sentry rejected an item of a type that Relay didn't recognize because it was over the size limit. Current Relay versions no longer report this reason, so it only appears in historical data or from older Relays, such as ones you run yourself. +**Legacy:** Sentry rejected an item of a type that Relay (Sentry's ingestion service) didn't recognize because it was over the size limit. Current Relay versions no longer report this reason, so it only appears in historical data or from older Relays, such as ones you run yourself. - **Short:** Unrecognized item type over size limit. - **Causes:** - - An older Relay received an item of a type it did not recognize that was over the size limit. + - An older Relay received an item of a type it didn't recognize that was larger than 12 MiB. - **Actions:** - Update your SDK and any Relay you run to current versions. + - No action is needed for historical data. #### Attachment Too Large Reason code: `too_large:attachment:attachment`. -Sentry rejected an envelope because an attachment was over the size limit, or because there were too many attachments. The whole envelope is rejected, including the event the attachments belong to. +Sentry rejected an envelope (one SDK upload) because an attachment was over the size limit, or because there were too many attachments. The whole envelope is rejected, including the event the attachments belong to. - **Short:** Attachment over size or count limit. - **Causes:** - - A single attachment is over the per-attachment size limit. - - The envelope held too many attachments, or too much attachment data in total. - - A multipart upload's attachments together went over the total size limit. + - A single attachment is larger than the 200 MiB default limit. + - The envelope held more than 30 attachments, or more than 200 MiB of attachments in total. + - A multipart upload's attachments together went over the total size limit, whatever their type. - **Actions:** - Send fewer or smaller attachments. @@ -1325,7 +1424,7 @@ Sentry rejected an envelope because an Apple crash report attachment was over th Reason code: `too_large:attachment:event_payload`. -Sentry rejected the event data attached to a native crash upload because it was over the event size limit. Native crash uploads from sentry-native, Crashpad, and Breakpad send this data, and Unreal crash files can contain it too. +Sentry rejected the event data attached to a native crash upload because it was over the event size limit (1 MiB by default). Native crash uploads from sentry-native, Crashpad, and Breakpad send this data, and Unreal crash files can contain it too. - **Short:** Native crash event data over size limit. - **Causes:** @@ -1337,7 +1436,7 @@ Sentry rejected the event data attached to a native crash upload because it was Reason code: `too_large:attachment:breadcrumbs`. -Sentry rejected the breadcrumbs file attached to a native crash upload because it was over the event size limit. +Sentry rejected the breadcrumbs file attached to a native crash upload because it was over the event size limit (1 MiB by default). - **Short:** Native crash breadcrumbs over size limit. - **Causes:** @@ -1392,7 +1491,7 @@ Sentry rejected an Unreal Engine crash log attachment because it was over the at Reason code: `too_large:attachment:view_hierarchy`. -Sentry rejected an event because its view hierarchy attachment, which mobile SDKs send when view hierarchy capture is turned on, was over the attachment size or count limits. The shared count or total size limit is the more likely trigger. +Sentry rejected an event because its view hierarchy attachment, which mobile SDKs send when view hierarchy capture is turned on, was over the attachment size or count limits. With a 200 MiB per-attachment default, the shared count or total limit is the more likely trigger. - **Short:** View hierarchy over attachment limits. - **Causes:** @@ -1465,16 +1564,16 @@ Reason code: `smart_rate_limit`. Reason code: `usage_exceeded`, or a per-category code such as `error_usage_exceeded` or `span_usage_exceeded`. -Your organization's [quota](/pricing/quotas/) for this data category was fully consumed, and no pay-as-you-go budget remained. The prefix names the data category. The bare `usage_exceeded` code is the older, all-category version. When a project hits its [spend allocation](/pricing/quotas/spend-allocation/), the code is `project_quota__usage_exceeded`. +Your organization's [quota](/pricing/quotas/) for this data category was fully consumed, and no pay-as-you-go budget remained. The prefix names the data category, such as error, transaction, span, or replay. The bare `usage_exceeded` code is the older, all-category version. When a project hits its [spend allocation](/pricing/quotas/spend-allocation/), the code is `project_quota__usage_exceeded`. - **Short:** Your organization hit its quota for this event type. - **Causes:** - - Reserved monthly volume for this category was consumed. + - Reserved monthly volume for this category was consumed, and your pay-as-you-go budget was used up. - Newly enabled instrumentation started sending a category you had not budgeted for. - A project hit its spend allocation limit. - **Actions:** - - Lower sampling rates or add [inbound filters](/concepts/data-management/filtering/) so the same overrun does not happen next period. - - Raise pay-as-you-go spend or reserved volume if the growth is expected. See [quotas](/pricing/quotas/). + - Raise your pay-as-you-go budget in [Subscription settings](https://sentry.io/orgredirect/organizations/:orgslug/settings/billing/overview/) if the growth is expected. See [quotas](/pricing/quotas/). + - Lower your sampling rates or add [inbound filters](/concepts/data-management/filtering/) so the same overrun does not happen next period. #### Internal Rate Limit @@ -1589,109 +1688,127 @@ The user agent matched [Sentry's list of known web crawlers](/concepts/data-mana Reason code: `localhost`. -The event was sent from `localhost`, such as `127.0.0.1`, `::1`, or a `localhost` URL, and the localhost filter is on. +The data was sent from `localhost` and the project's localhost inbound filter is turned on. This includes events from `127.0.0.1`, `::1`, `localhost` URLs, `file://` URLs, and `*.localhost` hosts. - **Short:** Event was sent from a local address. - **Causes:** - - Events from local development, or from a server that reports through a local address. + - You sent events from local development or testing while the localhost filter was on. It's off by default, so someone turned it on. + - Events came from requests whose `Host` or `X-Forwarded-Host` header was `localhost` or `127.0.0.1`. + - Events came from pages loaded from `file://` URLs or `*.localhost` hosts. - **Actions:** + - You usually don't need to do anything. This is the filter working as intended. - To keep these events, turn off the localhost filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). #### Browser Extensions Filter Reason code: `browser-extensions`. -The error is known to be caused by a browser extension, and the [browser extension filter](/concepts/data-management/filtering/#browser-extension-errors) is on. +The error matched Sentry's list of errors known to be caused by browser extensions. See [browser extension errors](/concepts/data-management/filtering/#browser-extension-errors). This filter is turned on automatically for new projects with a JavaScript platform. - **Short:** Error came from a browser extension. - **Causes:** - - Your users have browser extensions installed that throw errors on your pages. + - A browser extension installed by one of your users threw an error that your SDK captured. + - The browser extension filter is on, which is the default for new projects created with a JavaScript platform. - **Actions:** - - To keep these errors, turn off the browser extension filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - You usually don't need to do anything. This is the filter working as intended. + - To capture these errors, turn off the filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). #### React Hydration Errors Filter Reason code: `react-hydration-errors`. -The error is a React hydration error, and the React hydration errors filter is on. +The error is a React hydration error, which the hydration errors inbound filter removes by default. The filter matches messages containing React's error-decoder links for hydration error codes 418, 419, 421, 422, 423, and 425. - **Short:** Error was a React hydration error. - **Causes:** - - Your React app threw a hydration error because the HTML rendered on the server didn't match the first render in the browser. + - Your React app threw hydration errors while the filter was on, which is the default. - **Actions:** - - To keep these errors, turn off the hydration errors filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - You usually don't need to do anything. This is the filter working as intended. + - To capture these errors, turn off **Filter out hydration errors** in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). #### ChunkLoadError Filter Reason code: `chunk-load-error`. -The error is a `ChunkLoadError`, and the ChunkLoadError filter is on. +The error is a `ChunkLoadError`, raised when the browser fails to load a JavaScript chunk. The ChunkLoadError filter is on by default. - **Short:** Error was a ChunkLoadError. - **Causes:** - - A redeploy removed JavaScript chunks while users still had an older version of the page open. + - You redeployed while users still had an old version of the page open. + - Your app raised Webpack "Loading chunk" or Turbopack "Failed to load chunk" errors while the filter was on, which is the default. - **Actions:** - - To keep these errors, turn off the ChunkLoadError filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - You usually don't need to do anything. This is the filter working as intended. + - To capture these errors, turn off **Filter out ChunkLoadError(s)** in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). #### Sentry-Managed Error Filter Reason code: `custom-error`. -The error matched a filter that Sentry manages for known malicious payloads, such as fake setup commands. +The error matched a filter that Sentry manages for known malicious payloads, such as fake `npx` setup commands. These aren't real application errors, and there's no project setting for this filter. - **Short:** Error matched a known malicious payload. - **Causes:** - - Someone sent your project a known malicious payload. + - Errors were sent with a known malicious payload, such as a fake `npx @...` setup command, in the exception type, value, or log message. - **Actions:** - - You don't need to do anything. + - You don't need to do anything. This filter removes malicious attempts, not real errors. + - [Contact Sentry support](https://www.sentry.help/en/) if you believe real errors are being dropped. #### Log Message Filter Reason code: `log-message`. -The log's message matched the project's [Log Message filter](/concepts/data-management/filtering/#log-message). +The log's message matched a pattern in the project's [Log Message filter](/concepts/data-management/filtering/#log-message). - **Short:** Log message matched an inbound filter. - **Causes:** - - A filter you configured. + - The Log Message filter has a pattern that matches these logs. + - A pattern is broader than intended and also matches logs you meant to keep. - **Actions:** - - If logs you expect are missing, review the pattern in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - Review the Log Message patterns in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - Edit or remove the matching pattern to keep these logs. #### Application Metric Name Filter Reason code: `trace-metric-name`. -The metric name matched the project's [Application Metrics filter](/concepts/data-management/filtering/#application-metrics). +The metric's name matched a pattern in the project's [Application Metrics filter](/concepts/data-management/filtering/#application-metrics). - **Short:** Metric name matched an inbound filter. - **Causes:** - - A filter you configured. + - The Application Metrics filter has a pattern that matches these metric names. + - A pattern is broader than intended and also matches metrics you meant to keep. - **Actions:** - - If metrics you expect are missing, review the pattern in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - Review the Application Metrics patterns in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - Edit or remove the matching pattern to keep these metrics. #### Custom Inbound Filter -Reason code: `custom-inbound-filter:`, where `` identifies the filter. +Reason code: `custom-inbound-filter:`, where `` is the filter's ID. -The data matched one of the project's custom inbound filters. +The data matched one of the project's custom inbound filters. Stats groups all custom filters together. - **Short:** Matched a custom inbound filter. - **Causes:** - - A filter you configured. + - A custom inbound filter matches this data on conditions such as error type or message, log message, metric name, release, or user country. + - A filter's conditions or data types (errors, spans, logs, metrics, or all of them) are broader than intended. - **Actions:** - - If data you expect is missing, edit or turn off that filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/). + - Use the ID after the colon to find which custom filter matched. + - Edit or turn off that filter in [Inbound Filters](https://sentry.io/orgredirect/organizations/:orgslug/settings/projects/:projectId/filters/data-filters/) to keep this data. #### Invalid CSP Report Reason code: `invalid-csp`. -Sentry dropped a CSP report from an ignored source, such as a browser extension, or a security report type it doesn't support. +A Content Security Policy (CSP) report was filtered because its blocked, source, or document URI matched the project's ignored sources. Sentry also uses this reason for browser reports whose type isn't `csp-violation`, which it doesn't support. - **Short:** CSP report ignored or unsupported. - **Causes:** - - A CSP violation caused by a browser extension or another source on the project's ignored list. + - The report's URI matched Sentry's default ignored sources, such as `chrome-extension://`, `moz-extension://`, or `safari-extension://` URLs. This list is on by default. + - The report's URI matched one of the project's additional ignored sources. + - The browser sent a Reporting API report whose type isn't `csp-violation`. Sentry doesn't support these, and no setting can change that. - **Actions:** - - To keep these reports, edit the ignored sources in the project's security header settings. + - For reports from browser extensions, you usually don't need to do anything. + - To keep these reports, turn off **Use default ignored sources** or edit **Additional ignored sources** in **Project Settings > Security Headers > CSP**. #### Dynamic Sampling @@ -1709,34 +1826,38 @@ Reason code: `Sampled:`, where the rule IDs identify the sampling rule Reason code: `discarded`. -Sentry dropped the stored transaction after extracting its spans, so the data is kept as spans. +Sentry discarded the transaction event after extracting its spans, so the transaction's data is kept as spans instead. A Sentry-side setting controls this, not your project. Attachments sent with the transaction are dropped and reported under this reason too. - **Short:** Transaction kept as spans instead. - **Causes:** - - Sentry stores this data as spans. + - Sentry turned on span-based storage of transactions for your organization, which it has done for many organizations. + - Your SDK sent attachments with a transaction, so they were dropped with it and counted under this reason. + - Span extraction was rate limited, but the transaction was still discarded. - **Actions:** - - You don't need to do anything. + - You usually don't need to do anything. Look for this data as spans. + - If the spans are missing too, check [Stats](/product/stats/) for rate-limited spans. + - [Contact Sentry support](https://www.sentry.help/en/) if attachments sent with transactions are missing. #### Denied Metric Name Reason code: `denied-name`. -**Legacy:** Sentry dropped a metric whose name was on the project's block list in the retired custom metrics product. +**Legacy:** Metrics were dropped because their name was on the project's block list in Sentry's retired custom metrics product. This reason is no longer reported and only appears in historical data. - **Short:** Legacy: metric name was on a block list. - **Causes:** - - A block list in the retired custom metrics product. + - A metric name was blocked in the custom metrics product, which has since been retired. - **Actions:** - - No action is needed for historical data. + - You don't need to do anything. The block list no longer exists, so there's nothing to unblock. #### Unsupported Metric Namespace Reason code: `disabled-namespace`. -Sentry dropped metrics sent to an unsupported namespace, such as the removed custom metrics product. +Sentry dropped metrics sent to a namespace it doesn't support. It only accepts its own namespaces, such as sessions, spans, and transactions, and no longer accepts custom metrics. This is an intentional drop on Sentry's side and almost never shows up in Stats. - **Short:** Metrics sent to an unsupported namespace. - **Causes:** - - Code that still calls the removed custom metrics APIs. + - Your code still sends custom metrics, a product Sentry has removed. - **Actions:** - - Remove those metric calls from your code, or move to [Application Metrics](/product/metrics/). + - Remove the custom metric calls from your code, or move to [Application Metrics](/product/metrics/). From 133bb08bda69c52d6946af2fc70ba1d671dd9c58 Mon Sep 17 00:00:00 2001 From: Shannon Anahata Date: Mon, 19 Oct 2026 12:43:05 -0700 Subject: [PATCH 7/7] Updating early access. --- docs/product/explore/dropped-data.mdx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/docs/product/explore/dropped-data.mdx b/docs/product/explore/dropped-data.mdx index bb35ed2d1c2f6..0f30339ca24b2 100644 --- a/docs/product/explore/dropped-data.mdx +++ b/docs/product/explore/dropped-data.mdx @@ -6,15 +6,9 @@ description: >- Learn how to investigate and troubleshoot dropped data in Sentry. --- - + -Dropped data is in limited early access. It's only available to organizations that Sentry has invited to try it. - - - -When data is ingested into Sentry, it can be dropped for a number of reasons. Sample rate, queue -overflow, inbound filters, and invalid or malformed data are some top examples for why data might be -dropped. +When data is ingested into Sentry, it can be dropped intentionally or unintentionally for a number of reasons. Sample rate (most commonly on purpose), queue overflow, inbound filters, and invalid or malformed data are some top examples for why data might be dropped. ## Troubleshooting Dropped Data Traces, Logs, and Application Metrics charts in [Explore](/product/explore/) can show data that Sentry did not store. Hover over the dropped data line at the bottom of the chart to see the summary. Click on the line to see the details and troubleshoot.