diff --git a/docs/cli/dif.mdx b/docs/cli/dif.mdx index 021ad24537243..ff81659d44579 100644 --- a/docs/cli/dif.mdx +++ b/docs/cli/dif.mdx @@ -91,7 +91,7 @@ sentry-cli debug-files upload --include-sources /path/to/files... This feature is supported by build tools that produce debug information files supported by Sentry such as DWARF and PDB. This applies to languages such as C/C++/C#/Swift/Rust/Zig/etc. -For Java/Kotlin and other JVM languages, use one of the plugins: [Maven](https://docs.sentry.io/platforms/java/maven/) or [Gradle](https://docs.sentry.io/platforms/java/gradle/). +For Java/Kotlin and other JVM languages, use one of the plugins: [Maven](/platforms/java/maven/) or [Gradle](/platforms/java/gradle/). diff --git a/docs/concepts/data-management/event-grouping/index.mdx b/docs/concepts/data-management/event-grouping/index.mdx index 85325f3fb0192..3c45f0a0ec0f5 100644 --- a/docs/concepts/data-management/event-grouping/index.mdx +++ b/docs/concepts/data-management/event-grouping/index.mdx @@ -57,7 +57,7 @@ Grouping falls back to messages if the stack trace, `type`, and `value` are not In addition to fingerprint-based grouping, Sentry uses AI to further improve issue grouping accuracy. This system helps identify semantically similar errors that might have different fingerprints due to minor code variations. The AI grouping system works alongside traditional fingerprinting - it only attempts to group new issues and will never split up issues that were grouped by fingerprint. -This system will not apply to any events that have fully custom fingerprints (either set via SDK or [fingerprint rules](https://docs.sentry.io/product/issues/grouping-and-fingerprints/#fingerprint-rules)). However, events with fingerprints containing `{{ default }}` will use AI grouping to calculate the `{{ default }}` portion of the fingerprint. +This system will not apply to any events that have fully custom fingerprints (either set via SDK or [fingerprint rules](/product/issues/grouping-and-fingerprints/#fingerprint-rules)). However, events with fingerprints containing `{{ default }}` will use AI grouping to calculate the `{{ default }}` portion of the fingerprint. When Sentry's default fingerprinting algorithm generates a new hash, it automatically sends the error data to [Seer](https://github.com/getsentry/seer), our AI/ML service. That error data includes the message and in-app stack frames (including those configured with stack trace rules), or all frames when no in-app frames are present. diff --git a/docs/concepts/data-management/filtering/index.mdx b/docs/concepts/data-management/filtering/index.mdx index f1b4996d1ae36..e1a3509ce5bfa 100644 --- a/docs/concepts/data-management/filtering/index.mdx +++ b/docs/concepts/data-management/filtering/index.mdx @@ -112,7 +112,7 @@ Once applied, you can track the filtered events (numbers and cause) using the gr ## Logs Filtering -Inbound data filters have partial support for [Logs](https://docs.sentry.io/product/explore/logs/). Only a subset of the available inbound filters apply to Logs. +Inbound data filters have partial support for [Logs](/product/explore/logs/). Only a subset of the available inbound filters apply to Logs. The following inbound filters **do** apply to Logs: diff --git a/docs/concepts/otlp/index.mdx b/docs/concepts/otlp/index.mdx index 0f6dde86cdfd7..dda0160c79ae5 100644 --- a/docs/concepts/otlp/index.mdx +++ b/docs/concepts/otlp/index.mdx @@ -10,8 +10,8 @@ keywords: ["otlp", "otel", "opentelemetry"] Sentry can ingest [OpenTelemetry](https://opentelemetry.io) traces directly via the [OpenTelemetry Protocol](https://opentelemetry.io/docs/specs/otel/protocol/). If you have an existing OpenTelemetry trace instrumentation, you can configure your OpenTelemetry exporter to send traces to Sentry directly. Sentry's OTLP ingestion endpoint is currently in development, and has a few known limitations: - Span events are not supported. All span events are dropped during ingestion. -- Span links are partially supported. We ingest and display span links, but they cannot be searched, filtered, or aggregated. Links are are shown in the [Trace View](https://docs.sentry.io/concepts/key-terms/tracing/trace-view/). -- Array attributes are partially supported. We ingest and display array attributes, but they cannot be searched, filtered, or aggregated. Array attributes are shown in the [Trace View](https://docs.sentry.io/concepts/key-terms/tracing/trace-view/). +- Span links are partially supported. We ingest and display span links, but they cannot be searched, filtered, or aggregated. Links are are shown in the [Trace View](/concepts/key-terms/tracing/trace-view/). +- Array attributes are partially supported. We ingest and display array attributes, but they cannot be searched, filtered, or aggregated. Array attributes are shown in the [Trace View](/concepts/key-terms/tracing/trace-view/). - Sentry does not support ingesting OTLP metrics or OTLP logs. The easiest way to configure an OpenTelemetry exporter is with environment variables. You'll need to configure the trace endpoint URL, as well as the authentication headers. Set these variables on the server where your application is running. diff --git a/docs/concepts/search/searchable-properties/session-replay.mdx b/docs/concepts/search/searchable-properties/session-replay.mdx index 280192fe72448..1ebc82c0a7e97 100644 --- a/docs/concepts/search/searchable-properties/session-replay.mdx +++ b/docs/concepts/search/searchable-properties/session-replay.mdx @@ -102,7 +102,7 @@ The `title` of an element that was clicked. For example, `Save this comment` wou ### `count_dead_clicks` -The number of [dead clicks](https://docs.sentry.io/product/explore/session-replay/replay-page-and-filters/#:~:text=Dead%20Clicks%3A%20User%20clicks%20on%20a%20and%20button%20tags%20that%20do%20not%20result%20in%20any%20page%20activity%20after%207%20seconds) within a replay. +The number of [dead clicks](/product/explore/session-replay/replay-page-and-filters/#:~:text=Dead%20Clicks%3A%20User%20clicks%20on%20a%20and%20button%20tags%20that%20do%20not%20result%20in%20any%20page%20activity%20after%207%20seconds) within a replay. - **Type:** number @@ -114,7 +114,7 @@ The number of errors within a replay. ### `count_rage_clicks` -The number of [rage clicks]() within a replay. +The number of [rage clicks](/product/explore/session-replay/replay-page-and-filters/#:~:text=Rage%20Clicks%3A%20Five%20or%20more%20clicks%20on%20a%20dead%20element%20(it%20exhibits%20no%20page%20activity%20after%207%20seconds.)%20Rage%20clicks%20are%20a%20subset%20of%20dead%20clicks>) within a replay. - **Type:** number @@ -138,7 +138,7 @@ The number of URLs that the user visited during a replay recording. ### `dead.selector` -Similar to the `click.selector` search property, but only queries on [dead clicks](https://docs.sentry.io/product/explore/session-replay/replay-page-and-filters/#:~:text=Dead%20Clicks%3A%20User%20clicks%20on%20a%20and%20button%20tags%20that%20do%20not%20result%20in%20any%20page%20activity%20after%207%20seconds). An element identified using a subset of CSS selector syntax. For example, `#section-1` or `span.active` or `span[role=button]` or `.active[role=button]` would all match the element ``. Note that, CSS combinators, pseudo selectors, and attr selectors other than `=` are not supported. +Similar to the `click.selector` search property, but only queries on [dead clicks](/product/explore/session-replay/replay-page-and-filters/#:~:text=Dead%20Clicks%3A%20User%20clicks%20on%20a%20and%20button%20tags%20that%20do%20not%20result%20in%20any%20page%20activity%20after%207%20seconds). An element identified using a subset of CSS selector syntax. For example, `#section-1` or `span.active` or `span[role=button]` or `.active[role=button]` would all match the element ``. Note that, CSS combinators, pseudo selectors, and attr selectors other than `=` are not supported. - **Type:** string @@ -228,7 +228,7 @@ The id of the project. ### `rage.selector` -Similar to the `click.selector` search property, but only queries on [rage clicks](). An element identified using a subset of CSS selector syntax. For example, `#section-1` or `span.active` or `span[role=button]` or `.active[role=button]` would all match the element ``. Note that, CSS combinators, pseudo selectors, and attr selectors other than `=` are not supported. +Similar to the `click.selector` search property, but only queries on [rage clicks](). An element identified using a subset of CSS selector syntax. For example, `#section-1` or `span.active` or `span[role=button]` or `.active[role=button]` would all match the element ``. Note that, CSS combinators, pseudo selectors, and attr selectors other than `=` are not supported. - **Type:** string diff --git a/docs/contributing/approach/sdk-docs/write-quick-start.mdx b/docs/contributing/approach/sdk-docs/write-quick-start.mdx index 80e1b919e267a..467d80871f14e 100644 --- a/docs/contributing/approach/sdk-docs/write-quick-start.mdx +++ b/docs/contributing/approach/sdk-docs/write-quick-start.mdx @@ -90,7 +90,7 @@ Use this template for your manual setup guides. Keep your instructions concise a We recommend you base your guide on a similar existing SDK page, such as: -- [Next.js quick start guide manual setup](https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/) +- [Next.js quick start guide manual setup](/platforms/javascript/guides/nextjs/manual-setup/) **Minimal structure:** diff --git a/docs/organization/integrations/deployment/expo/index.mdx b/docs/organization/integrations/deployment/expo/index.mdx index 6142102614681..6c24cfee83542 100644 --- a/docs/organization/integrations/deployment/expo/index.mdx +++ b/docs/organization/integrations/deployment/expo/index.mdx @@ -49,5 +49,5 @@ To see your Sentry Issues and Replays in Expo dashboard, you'll first need to en npx @sentry/wizard@latest -i reactNative ``` - For more details on using Sentry with Expo, refer to the [Sentry documentation](https://docs.sentry.io/platforms/react-native/) for React Native applications. + For more details on using Sentry with Expo, refer to the [Sentry documentation](/platforms/react-native/) for React Native applications. diff --git a/docs/organization/integrations/integration-platform/webhooks/issues.mdx b/docs/organization/integrations/integration-platform/webhooks/issues.mdx index 02baeff4abddb..97e6dc6811487 100644 --- a/docs/organization/integrations/integration-platform/webhooks/issues.mdx +++ b/docs/organization/integrations/integration-platform/webhooks/issues.mdx @@ -56,7 +56,7 @@ A status can mean multiple things, so substatus gives more details about the sta * `ignoreWindow`: Used with `ignoreCount` indicating the number of minutes that `ignoreCount` occurences will be ignored * `ignoreUserCount`: Maximun number of users who are affected by an archived issue before it gets escalated * `ignoreUserWindow`: Used with `ignoreUserCount` indicating the number of minutes that `ignoreUserCount` affected users will be ignored -* `ignoreDuration`: The duration (in minutes) that an archived issue should be ignored before it gets escalated. Increase in the number of users affected or the number of occurences will not escalate before this duration has passed unless there is a spike. To learn more about how this works, see [Escalating Issues Algorithm](https://docs.sentry.io/product/issues/states-triage/escalating-issues/). +* `ignoreDuration`: The duration (in minutes) that an archived issue should be ignored before it gets escalated. Increase in the number of users affected or the number of occurences will not escalate before this duration has passed unless there is a spike. To learn more about how this works, see [Escalating Issues Algorithm](/product/issues/states-triage/escalating-issues/). ```json { diff --git a/docs/platforms/android/configuration/shared-environments.mdx b/docs/platforms/android/configuration/shared-environments.mdx index fed23e28a2023..115f7ebbe05ec 100644 --- a/docs/platforms/android/configuration/shared-environments.mdx +++ b/docs/platforms/android/configuration/shared-environments.mdx @@ -6,7 +6,7 @@ sidebar_order: 2000 -Using the Sentry SDK within another SDK is [discouraged](https://docs.sentry.io/platforms/). This can lead to unexpected behaviour and potential data leakage. If you need to use Sentry within another SDK, please follow the best practices outlined below. +Using the Sentry SDK within another SDK is [discouraged](/platforms/). This can lead to unexpected behaviour and potential data leakage. If you need to use Sentry within another SDK, please follow the best practices outlined below. diff --git a/docs/platforms/apple/common/install/swift-package-manager.mdx b/docs/platforms/apple/common/install/swift-package-manager.mdx index ddcc3d36b162c..c9565dfab7a94 100644 --- a/docs/platforms/apple/common/install/swift-package-manager.mdx +++ b/docs/platforms/apple/common/install/swift-package-manager.mdx @@ -14,7 +14,7 @@ You will then be prompted to choose one of the options `Sentry`, `Sentry-Dynamic - `Sentry` is the static framework, which is the recommended option if you prefer a fast app start time. - `Sentry-Dynamic` is the dynamic framework. -- `SentrySwiftUI` is used to track performance of SwiftUI views, see more information in the [docs](https://docs.sentry.io/platforms/apple/guides/ios/tracing/instrumentation/swiftui-instrumentation/). +- `SentrySwiftUI` is used to track performance of SwiftUI views, see more information in the [docs](/platforms/apple/guides/ios/tracing/instrumentation/swiftui-instrumentation/). Xcode allows you to choose many options, but you should choose only one of the diff --git a/docs/platforms/dart/guides/flutter/migration.mdx b/docs/platforms/dart/guides/flutter/migration.mdx index 3ab1eee9899a0..9668157805786 100644 --- a/docs/platforms/dart/guides/flutter/migration.mdx +++ b/docs/platforms/dart/guides/flutter/migration.mdx @@ -81,7 +81,7 @@ During `SentryFlutter.init` the SDK will inject the CDN script into the HTML's h This change allows us to utilize existing SDK functionality such as native JS Errors, add new features such as release health and makes it easier to develop features such as debug ids in the future. If you initialize the native SDKs separately with `options.autoInitializeNativeSdk = false` you will also need to add the Sentry Browser Javascript SDK to your website's HTML head. -[Read this guide](https://docs.sentry.io/platforms/javascript/install/loader/#cdn) on how to install the SDK into your application via CDN bundles. +[Read this guide](/platforms/javascript/install/loader/#cdn) on how to install the SDK into your application via CDN bundles. ### Drift Integration diff --git a/docs/platforms/dotnet/common/configuration/msbuild.mdx b/docs/platforms/dotnet/common/configuration/msbuild.mdx index b490444a92aab..14f8861da89ed 100644 --- a/docs/platforms/dotnet/common/configuration/msbuild.mdx +++ b/docs/platforms/dotnet/common/configuration/msbuild.mdx @@ -176,7 +176,7 @@ Sentry will try to determine the release version automatically by checking the f -Enable `SentrySetCommits` to automatically [associate commits with the release](https://docs.sentry.io/cli/releases/#commit-integration). +Enable `SentrySetCommits` to automatically [associate commits with the release](/cli/releases/#commit-integration). diff --git a/docs/platforms/dotnet/common/crons/hangfire/index.mdx b/docs/platforms/dotnet/common/crons/hangfire/index.mdx index cef2fcded85ac..32b874fe98a31 100644 --- a/docs/platforms/dotnet/common/crons/hangfire/index.mdx +++ b/docs/platforms/dotnet/common/crons/hangfire/index.mdx @@ -4,7 +4,7 @@ description: "Learn more about how to monitor your Hangfire jobs." sidebar_order: 5001 --- -The .NET SDK provides an integration with [Hangfire](https://www.hangfire.io/) to monitor your jobs by automatically [creating check-ins for them](https://docs.sentry.io/product/crons/job-monitoring/). The SDK relies on job filters that are set up when you call `UseSentry`. For example: +The .NET SDK provides an integration with [Hangfire](https://www.hangfire.io/) to monitor your jobs by automatically [creating check-ins for them](/product/crons/job-monitoring/). The SDK relies on job filters that are set up when you call `UseSentry`. For example: ```csharp using Hangfire; diff --git a/docs/platforms/dotnet/common/data-management/data-collected.mdx b/docs/platforms/dotnet/common/data-management/data-collected.mdx index 4bfbeddbe8e0a..5668919579c48 100644 --- a/docs/platforms/dotnet/common/data-management/data-collected.mdx +++ b/docs/platforms/dotnet/common/data-management/data-collected.mdx @@ -36,7 +36,7 @@ To enable sending the user's IP address, set the option `SendDefaultPii = true` Even if enabled, whether you're able to send the user's IP address or not, will depend on the integrations you enable in Sentry's SDK. Most integrations won't set the user's IP address at all. -You can [prevent Sentry from storing IP Addresses](https://docs.sentry.io/platforms/native/enriching-events/identify-user/#ip_address) either by configuring this in the "Security & Privacy" settings of your Sentry project or using [server-side data scrubbing](https://docs.sentry.io/security-legal-pii/scrubbing/server-side-scrubbing/). +You can [prevent Sentry from storing IP Addresses](/platforms/native/enriching-events/identify-user/#ip_address) either by configuring this in the "Security & Privacy" settings of your Sentry project or using [server-side data scrubbing](/security-legal-pii/scrubbing/server-side-scrubbing/). ## Request URL diff --git a/docs/platforms/godot/configuration/stack-traces.mdx b/docs/platforms/godot/configuration/stack-traces.mdx index c23d84acc78b1..d675b8d36f616 100644 --- a/docs/platforms/godot/configuration/stack-traces.mdx +++ b/docs/platforms/godot/configuration/stack-traces.mdx @@ -114,7 +114,7 @@ If you need to `Export with Debug`, you can compile a debug template using the ` ## Uploading Debug Symbols -In order to get readable stack traces in Sentry, you also need to upload your debug symbols. The easiest way to do it is by using [Sentry CLI](https://docs.sentry.io/cli/). This tool allows you to upload the necessary debug information, making the stack traces useful for debugging. +In order to get readable stack traces in Sentry, you also need to upload your debug symbols. The easiest way to do it is by using [Sentry CLI](/cli/). This tool allows you to upload the necessary debug information, making the stack traces useful for debugging. diff --git a/docs/platforms/java/common/integrations/reactor.mdx b/docs/platforms/java/common/integrations/reactor.mdx index c3836ff6ddece..31659a6c67ea0 100644 --- a/docs/platforms/java/common/integrations/reactor.mdx +++ b/docs/platforms/java/common/integrations/reactor.mdx @@ -107,6 +107,6 @@ tx.finish() For more complex use cases, you can also use `SentryReactorUtils.withSentryForkedRoots` to fork the root scopes or `SentryReactorUtils.withSentryScopes` to wrap the operation in arbitrary scopes. -For more information on scopes and scope forking, please consult our [scopes documentation](https://docs.sentry.io/platforms/java/enriching-events/scopes). +For more information on scopes and scope forking, please consult our [scopes documentation](/platforms/java/enriching-events/scopes). You can also consult our GitHub repository for practical examples on how to use our Reactor integration with Spring WebFlux with [Spring Boot 2](https://github.com/getsentry/sentry-java/tree/main/sentry-samples/sentry-samples-spring-boot-webflux) and [Spring Boot 3](https://github.com/getsentry/sentry-java/tree/main/sentry-samples/sentry-samples-spring-boot-webflux-jakarta). diff --git a/docs/platforms/javascript/common/best-practices/shared-environments.mdx b/docs/platforms/javascript/common/best-practices/shared-environments.mdx index 73042cd459153..4c3372127ad50 100644 --- a/docs/platforms/javascript/common/best-practices/shared-environments.mdx +++ b/docs/platforms/javascript/common/best-practices/shared-environments.mdx @@ -27,7 +27,7 @@ keywords: -We recommend using JavaScript SDK `8.x` and above when using the SDK with shared environments. Check out our [migration docs](https://docs.sentry.io/platforms/javascript/migration/) to upgrade from an older SDK version to `8.x` and above. +We recommend using JavaScript SDK `8.x` and above when using the SDK with shared environments. Check out our [migration docs](/platforms/javascript/migration/) to upgrade from an older SDK version to `8.x` and above. diff --git a/docs/platforms/javascript/common/configuration/filtering.mdx b/docs/platforms/javascript/common/configuration/filtering.mdx index cbb6a1e76eba2..877c86348ce5b 100644 --- a/docs/platforms/javascript/common/configuration/filtering.mdx +++ b/docs/platforms/javascript/common/configuration/filtering.mdx @@ -106,7 +106,7 @@ If you choose a mode to only apply tags, the tags can then be used in Sentry to -The `thirdPartyErrorFilterIntegration` will not work with the [Sentry Loader Script or CDN Bundles](https://docs.sentry.io/platforms/javascript/install/loader/). +The `thirdPartyErrorFilterIntegration` will not work with the [Sentry Loader Script or CDN Bundles](/platforms/javascript/install/loader/). This is the case because the Sentry Loader Script and CDN Bundles are detected as "third party" by the integration. This makes it apply the chosen behavior to almost all events, since the Sentry SDK wraps many browser-native APIs. diff --git a/docs/platforms/javascript/common/data-management/data-collected/index.mdx b/docs/platforms/javascript/common/data-management/data-collected/index.mdx index 2c7ecff1cc003..a6488d9c8532c 100644 --- a/docs/platforms/javascript/common/data-management/data-collected/index.mdx +++ b/docs/platforms/javascript/common/data-management/data-collected/index.mdx @@ -162,5 +162,5 @@ By default, the Sentry SDK sends information about the device and runtime to Sen At the time of a native crash, the stack of each thread is collected and sent to Sentry as part of the Minidump snapshot. This information is sent to Sentry by default, but dropped after processing the event in the backend. - These files are not stored by default, but you can [enable Minidump Storage](https://docs.sentry.io/platforms/native/guides/minidumps/enriching-events/attachments/#store-minidumps-as-attachments) in the Sentry organization or project settings. + These files are not stored by default, but you can [enable Minidump Storage](/platforms/native/guides/minidumps/enriching-events/attachments/#store-minidumps-as-attachments) in the Sentry organization or project settings. diff --git a/docs/platforms/javascript/common/migration/v9-to-v10.mdx b/docs/platforms/javascript/common/migration/v9-to-v10.mdx index 73e3650f65c7d..f43655acfeedd 100644 --- a/docs/platforms/javascript/common/migration/v9-to-v10.mdx +++ b/docs/platforms/javascript/common/migration/v9-to-v10.mdx @@ -60,13 +60,13 @@ The `_experiments.autoFlushOnFeedback` option was removed and is now the default ## Update: User IP Address collection gated by `sendDefaultPii` Version `10.4.0` introduced a change that should have ideally been introduced with `10.0.0` of the SDK. -Originally destined for [version `9.0.0`](https://docs.sentry.io/platforms/javascript/migration/v8-to-v9/#behavior-changes), but having not the desired effect until v10, +Originally destined for [version `9.0.0`](/platforms/javascript/migration/v8-to-v9/#behavior-changes), but having not the desired effect until v10, SDKs will now control IP address inference of user IP addresses depending on the value of the top level `sendDefaultPii` init option. - If `sendDefaultPii` is `true`, Sentry will infer the IP address of users' devices to events (errors, traces, replays, etc) in all browser-based SDKs. - If `sendDefaultPii` is `false` or not set, Sentry will not infer or collect IP address data. -Given that this was already [advertised behaviour](https://docs.sentry.io/platforms/javascript/data-management/data-collected/#users-ip-address-and-location) since v9, +Given that this was already [advertised behaviour](/platforms/javascript/data-management/data-collected/#users-ip-address-and-location) since v9, we classify the change [as a fix](https://github.com/getsentry/sentry-javascript/pull/17364), though we recognize the potential impact of it. If you want to continue receiving user IP addresses, set `sendDefaultPii: true` in your `Sentry.init` config: @@ -88,7 +88,7 @@ The changes outlined in this section detail deprecated APIs that are now removed - `BaseClient` was removed, use `Client` as a direct replacement. - `hasTracingEnabled` was removed, use `hasSpansEnabled` as a direct replacement. -- The internal `logger` and type `Logger` exports in `@sentry/core` were removed, use `debug` and type `SentryDebugLogger` instead. This does not affect the `logger` export used for [Sentry Logging](https://docs.sentry.io/product/explore/logs/getting-started/) +- The internal `logger` and type `Logger` exports in `@sentry/core` were removed, use `debug` and type `SentryDebugLogger` instead. This does not affect the `logger` export used for [Sentry Logging](/product/explore/logs/getting-started/) - The `_experiments.enableLogs` and `_experiments.beforeSendLog` options were removed, use the top-level `enableLogs` and `beforeSendLog` options instead. ```js diff --git a/docs/platforms/javascript/common/session-replay/configuration.mdx b/docs/platforms/javascript/common/session-replay/configuration.mdx index fb9ce71b48a4f..aecf26544c1ad 100644 --- a/docs/platforms/javascript/common/session-replay/configuration.mdx +++ b/docs/platforms/javascript/common/session-replay/configuration.mdx @@ -107,7 +107,7 @@ replayIntegration({ ## Identifying Users -You can use the Sentry SDK to link a user to a session, and add user information to events to help you identify users that are experiencing an issue. See [setUser](https://docs.sentry.io/platforms/javascript/guides/nextjs/apis/#setUser) to learn how to to set the user on Sentry events. +You can use the Sentry SDK to link a user to a session, and add user information to events to help you identify users that are experiencing an issue. See [setUser](/platforms/javascript/guides/nextjs/apis/#setUser) to learn how to to set the user on Sentry events. ```javascript Sentry.setUser({ email: "jane.doe@example.com" }); diff --git a/docs/platforms/javascript/common/session-replay/troubleshooting.mdx b/docs/platforms/javascript/common/session-replay/troubleshooting.mdx index 1fd9994070cdf..ac44eeefdad9e 100644 --- a/docs/platforms/javascript/common/session-replay/troubleshooting.mdx +++ b/docs/platforms/javascript/common/session-replay/troubleshooting.mdx @@ -161,9 +161,9 @@ With this configuration, Replay is able to capture response bodies from Apollo C Using the - [`captureConsoleIntegration`](https://docs.sentry.io/platforms/javascript/configuration/integrations/captureconsole/) + [`captureConsoleIntegration`](/platforms/javascript/configuration/integrations/captureconsole/) can cause replays to record as if you have triggered an exception. You can use - [`beforeErrorSampling`](https://docs.sentry.io/platforms/javascript/guides/sveltekit/session-replay/understanding-sessions/#ignore-certain-errors-for-error-sampling) + [`beforeErrorSampling`](/platforms/javascript/guides/sveltekit/session-replay/understanding-sessions/#ignore-certain-errors-for-error-sampling) to avoid this behavior. diff --git a/docs/platforms/javascript/common/session-replay/understanding-sessions.mdx b/docs/platforms/javascript/common/session-replay/understanding-sessions.mdx index 508a93aeb2fee..cf383396df650 100644 --- a/docs/platforms/javascript/common/session-replay/understanding-sessions.mdx +++ b/docs/platforms/javascript/common/session-replay/understanding-sessions.mdx @@ -206,7 +206,7 @@ Note that this hook only runs in `buffer` mode, as `session` mode records contin Replays do not need to be connected to an application error, they can also be used to supplement your support tickets. Depending on the level of customization provided by your support widget, it is possible to send a replay to -Sentry when your users open the support widget. Note that Sentry's [User Feedback](https://docs.sentry.io/product/user-feedback/#user-feedback-widget) +Sentry when your users open the support widget. Note that Sentry's [User Feedback](/product/user-feedback/#user-feedback-widget) provides this functionality by default! You can then send the ID of the replay along with the support ticket that your user submits. The ID can be used to reference the replay in Sentry. Alternatively, you can search for replays by a user identifier such as email. diff --git a/docs/platforms/javascript/common/troubleshooting/index.mdx b/docs/platforms/javascript/common/troubleshooting/index.mdx index 379ea2e883a34..b397cf4ed7e2c 100644 --- a/docs/platforms/javascript/common/troubleshooting/index.mdx +++ b/docs/platforms/javascript/common/troubleshooting/index.mdx @@ -674,7 +674,7 @@ shamefully-hoist=true Seeing this warning in your dev build might be misleading due to Next.js dev server internals. - In case you are using Session Replay and experience performance issues with the client instrumentation hook, you can try lazy-loading session replay as described [here](https://docs.sentry.io/platforms/javascript/guides/nextjs/session-replay/#lazy-loading-replay). + In case you are using Session Replay and experience performance issues with the client instrumentation hook, you can try lazy-loading session replay as described [here](/platforms/javascript/guides/nextjs/session-replay/#lazy-loading-replay). If you want to init the SDK itself at a later point, this will result in tracing data loosing accuracy and errors could happen before the SDK is initialized. This should be a tradeoff you make based on your use case, although we recommend initializing the SDK as early as possible. diff --git a/docs/platforms/native/advanced-usage/container-environments/index.mdx b/docs/platforms/native/advanced-usage/container-environments/index.mdx index 173edd3e9e63f..100ee6741912f 100644 --- a/docs/platforms/native/advanced-usage/container-environments/index.mdx +++ b/docs/platforms/native/advanced-usage/container-environments/index.mdx @@ -5,10 +5,10 @@ sidebar_order: 2000 --- ## Database Path on a Mounted Volume -The Sentry Native SDK uses a [database path](https://docs.sentry.io/platforms/native/configuration/options/#database-path) to store events and crash reports. When you are using a containerized environment, you may want to mount a volume to persist the database across container restarts to avoid losing this data. +The Sentry Native SDK uses a [database path](/platforms/native/configuration/options/#database-path) to store events and crash reports. When you are using a containerized environment, you may want to mount a volume to persist the database across container restarts to avoid losing this data. ## Waiting for `Crashpad` to Finish -Starting with SDK version [0.8.3](https://github.com/getsentry/sentry-native/releases/tag/0.8.3) for Linux and [0.9.0](https://github.com/getsentry/sentry-native/releases/tag/0.9.0) for Windows, the [option `crashpad_wait_for_upload`](https://docs.sentry.io/platforms/native/configuration/options/#crashpad-wait-for-upload) allows the application to wait for the `crashpad_handler` to finish before a shutdown-after-crash. +Starting with SDK version [0.8.3](https://github.com/getsentry/sentry-native/releases/tag/0.8.3) for Linux and [0.9.0](https://github.com/getsentry/sentry-native/releases/tag/0.9.0) for Windows, the [option `crashpad_wait_for_upload`](/platforms/native/configuration/options/#crashpad-wait-for-upload) allows the application to wait for the `crashpad_handler` to finish before a shutdown-after-crash. In SDK versions older than `0.8.3`/`0.9.0`, you could use a script similar to the example below to tie container shutdown to the `crashpad_handler` process: ```bash diff --git a/docs/platforms/native/advanced-usage/signal-handling/index.mdx b/docs/platforms/native/advanced-usage/signal-handling/index.mdx index c2de85d73905b..ba6ab2b4f5ca7 100644 --- a/docs/platforms/native/advanced-usage/signal-handling/index.mdx +++ b/docs/platforms/native/advanced-usage/signal-handling/index.mdx @@ -20,7 +20,7 @@ Sentry's Native SDK comes with its own set of signal handlers. There may be conf * Refrain from registering a conflicting signal handler in your application. * If you have to, register your handler after `sentry_init()` and let it invoke Sentry's handler after it finishes, or you won't get a report. * If you or one of your dependencies register a handler for the signals listed below _before_ you call `sentry_init()`, Sentry will reinstall that handler as soon as you call `sentry_close()`. Only the `inproc` backend invokes your installed handler at the end of Sentry's handler. -* If you want to act on any crash and not consider specific signals, [register an `on_crash()` hook](https://docs.sentry.io/platforms/native/configuration/filtering/#using-on_crash) instead of registering a signal handler. +* If you want to act on any crash and not consider specific signals, [register an `on_crash()` hook](/platforms/native/configuration/filtering/#using-on_crash) instead of registering a signal handler. ### Signals of Interest diff --git a/docs/platforms/native/advanced-usage/stack-overflow-handling/index.mdx b/docs/platforms/native/advanced-usage/stack-overflow-handling/index.mdx index 5c9e798efcd75..1a60f5cddc7eb 100644 --- a/docs/platforms/native/advanced-usage/stack-overflow-handling/index.mdx +++ b/docs/platforms/native/advanced-usage/stack-overflow-handling/index.mdx @@ -20,7 +20,7 @@ especially true for users who use the `on_crash` or `before_send` hook over whic On Linux (and other `POSIX` systems), users should preallocate everything before their hooks run and only move data into preallocated storage because heap allocations can also fail inside the signal handler (constructing `sentry_value_t` is okay because we use a safe allocator inside the signal handler). See also: -[What to consider when writing on_crash hooks](https://docs.sentry.io/platforms/native/advanced-usage/signal-handling/#what-to-consider-when-writing-on_crash-hooks). +[What to consider when writing on_crash hooks](/platforms/native/advanced-usage/signal-handling/#what-to-consider-when-writing-on_crash-hooks). ## How do OSes differ, and how can Sentry help? diff --git a/docs/platforms/native/common/data-management/data-collected.mdx b/docs/platforms/native/common/data-management/data-collected.mdx index c87e8410db1ce..e6ef56a35fbaa 100644 --- a/docs/platforms/native/common/data-management/data-collected.mdx +++ b/docs/platforms/native/common/data-management/data-collected.mdx @@ -15,6 +15,6 @@ The Sentry SDK collects information about the device, such as the name, version ## Thread Stack Information At the time of a crash, the stack of each thread is collected and sent to Sentry as part of the Minidump snapshot for backends `crashpad` and `breakpad`. This information is sent to Sentry by default, but dropped after processing the event in the backend. -These files are not stored by default, but you can [enable Minidump Storage](https://docs.sentry.io/platforms/native/guides/minidumps/enriching-events/attachments/#store-minidumps-as-attachments) in the Sentry organization or project settings. +These files are not stored by default, but you can [enable Minidump Storage](/platforms/native/guides/minidumps/enriching-events/attachments/#store-minidumps-as-attachments) in the Sentry organization or project settings. The `inproc` backend stack walks solely in the client and thus only sends the resulting stack traces. diff --git a/docs/platforms/native/configuration/transports.mdx b/docs/platforms/native/configuration/transports.mdx index 3f67470af48fe..f65b91b6067a0 100644 --- a/docs/platforms/native/configuration/transports.mdx +++ b/docs/platforms/native/configuration/transports.mdx @@ -73,7 +73,7 @@ sentry_init(options); We support `HTTP` proxies on all platforms, and `SOCKS5` proxies on Linux and macOS. On Windows, `https` proxy servers are not supported by the default transport (WinHTTP). The proxy may also contain authentication (`"http://user:password@my.proxy:8080"`) or be written in IPv6 format (`"http://[::1]:8080"`). -The SDK will always automatically configure the HTTP proxy if a corresponding environment variable is set. Depending on the [DSN](https://docs.sentry.io/concepts/key-terms/dsn-explainer/) protocol, the matching `http(s)_proxy` environment variable is read. So for a usual Sentry-hosted `DSN`, you must set the `https_proxy` variable . +The SDK will always automatically configure the HTTP proxy if a corresponding environment variable is set. Depending on the [DSN](/concepts/key-terms/dsn-explainer/) protocol, the matching `http(s)_proxy` environment variable is read. So for a usual Sentry-hosted `DSN`, you must set the `https_proxy` variable . If you don't want the SDK to configure the HTTP proxy from the environment variables automatically, you can set the proxy option to an empty string value: ```c diff --git a/docs/platforms/python/integrations/strawberry/index.mdx b/docs/platforms/python/integrations/strawberry/index.mdx index c1cf162c11433..479355efc9900 100644 --- a/docs/platforms/python/integrations/strawberry/index.mdx +++ b/docs/platforms/python/integrations/strawberry/index.mdx @@ -144,7 +144,7 @@ The Strawberry integration can capture request and response bodies for each GraphQL error that happens. Since these may contain sensitive data, this is the default behavior. To enable capturing request and response bodies, the SDK needs to be initialized with the -[send_default_pii](https://docs.sentry.io/platforms/python/configuration/options/#send-default-pii) option set to `True`. +[send_default_pii](/platforms/python/configuration/options/#send-default-pii) option set to `True`. ```python sentry_sdk.init( diff --git a/docs/platforms/rust/guides/actix-web/index.mdx b/docs/platforms/rust/guides/actix-web/index.mdx index 123c92a8ab72c..beb77f680c085 100644 --- a/docs/platforms/rust/guides/actix-web/index.mdx +++ b/docs/platforms/rust/guides/actix-web/index.mdx @@ -6,7 +6,7 @@ description: "Learn about monitoring your Actix Web application with Sentry." The Sentry SDK offers a middleware for the [Actix Web](https://actix.rs/) framework that supports: - Capturing server errors returned by Actix Web services. -- Starting a [transaction](https://docs.sentry.io/concepts/key-terms/tracing/) for each request-response cycle. +- Starting a [transaction](/concepts/key-terms/tracing/) for each request-response cycle. ## Install diff --git a/docs/platforms/unity/data-management/data-collected.mdx b/docs/platforms/unity/data-management/data-collected.mdx index d85a5af244f8c..4ef4e6d7e9e46 100644 --- a/docs/platforms/unity/data-management/data-collected.mdx +++ b/docs/platforms/unity/data-management/data-collected.mdx @@ -36,7 +36,7 @@ To enable sending the user's IP address, set the option `SendDefaultPii = true` Even if enabled, whether you're able to send the user's IP address or not, will depend on the integrations you enable in Sentry's SDK. Most integrations won't set the user's IP address at all. -You can [prevent Sentry from storing IP Addresses](https://docs.sentry.io/platforms/native/enriching-events/identify-user/#ip_address) either by configuring this in the "Security & Privacy" settings of your Sentry project or using [server-side data scrubbing](https://docs.sentry.io/security-legal-pii/scrubbing/server-side-scrubbing/). +You can [prevent Sentry from storing IP Addresses](/platforms/native/enriching-events/identify-user/#ip_address) either by configuring this in the "Security & Privacy" settings of your Sentry project or using [server-side data scrubbing](/security-legal-pii/scrubbing/server-side-scrubbing/). ## Request URL diff --git a/docs/platforms/unity/game-consoles/index.mdx b/docs/platforms/unity/game-consoles/index.mdx index 9125a85201392..b39558aad252c 100644 --- a/docs/platforms/unity/game-consoles/index.mdx +++ b/docs/platforms/unity/game-consoles/index.mdx @@ -4,7 +4,7 @@ description: "Learn how to configure your Unity SDK to capture errors on Xbox, P sidebar_order: 7 --- -Sentry supports [PlayStation](https://docs.sentry.io/platforms/playstation/), [Xbox](https://docs.sentry.io/platforms/xbox/) and [Nintendo Switch](https://docs.sentry.io/platforms/nintendo-switch/) via the Unity SDK. Once you submit the middleware verification process, we'll reach out and send you an invite to our private GitHub repositories with console specific code. +Sentry supports [PlayStation](/platforms/playstation/), [Xbox](/platforms/xbox/) and [Nintendo Switch](/platforms/nintendo-switch/) via the Unity SDK. Once you submit the middleware verification process, we'll reach out and send you an invite to our private GitHub repositories with console specific code. This allows your configuration and custom data set via C# to show up in C# exceptions as well as crash dumps on these console platforms. diff --git a/docs/platforms/unreal/configuration/debug-symbols/index.mdx b/docs/platforms/unreal/configuration/debug-symbols/index.mdx index 8c3f0a8f8c39f..23acb350e77b9 100644 --- a/docs/platforms/unreal/configuration/debug-symbols/index.mdx +++ b/docs/platforms/unreal/configuration/debug-symbols/index.mdx @@ -65,6 +65,6 @@ IOSPlatform.bGeneratedSYM = true; -Unreal Engine 5.3 and newer supports [Modernized Xcode Workflow](https://dev.epicgames.com/documentation/en-us/unreal-engine/using-modern-xcode-in-unreal-engine-5.3-and-newer) which aligns more closely with standard Apple development practices. In this case, symbol upload can be handled during the custom [Xcode Build Phase](https://docs.sentry.io/platforms/apple/guides/macos/dsym/#xcode-build-phase). +Unreal Engine 5.3 and newer supports [Modernized Xcode Workflow](https://dev.epicgames.com/documentation/en-us/unreal-engine/using-modern-xcode-in-unreal-engine-5.3-and-newer) which aligns more closely with standard Apple development practices. In this case, symbol upload can be handled during the custom [Xcode Build Phase](/platforms/apple/guides/macos/dsym/#xcode-build-phase). diff --git a/docs/platforms/unreal/game-consoles/index.mdx b/docs/platforms/unreal/game-consoles/index.mdx index 1332932574fda..2491a7bcd0b6f 100644 --- a/docs/platforms/unreal/game-consoles/index.mdx +++ b/docs/platforms/unreal/game-consoles/index.mdx @@ -4,7 +4,7 @@ description: "Learn how to configure your SDK to capture errors on Xbox, PlaySta sidebar_order: 7 --- -Sentry supports [PlayStation](https://docs.sentry.io/platforms/playstation/), [Xbox](https://docs.sentry.io/platforms/xbox/) and [Nintendo Switch](https://docs.sentry.io/platforms/nintendo-switch/) via the Unreal Engine SDK extensions. Once you submit the middleware verification process, we'll reach out and send you an invite to our private GitHub repositories with console specific code. +Sentry supports [PlayStation](/platforms/playstation/), [Xbox](/platforms/xbox/) and [Nintendo Switch](/platforms/nintendo-switch/) via the Unreal Engine SDK extensions. Once you submit the middleware verification process, we'll reach out and send you an invite to our private GitHub repositories with console specific code. This allows your configuration and custom data set via C++ or Blueprints to show up in non-fatal events as well as crash dumps on these console platforms. diff --git a/docs/product/crons/legacy-endpoint-migration.mdx b/docs/product/crons/legacy-endpoint-migration.mdx index b384f5ae1ea76..dd2cd4184a496 100644 --- a/docs/product/crons/legacy-endpoint-migration.mdx +++ b/docs/product/crons/legacy-endpoint-migration.mdx @@ -23,7 +23,7 @@ The SDKs do not utilize our legacy endpoints. Versions of the `sentry-cli` **before v2.19.0** are using the legacy API endpoints. [Please upgrade](/cli/installation/#updating-and-uninstalling) to the latest version. -If your CLI is configured with an auth token, it will use the legacy API endpoints. Please update your CLI configuration to utilize your project's DSN instead. Refer to the [configuration guide](https://docs.sentry.io/cli/crons/#configuration) for more information. +If your CLI is configured with an auth token, it will use the legacy API endpoints. Please update your CLI configuration to utilize your project's DSN instead. Refer to the [configuration guide](/cli/crons/#configuration) for more information. diff --git a/docs/product/explore/profiling/transaction-vs-continuous-profiling.mdx b/docs/product/explore/profiling/transaction-vs-continuous-profiling.mdx index 675884edac7f9..db8611216e229 100644 --- a/docs/product/explore/profiling/transaction-vs-continuous-profiling.mdx +++ b/docs/product/explore/profiling/transaction-vs-continuous-profiling.mdx @@ -8,7 +8,7 @@ We’ve released two new products: Continuous Profiling (focused on backend appl ## Historical Context on Transaction-based Profiling -Our initial implementation of profiling is what we refer to throughout this document as *transaction-based profiling*. As the name suggests, in this mode, profiling was coupled to the lifecycle of a transaction (a term we use to describe a [root span](https://docs.sentry.io/concepts/key-terms/tracing/)). When the transaction started, profiling was automatically started, and when the transaction finished, profiling was automatically finished. This meant that if you application was already instrumented with tracing, profiling could be enabled with minimal additional effort. While this approach simplified set up, it came with some drawbacks. +Our initial implementation of profiling is what we refer to throughout this document as *transaction-based profiling*. As the name suggests, in this mode, profiling was coupled to the lifecycle of a transaction (a term we use to describe a [root span](/concepts/key-terms/tracing/)). When the transaction started, profiling was automatically started, and when the transaction finished, profiling was automatically finished. This meant that if you application was already instrumented with tracing, profiling could be enabled with minimal additional effort. While this approach simplified set up, it came with some drawbacks. One major limitation was that profiles couldn’t exceed 30 seconds in duration. Since profiles had to be sent alongside their corresponding transaction, the SDKs would need to buffer the profiling data on the client for the entire duration of the transaction. Transactions can be arbitrarily long, but profile payloads are large compared to spans, and therefore we could not buffer profiling data indefinitely without risking excess memory usage and OOM (out-of-memory) states on the client. Because of this limitation, it was not possible to use transaction-based profiling for longer running operations (e.g. profiling complete user sessions on the frontend, or long running tasks on the backend) diff --git a/docs/product/explore/session-replay/mobile/index.mdx b/docs/product/explore/session-replay/mobile/index.mdx index 53949e6b0f35a..e0d2872f6a62d 100644 --- a/docs/product/explore/session-replay/mobile/index.mdx +++ b/docs/product/explore/session-replay/mobile/index.mdx @@ -20,6 +20,32 @@ To redact anything potentially sensitive and preserve maximum user privacy, the ![Session Replay Redacted](./img/session-replay-redacted.png) +## Replay Details + +Every replay has a detailed view that contains the embedded video player and rich debugging context. Playing back the video will allow you to see every user interaction in relation to network requests, frontend and backend errors, backend spans, and more. Almost every component on this page is connected through timestamps. + +The below list shows the breakdown of each component and why it’s valuable: + +- **Breadcrumbs:** The replay breadcrumbs show when key user interactions took place, specifically: user taps with the relevant component, navigations, when the user put the app in background or foreground, and [custom breadcrumbs](/product/sentry-basics/integrate-backend/configuration-options/#breadcrumbs) set by your organization. Breadcrumbs also provide insight into the device of a given user session at particular timestamps: + - `device battery` (when battery level or charging status changes) + - `orientation` (when the user rotates the device) + - `connectivity` (when this status changes between wifi, cellular, and offline). + +These breadcrumbs are synced with the replay player and will auto-scroll as the video plays. Some [breadcrumb types](/product/issues/issue-details/breadcrumbs/) visible in Issue Details are not 1:1 to the replay breadcrumbs list. On the Replay Details page, the trail of events typically seen in the Issue Details page are instead displayed in the Network and Console components. + + +- **Timeline:** This is the section at the bottom of the Replay Details page that illustrates where significant events (such as errors, device battery, and user interactions) happen over the course of the replay. This allows users to easily scrub to key events by dragging across the timeline. It also visually conveys the amount of time that took place between events and has a zoom functionality so you can easily zoom-in to distinguish between events that happened close together. + +- **Network:** This is a list of all network requests that were initiated by the app while the replay recording was active. As the video plays, there’s a visual indicator that tracks through the table of network requests, highlighting which requests happened prior to, or next to this point in the video. When a request fails, it is highlighted in red. You can also click the timestamp on the far right of each request to bring yourself to that point in the replay player. + +- **Console:** Some debugging messages that don't belong in the breadcrumb list will show up here. For example, a custom `console.log` in React Native. Logs from [Logcat](/platforms/android/integrations/logcat/) and [Timber](/platforms/android/integrations/timber/) are also supported and will show up here. + +- **Errors:** All the errors that occurred in the replay (including in your backend), with links to the corresponding events and [issue(s)](/product/issues/issue-details/error-issues/), as well as the impact these issues have had holistically across all users on your application, seen when you hover over the issue ID. + +- **Tags:** A complete list of built-in fields and custom tags associated with a replay, such as operating system version and name, device specs, release, and user details. + +- **Trace:** A view that connects all the [trace(s)](/product/sentry-basics/tracing/distributed-tracing/#traces-transactions-and-spans) that happened during the replay. + ## Supported SDKs Session Replay for mobile is currently available for Android and iOS on both native SDKs, as well as for React Native and Flutter. diff --git a/docs/product/explore/session-replay/web/index.mdx b/docs/product/explore/session-replay/web/index.mdx index 969cc0a8e5b1a..b16d71a7f269e 100644 --- a/docs/product/explore/session-replay/web/index.mdx +++ b/docs/product/explore/session-replay/web/index.mdx @@ -6,7 +6,7 @@ description: "Learn about Session Replay and its video-like reproductions of use Session Replay allows you to see video-like reproductions of user sessions which can help you understand what happened before, during, and after an error or performance issue occurred. You'll be able to gain deeper debugging context into issues so that you can reproduce and resolve problems faster without the guesswork. As you play back each session, you'll be able to see every user interaction in relation to network requests, DOM events, and console messages. It’s effectively like having [DevTools](https://developer.chrome.com/docs/devtools/overview/) active in your production user sessions. -Replays are integrated with other parts of the Sentry product so you can see how the user experience is impacted by errors and slow transactions. You'll see session replays associated with error events on the [Issue Details](/product/issues/issue-details/) page, and those associated with slow transactions on the [Transaction Summary](/product/insights/overview/transaction-summary/) page. For [backend error replays](/product/explore/session-replay/web/getting-started/#replays-for-backend-errors), any contributing backend errors will be included in the replay's timeline, [breadcrumbs](https://docs.sentry.io/product/issues/issue-details/breadcrumbs/), and errors. +Replays are integrated with other parts of the Sentry product so you can see how the user experience is impacted by errors and slow transactions. You'll see session replays associated with error events on the [Issue Details](/product/issues/issue-details/) page, and those associated with slow transactions on the [Transaction Summary](/product/insights/overview/transaction-summary/) page. For [backend error replays](/product/explore/session-replay/web/getting-started/#replays-for-backend-errors), any contributing backend errors will be included in the replay's timeline, [breadcrumbs](/product/issues/issue-details/breadcrumbs/), and errors. ![Session Replay User Interface](./img/session-replay.png) diff --git a/docs/product/explore/session-replay/web/performance-overhead.mdx b/docs/product/explore/session-replay/web/performance-overhead.mdx index e17f0cce06e07..ef1a063c99ba0 100644 --- a/docs/product/explore/session-replay/web/performance-overhead.mdx +++ b/docs/product/explore/session-replay/web/performance-overhead.mdx @@ -34,7 +34,7 @@ There are different stages in the lifecycle of a webpage, each with different pe - [SDK bundle size is something we optimize for.](https://blog.sentry.io/sentry-bundle-size-how-we-reduced-replay-sdk-by-35/) Make sure you have tree-shaking enabled, and have updated to the latest SDK version (at least version 7.78.0) for the smallest bundle sizes. - The size of your initial HTML page affects how long the SDK takes to read the initial snapshot. Using your browser devtools, filter the Network panel to show "type=document" and look at the size to get a sense of the impact on your site. A sterotypical single-page-app that shows a loading screen and needs to wait for JavaScript to render everything will have negligible overhead from the initial snapshot. -- All Replay SDK data is compressed before being sent across the network. HTML is highly compressable, we were surprised how effective compression is on real websites. Network overhead is further reduced if you have [PII Masking and Blocking](https://docs.sentry.io/platforms/javascript/session-replay/privacy/) enabled (which is the default). Masked text is replaced with `*` which gzip shrinks really well, while blocked content is not included at all. +- All Replay SDK data is compressed before being sent across the network. HTML is highly compressable, we were surprised how effective compression is on real websites. Network overhead is further reduced if you have [PII Masking and Blocking](/platforms/javascript/session-replay/privacy/) enabled (which is the default). Masked text is replaced with `*` which gzip shrinks really well, while blocked content is not included at all. ### Capturing mouse/touch events @@ -45,7 +45,7 @@ There are different stages in the lifecycle of a webpage, each with different pe - The frequency of DOM mutations is highly application-specific. If there are no mutations happening then you will not see any replay data transmitted from the SDK to Sentry. On the other hand, if you have JavaScript timers that update the HTML on a regular basis, you will see a steady stream of HTML changes sent on the network. - The size of DOM mutations is also highly application-specific. Adding/removing/changing more DOM nodes at once will increase the time it takes to parse and minify the data. Keep in mind though that the overhead here happens after changes are made to the DOM as they are shown to the user (inside a `MutationObserver` callback). - The SDK has [mutation limits](https://docs.sentry.io/platforms/javascript/session-replay/configuration/#mutation-limits) to mitigate a negative user experience: changing 750 nodes will emit a warning breadcrumb into the replay, while emitting 10,000+ nodes will cause the replay to end. + The SDK has [mutation limits](/platforms/javascript/session-replay/configuration/#mutation-limits) to mitigate a negative user experience: changing 750 nodes will emit a warning breadcrumb into the replay, while emitting 10,000+ nodes will cause the replay to end. ### Page unload stage diff --git a/docs/product/insights/backend/caches/index.mdx b/docs/product/insights/backend/caches/index.mdx index de4cff551efeb..404c9b3335ce5 100644 --- a/docs/product/insights/backend/caches/index.mdx +++ b/docs/product/insights/backend/caches/index.mdx @@ -18,7 +18,7 @@ Starting with the [Cache page](https://sentry.io/orgredirect/organizations/:orgs ## Instrumentation -Cache monitoring currently supports [auto instrumentation](/platform-redirect/?next=%2Ftracing%2Finstrumentation%2Fautomatic-instrumentation) for [Django's cache framework](https://docs.djangoproject.com/en/5.0/topics/cache/) when the [cache_spans option](https://docs.sentry.io/platforms/python/integrations/django/#options) is set to `True`. Other frameworks require custom instrumentation. +Cache monitoring currently supports [auto instrumentation](/platform-redirect/?next=%2Ftracing%2Finstrumentation%2Fautomatic-instrumentation) for [Django's cache framework](https://docs.djangoproject.com/en/5.0/topics/cache/) when the [cache_spans option](/platforms/python/integrations/django/#options) is set to `True`. Other frameworks require custom instrumentation. ### Custom instrumentation diff --git a/docs/product/partnership-platform/oauth-integration.mdx b/docs/product/partnership-platform/oauth-integration.mdx index f1f4efe056a16..39250a5dc5b65 100644 --- a/docs/product/partnership-platform/oauth-integration.mdx +++ b/docs/product/partnership-platform/oauth-integration.mdx @@ -142,7 +142,7 @@ new_tokens = response.json() - `member:read` - Read organization members - `member:write` - Manage organization members -Required scopes depend on your use case and are documented in our [API documentation](https://docs.sentry.io/api/). +Required scopes depend on your use case and are documented in our [API documentation](/api/). ## Using Access Tokens diff --git a/docs/product/sentry-toolbar/index.mdx b/docs/product/sentry-toolbar/index.mdx index 0e2aa44ab4677..d54662f3eac7d 100644 --- a/docs/product/sentry-toolbar/index.mdx +++ b/docs/product/sentry-toolbar/index.mdx @@ -15,13 +15,13 @@ Developers spend a lot of time troubleshooting their web apps on local, staging, ## Issues Panel -The issues panel shows you your highest priority frontend [issues](https://docs.sentry.io/product/issues/) for the page you are currently viewing. From the Sentry Toolbar, you can quickly jump into specific issues in Sentry to get more detailed information (examples: Sentry project, issue title, description, and when the issue was first and last seen) and take action (examples: assign to a team member or mark as resolved). With the issues panel, you can browse the pages that are most important to your business and understand the top issues impacting your user base. +The issues panel shows you your highest priority frontend [issues](/product/issues/) for the page you are currently viewing. From the Sentry Toolbar, you can quickly jump into specific issues in Sentry to get more detailed information (examples: Sentry project, issue title, description, and when the issue was first and last seen) and take action (examples: assign to a team member or mark as resolved). With the issues panel, you can browse the pages that are most important to your business and understand the top issues impacting your user base. ![Toolbar with the Issues Panel open](./img/issues-panel.png) ## Feedback Panel -The feedback panel shows you the most recent user feedback messages for the page you are on, so you can more easily contextualize it. The feedback often describes suboptimal experiences that are not strictly code-thrown errors, such as misleading UX, broken links, and typos. The feedback panel works by pulling feedback messages from [Sentry’s User Feedback Widget](https://docs.sentry.io/product/user-feedback/#user-feedback-widget). Just like with the Issues panel, clicking on a particular user feedback will take you to the full detailed User Feedback page within Sentry. +The feedback panel shows you the most recent user feedback messages for the page you are on, so you can more easily contextualize it. The feedback often describes suboptimal experiences that are not strictly code-thrown errors, such as misleading UX, broken links, and typos. The feedback panel works by pulling feedback messages from [Sentry’s User Feedback Widget](/product/user-feedback/#user-feedback-widget). Just like with the Issues panel, clicking on a particular user feedback will take you to the full detailed User Feedback page within Sentry. ![Toolbar with the Feedback Panel open](./img/feedback-panel.png) diff --git a/docs/product/user-feedback/index.mdx b/docs/product/user-feedback/index.mdx index 85e6c7e6fd30c..41fb3f76422b8 100644 --- a/docs/product/user-feedback/index.mdx +++ b/docs/product/user-feedback/index.mdx @@ -12,7 +12,7 @@ For example, using [Session Replay](/product/explore/session-replay/) with the U ## User Feedback Widget -The User Feedback Widget is an out-of-the-box, persistent widget you can add anywhere on your web application. It allows users to submit feedback quickly and easily any time they encounter something that isn’t working as expected. Learn more about how to install and customize it [here](https://docs.sentry.io/product/user-feedback/setup/). +The User Feedback Widget is an out-of-the-box, persistent widget you can add anywhere on your web application. It allows users to submit feedback quickly and easily any time they encounter something that isn’t working as expected. Learn more about how to install and customize it [here](/product/user-feedback/setup/). ![User Feedback widget.](./img/user-feedback-widget.png) @@ -28,7 +28,7 @@ Feedback collected via the Feedback Widget may have some or all of the following ## Crash-Report Modal -Another way to collect feedback is by installing the Crash-Report Modal. This allows users to submit feedback after they experience an error via an automatic modal that pops up after an error occurs. Learn more about how to install and customize it [here](https://docs.sentry.io/platforms/javascript/user-feedback/#crash-report-modal). +Another way to collect feedback is by installing the Crash-Report Modal. This allows users to submit feedback after they experience an error via an automatic modal that pops up after an error occurs. Learn more about how to install and customize it [here](/platforms/javascript/user-feedback/#crash-report-modal). ![Crash-Report Modal.](./img/crash-report-user-feedback.png) diff --git a/docs/product/user-feedback/setup.mdx b/docs/product/user-feedback/setup.mdx index 0eb7b08fd672a..7e6c130705759 100644 --- a/docs/product/user-feedback/setup.mdx +++ b/docs/product/user-feedback/setup.mdx @@ -47,7 +47,7 @@ The Crash Report Modal allows users to submit feedback after they experience an ## Supported SDKs for User Feedback API -We also provide an API to send user feedback programmatically. This allows you to connect your own user interface to Sentry. If your SDK is not supported, you may post data to the [Web API](https://docs.sentry.io/api/projects/submit-user-feedback/). +We also provide an API to send user feedback programmatically. This allows you to connect your own user interface to Sentry. If your SDK is not supported, you may post data to the [Web API](/api/projects/submit-user-feedback/). The following SDKs are supported: - [Android](/platforms/android/user-feedback/#user-feedback-api) diff --git a/docs/security-legal-pii/scrubbing/advanced-datascrubbing.mdx b/docs/security-legal-pii/scrubbing/advanced-datascrubbing.mdx index 6aba0ddb21bef..f081ed0ee4bde 100644 --- a/docs/security-legal-pii/scrubbing/advanced-datascrubbing.mdx +++ b/docs/security-legal-pii/scrubbing/advanced-datascrubbing.mdx @@ -232,7 +232,7 @@ The following limitations generally apply to all server-side data scrubbing, be - Sentry's internals require that the event user's IP address must either be `null` or a valid IPv4/IPv6 address. If you're trying to hash, mask or replace IP addresses, data scrubbing will move the replacement value into the user ID (if one is not already set) in order to avoid breaking this requirement while still providing useful data for the Users count on an issue. -- In stack traces, scrubbing works on file paths but not on a file's base name. This would violate assumptions in the processing pipeline resulting in a poor user experience. Instead, you can scrub a file's base name in the SDK itself, using the [`RewriteFrames` integration](https://docs.sentry.io/platforms/javascript/configuration/integrations/rewriteframes/) or [`beforeSend`](https://docs.sentry.io/platforms/javascript/configuration/filtering/). +- In stack traces, scrubbing works on file paths but not on a file's base name. This would violate assumptions in the processing pipeline resulting in a poor user experience. Instead, you can scrub a file's base name in the SDK itself, using the [`RewriteFrames` integration](/platforms/javascript/configuration/integrations/rewriteframes/) or [`beforeSend`](/platforms/javascript/configuration/filtering/). ## Data Scrubbing for Logs @@ -249,5 +249,3 @@ Deep wild cards ('**') or $string / $number value selectors will apply across al You can also edit existing scrubbing rules ![Edit dialog showing an existing rule with custom placeholder and attribute configuration](img/scrub_edit.png) - - diff --git a/docs/security-legal-pii/security/mobile-privacy.mdx b/docs/security-legal-pii/security/mobile-privacy.mdx index 999c9ee2e3764..ce7ffe6b7934d 100644 --- a/docs/security-legal-pii/security/mobile-privacy.mdx +++ b/docs/security-legal-pii/security/mobile-privacy.mdx @@ -17,7 +17,7 @@ By default, Sentry uses randomly generated IDs as [described below](#does-sentry ### Does Sentry use the device ID to identify a user? -No. Sentry on Mobile doesn't use device ID such as `Secure.ANDROID_ID` and `advertisingIdentifier` on iOS. Instead, it uses IDs which are randomly generated per device, per app, and per installation, and therefore can't be used to identify a single device across application installations. When an application is reinstalled, a new ID is generated. Since these IDs are solely used to provide approximate statistical information as part of the application monitoring service, it serves that purpose. It's required, for example, for [Crash Free Session and User Rates](/product/releases/health/#crash-free-sessionsusers), as well as to indicate the [impact of issues based on number of events vs affected users](https://docs.sentry.io/product/issues/issue-details/#trends--aggregates). +No. Sentry on Mobile doesn't use device ID such as `Secure.ANDROID_ID` and `advertisingIdentifier` on iOS. Instead, it uses IDs which are randomly generated per device, per app, and per installation, and therefore can't be used to identify a single device across application installations. When an application is reinstalled, a new ID is generated. Since these IDs are solely used to provide approximate statistical information as part of the application monitoring service, it serves that purpose. It's required, for example, for [Crash Free Session and User Rates](/product/releases/health/#crash-free-sessionsusers), as well as to indicate the [impact of issues based on number of events vs affected users](/product/issues/issue-details/#trends--aggregates). ### What does Sentry do with the data it collects? diff --git a/docs/security-legal-pii/security/service-data-usage.mdx b/docs/security-legal-pii/security/service-data-usage.mdx index ce2988f3becfb..6781dcef93015 100644 --- a/docs/security-legal-pii/security/service-data-usage.mdx +++ b/docs/security-legal-pii/security/service-data-usage.mdx @@ -51,7 +51,7 @@ For [EU region customers](/organization/data-storage-location/), data is stored In addition to the consent mechanisms mentioned above: -1. We'll continue to encourage all customers to use our [various data scrubbing tools](https://docs.sentry.io/product/data-management-settings/scrubbing/) so that service data is sanitized before we receive it. +1. We'll continue to encourage all customers to use our [various data scrubbing tools](/product/data-management-settings/scrubbing/) so that service data is sanitized before we receive it. 2. We'll apply the same deletion and retention rules to our training data as we do to the underlying service data. This means that if you delete service data, it will also be removed from our machine learning models automatically. 3. We'll scrub data for PII before it goes into any training set. 4. We'll ensure that the only service data presented in the output of any generative AI feature belongs to the customer using the feature. diff --git a/includes/dart-integrations/http-integration.mdx b/includes/dart-integrations/http-integration.mdx index b7159d295e495..f240ba2ef70bd 100644 --- a/includes/dart-integrations/http-integration.mdx +++ b/includes/dart-integrations/http-integration.mdx @@ -57,8 +57,8 @@ try { When an error occurs, the following information is captured and sent to Sentry: -The marked elements (\*) are affected by the default enabled [server-side data scrubbing](https://docs.sentry.io/security-legal-pii/scrubbing/server-side-scrubbing/). -To implement client side data scrubbing, go to [client-side data scrubbing in Flutter](https://docs.sentry.io/platforms/dart/guides/flutter/data-management/sensitive-data/). +The marked elements (\*) are affected by the default enabled [server-side data scrubbing](/security-legal-pii/scrubbing/server-side-scrubbing/). +To implement client side data scrubbing, go to [client-side data scrubbing in Flutter](/platforms/dart/guides/flutter/data-management/sensitive-data/). Request details: diff --git a/platform-includes/getting-started-primer/dotnet.mdx b/platform-includes/getting-started-primer/dotnet.mdx index d9daa39d904bf..a606cf188fa8d 100644 --- a/platform-includes/getting-started-primer/dotnet.mdx +++ b/platform-includes/getting-started-primer/dotnet.mdx @@ -7,7 +7,7 @@ This SDK is compatible with th - Multiple integrations with additional features such as SQL Client, Serilog, log4net, ASP.NET Core, EntityFramework, EntityFramework Core, Xamarin - [Native AOT](https://sentry.engineering/blog/should-you-could-you-aot) with native crash in release for Windows, macOS and Linux - Bindings to Sentry's native iOS and Android SDKs. Line numbers for C# exceptions in release builds. -- Server side symbolication with [automated symbol upload via MSBuild](https://docs.sentry.io/platforms/dotnet/configuration/msbuild/). +- Server side symbolication with [automated symbol upload via MSBuild](/platforms/dotnet/configuration/msbuild/). - Breadcrumbs automatically captured - [Release health](/product/releases/health/) tracks crash free users and sessions - Attachments enrich diff --git a/scripts/remove_sentry_domain.js b/scripts/remove_sentry_domain.js new file mode 100644 index 0000000000000..2f5ba6ef2d0bf --- /dev/null +++ b/scripts/remove_sentry_domain.js @@ -0,0 +1,302 @@ +#!/usr/bin/env node +/** + * Script to remove 'https://docs.sentry.io/' domain from URLs in MDX files. + * + * This script converts absolute Sentry docs URLs to relative URLs. + * For example: https://docs.sentry.io/platforms/rust/logs/ -> /platforms/rust/logs/ + * + * Usage: + * node scripts/remove_sentry_domain.js [--dry-run] [--folders folder1,folder2] + */ + +const fs = require('fs'); +const path = require('path'); + +/** + * Check if a line is a comment in MDX. + * + * @param {string} line - The line to check + * @returns {boolean} True if the line is a comment, False otherwise + */ +function isCommentLine(line) { + const stripped = line.trim(); + + // Check for JavaScript/TypeScript style comments + if (stripped.startsWith('//')) { + return true; + } + + // Check for Python/Shell style comments + if (stripped.startsWith('#')) { + return true; + } + + // Check for HTML comments + if (stripped.startsWith('')) { + return true; + } + + // Check for JSX comments (single line) + if (stripped.startsWith('{/*') && stripped.endsWith('*/}')) { + return true; + } + + // Check for JSX comments (multi-line start) + if (stripped.startsWith('{/*')) { + return true; + } + + // Check for JSX comments (multi-line end) + if (stripped.endsWith('*/}')) { + return true; + } + + return false; +} + +/** + * Check if the current line is inside a multi-line comment block. + * + * @param {string[]} lines - All lines in the file + * @param {number} currentIndex - Index of the current line + * @returns {boolean} True if the line is inside a comment block, False otherwise + */ +function isInCommentBlock(lines, currentIndex) { + // Look backwards to find comment block start + for (let i = currentIndex; i >= 0; i--) { + const line = lines[i].trim(); + if (line.startsWith('{/*')) { + return true; + } + if (line.endsWith('*/}')) { + return false; + } + } + + return false; +} + +/** + * Process a single MDX file to remove Sentry domain from URLs. + * + * @param {string} filePath - Path to the MDX file + * @param {boolean} dryRun - If true, don't actually modify the file + * @returns {[number, number]} Tuple of [files_changed, total_replacements] + */ +function processMdxFile(filePath, dryRun = false) { + try { + const content = fs.readFileSync(filePath, 'utf8'); + const lines = content.split('\n'); + const modifiedLines = []; + let replacements = 0; + + // Pattern to match Sentry docs URLs + // This matches URLs that start with https://docs.sentry.io/ and captures the path + const urlPattern = /https:\/\/docs\.sentry\.io(\/[^\s"'<>)]*)/g; + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + + if (isCommentLine(line)) { + // Don't modify comment lines + modifiedLines.push(line); + continue; + } + + if (isInCommentBlock(lines, i)) { + // Don't modify lines inside comment blocks + modifiedLines.push(line); + continue; + } + + // Process the line + let newLine = line; + let match; + + // Reset regex state for each line + urlPattern.lastIndex = 0; + + match = urlPattern.exec(line); + while (match !== null) { + const fullUrl = match[0]; + const urlPath = match[1]; + const newUrl = urlPath; + + // Replace the URL + newLine = newLine.replace(fullUrl, newUrl); + replacements++; + + if (dryRun) { + console.log(` Would replace: ${fullUrl} -> ${newUrl}`); + } + + match = urlPattern.exec(line); + } + + modifiedLines.push(newLine); + } + + if (replacements > 0) { + const newContent = modifiedLines.join('\n'); + + if (dryRun) { + console.log(` ${filePath}: ${replacements} replacements would be made`); + } else { + try { + fs.writeFileSync(filePath, newContent, 'utf8'); + console.log(` ${filePath}: ${replacements} replacements made`); + } catch (error) { + console.error(`Error writing ${filePath}: ${error.message}`); + return [0, 0]; + } + } + + return [1, replacements]; + } + + return [0, 0]; + } catch (error) { + console.error(`Error reading ${filePath}: ${error.message}`); + return [0, 0]; + } +} + +/** + * Find all MDX files in the specified folders. + * + * @param {string[]} folders - List of folder paths to search + * @returns {string[]} List of file paths for MDX files + */ +function findMdxFiles(folders) { + const mdxFiles = []; + + function walkDir(dir) { + const files = fs.readdirSync(dir); + + for (const file of files) { + const filePath = path.join(dir, file); + const stat = fs.statSync(filePath); + + if (stat.isDirectory()) { + walkDir(filePath); + } else if (file.endsWith('.mdx')) { + mdxFiles.push(filePath); + } + } + } + + for (const folder of folders) { + if (!fs.existsSync(folder)) { + console.log(`Warning: Folder ${folder} does not exist`); + continue; + } + + walkDir(folder); + } + + return mdxFiles.sort(); +} + +/** + * Parse command line arguments. + * + * @returns {Object} Parsed arguments + */ +function parseArgs() { + const args = process.argv.slice(2); + const parsed = { + dryRun: false, + folders: 'docs,platform-includes,includes', + }; + + for (let i = 0; i < args.length; i++) { + const arg = args[i]; + + if (arg === '--dry-run') { + parsed.dryRun = true; + } else if (arg === '--folders' && i + 1 < args.length) { + parsed.folders = args[i + 1]; + i++; // Skip next argument since we consumed it + } else if (arg === '--help' || arg === '-h') { + console.log(` +Script to remove 'https://docs.sentry.io/' domain from URLs in MDX files. + +Usage: + node scripts/remove_sentry_domain.js [--dry-run] [--folders folder1,folder2] + +Options: + --dry-run Show what would be changed without actually modifying files + --folders Comma-separated list of folders to process (default: docs,platform-includes,includes) + --help, -h Show this help message + +Examples: + node scripts/remove_sentry_domain.js --dry-run + node scripts/remove_sentry_domain.js --folders docs,includes + node scripts/remove_sentry_domain.js + `); + process.exit(0); + } + } + + return parsed; +} + +/** + * Main function. + */ +function main() { + const args = parseArgs(); + + // Parse folders + const folders = args.folders.split(',').map(f => f.trim()); + + console.log(`Processing folders: ${folders.join(', ')}`); + console.log(`Mode: ${args.dryRun ? 'DRY RUN' : 'LIVE'}`); + console.log('-'.repeat(50)); + + // Find all MDX files + const mdxFiles = findMdxFiles(folders); + + if (mdxFiles.length === 0) { + console.log('No MDX files found in the specified folders.'); + return; + } + + console.log(`Found ${mdxFiles.length} MDX files to process`); + console.log(); + + // Process files + let filesChanged = 0; + let totalReplacements = 0; + + for (const mdxFile of mdxFiles) { + const [changed, replacements] = processMdxFile(mdxFile, args.dryRun); + filesChanged += changed; + totalReplacements += replacements; + } + + console.log('-'.repeat(50)); + console.log('Summary:'); + console.log(` Files processed: ${mdxFiles.length}`); + console.log(` Files ${args.dryRun ? 'that would be ' : ''}changed: ${filesChanged}`); + console.log( + ` Total replacements ${args.dryRun ? 'that would be ' : ''}made: ${totalReplacements}` + ); + + if (args.dryRun && totalReplacements > 0) { + console.log(); + console.log('To apply these changes, run the script without --dry-run'); + } +} + +// Run the script if called directly +if (require.main === module) { + main(); +} + +module.exports = { + processMdxFile, + findMdxFiles, + isCommentLine, + isInCommentBlock, +};