From 9f35518d534b212c28d312c61c8848939ea78a42 Mon Sep 17 00:00:00 2001 From: Stephanie Anderson Date: Tue, 4 Jun 2024 10:10:40 +0200 Subject: [PATCH] Rename performance monitoring to tracing in all platform docs (#10220) --- docs/concepts/key-terms/key-terms.mdx | 2 +- .../approach/product-docs/write-index.mdx | 2 +- docs/contributing/approach/sdk-docs/index.mdx | 2 +- .../early-adopter-features/index.mdx | 2 +- .../android/configuration/app-not-respond.mdx | 4 +- .../android/configuration/gradle.mdx | 2 +- .../android/configuration/options.mdx | 2 +- .../android/configuration/sampling.mdx | 2 +- .../enhance-errors/kotlin-compiler-plugin.mdx | 4 +- docs/platforms/android/features/index.mdx | 2 +- .../android/integrations/apollo/index.mdx | 2 +- .../android/integrations/apollo3/index.mdx | 2 +- .../android/integrations/file-io/index.mdx | 2 +- .../integrations/jetpack-compose/index.mdx | 2 +- .../integrations/room-and-sqlite/index.mdx | 2 +- docs/platforms/android/metrics/index.mdx | 2 +- docs/platforms/android/performance/index.mdx | 40 --- .../performance/instrumentation/index.mdx | 9 - docs/platforms/android/profiling/index.mdx | 14 +- .../profiling/troubleshooting/index.mdx | 6 +- docs/platforms/android/tracing/index.mdx | 38 +++ .../automatic-instrumentation.mdx | 10 +- .../custom-instrumentation.mdx | 4 +- .../instrumentation/img/perf-v2-app-start.png | Bin 0 -> 184989 bytes .../img/perf-v2-frame-delay.png | Bin 0 -> 102677 bytes .../instrumentation/img/ttid-ttfd-concept.png | Bin .../android/tracing/instrumentation/index.mdx | 7 + .../instrumentation/perf-v2.mdx | 4 +- .../instrumentation/performance-metrics.mdx | 0 .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../trace-propagation}/index.mdx | 2 +- .../apple/common/configuration/sampling.mdx | 2 +- .../apple/common/configuration/swizzling.mdx | 20 +- .../apple-privacy-manifest.mdx | 2 +- .../common/install/swift-package-manager.mdx | 2 +- docs/platforms/apple/common/metrics/index.mdx | 2 +- .../apple/common/migration/index.mdx | 8 +- .../apple/common/performance/index.mdx | 36 -- .../performance/instrumentation/index.mdx | 9 - .../apple/common/profiling/index.mdx | 6 +- .../profiling/troubleshooting/index.mdx | 6 +- docs/platforms/apple/common/tracing/index.mdx | 34 ++ .../automatic-instrumentation.mdx | 10 +- .../custom-instrumentation.mdx | 2 +- .../img/app-start-transaction.png | Bin .../img/nested-view-transaction.png | Bin .../img/slow-frozen-frames.png | Bin .../instrumentation/img/ttid-ttfd-concept.png | Bin .../img/ui-view-controller-transaction.png | Bin .../common/tracing/instrumentation/index.mdx | 7 + .../instrumentation/performance-metrics.mdx | 0 .../swiftui-instrumentation.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../trace-propagation}/index.mdx | 2 +- .../apple/common/troubleshooting/index.mdx | 4 +- .../apple/guides/ios/manual-setup.mdx | 4 +- .../platforms/dart/configuration/sampling.mdx | 2 +- docs/platforms/dart/features/index.mdx | 2 +- docs/platforms/dart/index.mdx | 4 +- docs/platforms/dart/integrations/dio.mdx | 8 +- docs/platforms/dart/integrations/file.mdx | 4 +- .../dart/integrations/http-integration.mdx | 4 +- docs/platforms/dart/metrics/index.mdx | 3 +- docs/platforms/dart/performance/index.mdx | 40 --- .../performance/instrumentation/index.mdx | 9 - docs/platforms/dart/tracing/index.mdx | 38 +++ .../automatic-instrumentation.mdx | 4 +- .../custom-instrumentation.mdx | 2 +- .../dart/tracing/instrumentation/index.mdx | 7 + .../instrumentation/performance-metrics.mdx | 0 .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../trace-propagation}/index.mdx | 2 +- .../dotnet/common/configuration/sampling.mdx | 2 +- .../platforms/dotnet/common/metrics/index.mdx | 12 +- .../dotnet/common/migration/index.mdx | 8 +- .../dotnet/common/performance/index.mdx | 38 --- .../performance/instrumentation/index.mdx | 9 - .../dotnet/common/profiling/index.mdx | 4 +- .../profiling/troubleshooting/index.mdx | 6 +- .../platforms/dotnet/common/tracing/index.mdx | 42 +++ .../automatic-instrumentation.mdx | 6 +- .../custom-instrumentation.mdx | 2 +- .../common/tracing/instrumentation/index.mdx | 7 + .../instrumentation/opentelemetry.mdx | 0 .../instrumentation/performance-metrics.mdx | 0 .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation/index.mdx | 34 ++ .../common/tracing}/troubleshooting/index.mdx | 4 +- .../included-instrumentation.mdx | 2 +- .../troubleshooting.mdx | 2 +- .../dotnet/guides/aspnet/troubleshooting.mdx | 2 +- .../dotnet/guides/aspnetcore/index.mdx | 4 +- .../automatic-instrumentation.mdx | 2 +- .../dotnet/guides/aws-lambda/index.mdx | 2 +- .../dotnet/guides/entityframework/index.mdx | 2 +- docs/platforms/dotnet/guides/maui/index.mdx | 2 +- docs/platforms/dotnet/guides/uwp/index.mdx | 2 +- .../dotnet/guides/winforms/index.mdx | 2 +- docs/platforms/dotnet/guides/winui/index.mdx | 4 +- docs/platforms/dotnet/guides/wpf/index.mdx | 2 +- .../apple-privacy-manifest.mdx | 2 +- .../dotnet/guides/xamarin/troubleshooting.mdx | 2 +- .../elixir/crons/troubleshooting.mdx | 2 +- .../flutter/configuration/options.mdx | 2 +- .../flutter/configuration/sampling.mdx | 2 +- .../apple-privacy-manifest.mdx | 2 +- docs/platforms/flutter/index.mdx | 4 +- .../app-start-instrumentation.mdx | 4 +- .../asset-bundle-instrumentation.mdx | 2 +- .../integrations/drift-instrumentation.mdx | 2 +- .../integrations/hive-instrumentation.mdx | 2 +- .../integrations/isar-instrumentation.mdx | 2 +- .../integrations/routing-instrumentation.mdx | 2 +- ...slow-and-frozen-frames-instrumentation.mdx | 2 +- .../integrations/sqflite-instrumentation.mdx | 2 +- .../user-interaction-instrumentation.mdx | 2 +- docs/platforms/flutter/metrics/index.mdx | 3 +- docs/platforms/flutter/performance/index.mdx | 40 --- .../performance/instrumentation/index.mdx | 9 - docs/platforms/flutter/profiling/index.mdx | 20 +- .../profiling/troubleshooting/index.mdx | 6 +- docs/platforms/flutter/tracing/index.mdx | 38 +++ .../automatic-instrumentation.mdx | 2 +- .../custom-instrumentation.mdx | 2 +- .../flutter/tracing/instrumentation/index.mdx | 7 + .../instrumentation/performance-metrics.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation}/index.mdx | 2 +- .../limiting-trace-propagation/index.mdx | 0 .../go/common/configuration/sampling.mdx | 2 +- .../go/common/distributed-tracing/index.mdx | 34 -- .../transaction-name/index.mdx | 2 +- .../platforms/go/common/performance/index.mdx | 40 --- .../performance/instrumentation/index.mdx | 9 - docs/platforms/go/common/profiling/index.mdx | 21 +- .../profiling/troubleshooting/index.mdx | 6 +- docs/platforms/go/common/tracing/index.mdx | 41 +++ .../custom-instrumentation.mdx | 2 +- .../common/tracing/instrumentation/index.mdx | 7 + .../instrumentation/opentelemetry.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation}/index.mdx | 2 +- .../common/tracing}/troubleshooting/index.mdx | 4 +- docs/platforms/go/guides/echo/index.mdx | 2 +- docs/platforms/go/guides/fasthttp/index.mdx | 2 +- docs/platforms/go/guides/gin/index.mdx | 2 +- docs/platforms/go/guides/http/index.mdx | 2 +- docs/platforms/go/guides/iris/index.mdx | 2 +- docs/platforms/go/guides/martini/index.mdx | 2 +- docs/platforms/go/guides/negroni/index.mdx | 2 +- .../java/common/configuration/sampling.mdx | 2 +- .../java/common/crons/troubleshooting.mdx | 2 +- .../java/common/distributed-tracing/index.mdx | 34 -- .../java/common/integrations/graphql.mdx | 4 +- docs/platforms/java/common/metrics/index.mdx | 9 +- .../java/common/performance/index.mdx | 62 ---- .../performance/instrumentation/index.mdx | 9 - docs/platforms/java/common/tracing/index.mdx | 64 ++++ .../instrumentation/apollo.mdx | 4 +- .../instrumentation/apollo3.mdx | 4 +- .../custom-instrumentation.mdx | 4 +- .../instrumentation/file-io.mdx | 4 +- .../common/tracing/instrumentation/index.mdx | 7 + .../instrumentation/jdbc.mdx | 4 +- .../instrumentation/okhttp.mdx | 4 +- .../instrumentation/open-feign.mdx | 4 +- .../instrumentation/opentelemetry.mdx | 0 .../instrumentation/performance-metrics.mdx | 0 .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation/index.mdx | 34 ++ .../common/tracing}/troubleshooting/index.mdx | 4 +- .../automatic-instrumentation.mdx | 2 +- .../automatic-instrumentation.mdx | 2 +- docs/platforms/java/migration/6.x-to-7.0.mdx | 4 +- .../integrations/browsertracing.mdx | 6 +- .../common/configuration/sampling.mdx | 2 +- .../configuration/tree-shaking/index.mdx | 6 +- .../common/crons/troubleshooting.mdx | 2 +- .../transaction-name/index.mdx | 2 +- .../common/install/esm-without-import.mdx | 2 +- .../javascript/common/install/esm.mdx | 2 +- .../javascript/common/install/index.mdx | 2 +- .../common/install/late-initializtion.mdx | 4 +- .../javascript/common/install/loader.mdx | 22 +- .../javascript/common/migration/v6-to-v7.mdx | 2 +- .../common/migration/v7-to-v8/index.mdx | 4 +- .../v7-to-v8/v8-new-performance-api.mdx | 4 +- .../migration/v7-to-v8/v8-opentelemetry.mdx | 2 +- .../javascript/common/performance/index.mdx | 53 --- .../performance/instrumentation/index.mdx | 9 - .../common/session-replay/troubleshooting.mdx | 2 +- .../sourcemaps/troubleshooting_js/index.mdx | 2 +- .../database/auto-instrument.mdx | 0 .../database/index.mdx | 2 +- .../database/opt-in.mdx | 0 .../javascript/common/tracing/index.mdx | 51 +++ .../automatic-instrumentation.mdx | 2 +- .../custom-instrumentation/caches-module.mdx | 2 +- .../custom-instrumentation/index.mdx | 4 +- .../custom-instrumentation/queues-module.mdx | 0 .../requests-module.mdx | 2 +- .../common/tracing/instrumentation/index.mdx | 7 + .../instrumentation/opentelemetry.mdx | 0 .../instrumentation/performance-metrics.mdx | 0 .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../trace-propagation}/index.mdx | 2 +- .../troubleshooting/index.mdx | 4 +- .../common/troubleshooting/index.mdx | 3 +- .../angular/features/component-tracking.mdx | 4 +- .../javascript/guides/astro/manual-setup.mdx | 2 +- .../javascript/guides/aws-lambda/index.mdx | 2 +- .../automatic-instrumentation.mdx | 0 .../automatic-instrumentation.mdx | 0 .../guides/connect/performance/index.mdx | 25 -- .../guides/connect/tracing/index.mdx | 25 ++ .../automatic-instrumentation.mdx | 0 .../ember/configuration/ember-options.mdx | 4 +- .../automatic-instrumentation.mdx | 2 +- .../guides/express/performance/index.mdx | 25 -- .../guides/express/tracing/index.mdx | 25 ++ .../automatic-instrumentation.mdx | 0 .../guides/fastify/performance/index.mdx | 25 -- .../guides/fastify/tracing/index.mdx | 25 ++ .../automatic-instrumentation.mdx | 0 .../javascript/guides/gatsby/index.mdx | 2 +- .../javascript/guides/gcp-functions/index.mdx | 2 +- .../automatic-instrumentation.mdx | 0 .../guides/hapi/performance/index.mdx | 25 -- .../javascript/guides/hapi/tracing/index.mdx | 25 ++ .../automatic-instrumentation.mdx | 0 .../guides/koa/performance/index.mdx | 25 -- .../javascript/guides/koa/tracing/index.mdx | 25 ++ .../automatic-instrumentation.mdx | 0 .../guides/nestjs/performance/index.mdx | 25 -- .../guides/nestjs/tracing/index.mdx | 25 ++ .../automatic-instrumentation.mdx | 0 .../javascript/guides/nextjs/manual-setup.mdx | 8 +- .../guides/node/performance/index.mdx | 25 -- .../javascript/guides/node/tracing/index.mdx | 25 ++ .../automatic-instrumentation.mdx | 0 .../react/features/component-monitoring.mdx | 5 +- .../guides/react/features/react-router.mdx | 2 +- .../guides/react/features/tanstack-router.mdx | 2 +- .../javascript/guides/remix/manual-setup.mdx | 6 +- .../svelte/features/component-tracking.mdx | 2 +- .../guides/sveltekit/manual-setup.mdx | 2 +- .../vue/features/component-tracking.mdx | 2 +- .../apple-privacy-manifest.mdx | 2 +- .../platforms/native/advanced-usage/index.mdx | 10 +- .../native/common/configuration/sampling.mdx | 2 +- .../common/distributed-tracing/index.mdx | 34 -- .../common/enriching-events/scopes/index.mdx | 4 +- .../native/common/performance/index.mdx | 55 ---- .../platforms/native/common/tracing/index.mdx | 53 +++ .../custom-instrumentation.mdx | 4 +- .../instrumentation/index.mdx | 4 +- .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation/index.mdx | 34 ++ .../php/common/crons/troubleshooting.mdx | 2 +- .../php/common/distributed-tracing/index.mdx | 34 -- .../performance/instrumentation/index.mdx | 9 - docs/platforms/php/common/profiling/index.mdx | 6 +- .../php/common/profiling/troubleshooting.mdx | 5 +- .../common/{performance => tracing}/index.mdx | 16 +- .../automatic-instrumentation.mdx | 0 .../custom-instrumentation.mdx | 2 +- .../common/tracing/instrumentation/index.mdx | 7 + .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation/index.mdx | 34 ++ .../troubleshooting/index.mdx | 4 +- .../laravel/configuration/laravel-options.mdx | 4 +- docs/platforms/php/guides/laravel/index.mdx | 4 +- .../laravel/other-versions/laravel8-10.mdx | 4 +- .../guides/laravel/other-versions/lumen.mdx | 2 +- .../php/guides/laravel/profiling/index.mdx | 6 +- .../laravel/profiling/troubleshooting.mdx | 5 +- .../distributed-tracing.mdx | 4 +- .../automatic-instrumentation.mdx | 0 .../php/guides/symfony/profiling/index.mdx | 10 +- .../symfony/profiling/troubleshooting.mdx | 5 +- .../automatic-instrumentation.mdx | 0 .../powershell/performance/index.mdx | 38 --- .../performance/instrumentation/index.mdx | 9 - .../performance/troubleshooting/index.mdx | 21 -- docs/platforms/powershell/tracing/index.mdx | 36 ++ .../custom-instrumentation.mdx | 2 +- .../tracing/instrumentation/index.mdx | 7 + .../instrumentation/performance-metrics.mdx | 0 .../tracing/troubleshooting/index.mdx | 21 ++ .../python/configuration/options.mdx | 4 +- .../python/configuration/sampling.mdx | 2 +- .../python/crons/troubleshooting.mdx | 2 +- .../python/distributed-tracing/index.mdx | 34 -- .../transaction-name/index.mdx | 2 +- .../python/integrations/asgi/index.mdx | 2 +- .../python/integrations/asyncio/index.mdx | 2 +- .../manual-instrumentation/index.mdx | 2 +- .../python/integrations/beam/index.mdx | 2 +- .../python/integrations/celery/crons.mdx | 2 +- .../cloudresourcecontext/index.mdx | 2 +- .../python/integrations/django/index.mdx | 10 +- .../integrations/gcp-functions/index.mdx | 2 +- .../python/integrations/grpc/index.mdx | 4 +- .../python/integrations/rq/index.mdx | 8 +- .../python/integrations/sanic/index.mdx | 4 +- .../python/integrations/serverless/index.mdx | 2 +- .../python/integrations/socket/index.mdx | 2 +- .../python/integrations/spark/index.mdx | 4 +- .../python/integrations/strawberry/index.mdx | 2 +- .../python/integrations/tryton/index.mdx | 2 +- .../python/integrations/wsgi/index.mdx | 2 +- docs/platforms/python/performance/index.mdx | 25 -- .../performance/instrumentation/index.mdx | 9 - .../performance/troubleshooting/index.mdx | 21 -- docs/platforms/python/profiling/index.mdx | 2 +- .../profiling/troubleshooting/index.mdx | 8 +- docs/platforms/python/tracing/index.mdx | 25 ++ .../automatic-instrumentation.mdx | 2 +- .../custom-instrumentation/caches-module.mdx | 2 +- .../custom-instrumentation/index.mdx | 0 .../custom-instrumentation/queues-module.mdx | 0 .../requests-module.mdx | 2 +- .../python/tracing/instrumentation/index.mdx | 7 + .../instrumentation/opentelemetry.mdx | 0 .../instrumentation/performance-metrics.mdx | 0 .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation/index.mdx | 34 ++ .../limiting-trace-propagation/index.mdx | 0 .../python/tracing/troubleshooting/index.mdx | 21 ++ .../react-native/configuration/sampling.mdx | 2 +- .../distributed-tracing/index.mdx | 34 -- .../transaction-name/index.mdx | 2 +- .../platforms/react-native/features/index.mdx | 2 +- docs/platforms/react-native/index.mdx | 4 +- .../react-native/manual-setup/expo.mdx | 4 +- .../react-native/manual-setup/native-init.mdx | 2 +- .../react-native/performance/index.mdx | 36 -- .../performance/instrumentation/index.mdx | 9 - .../react-native/profiling/index.mdx | 6 +- .../profiling/troubleshooting/index.mdx | 6 +- .../sourcemaps/troubleshooting/index.mdx | 2 +- docs/platforms/react-native/tracing/index.mdx | 34 ++ .../automatic-instrumentation.mdx | 14 +- .../custom-instrumentation.mdx | 2 +- .../instrumentation/custom-navigation.mdx | 2 +- .../instrumentation/expo-router.mdx | 2 +- .../tracing/instrumentation/index.mdx | 7 + .../instrumentation/performance-metrics.mdx | 0 .../react-native-navigation.mdx | 0 .../instrumentation/react-navigation-v4.mdx | 2 +- .../instrumentation/react-navigation.mdx | 4 +- .../instrumentation/time-to-display.mdx | 4 +- .../user-interaction-instrumentation.mdx | 4 +- .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation/index.mdx | 34 ++ .../troubleshooting/index.mdx | 4 +- .../ruby/common/configuration/sampling.mdx | 2 +- .../ruby/common/crons/troubleshooting.mdx | 2 +- .../ruby/common/distributed-tracing/index.mdx | 34 -- docs/platforms/ruby/common/migration.mdx | 2 +- .../ruby/common/performance/index.mdx | 40 --- .../custom-instrumentation.mdx | 17 - .../performance/instrumentation/index.mdx | 9 - .../performance/troubleshooting/index.mdx | 21 -- .../platforms/ruby/common/profiling/index.mdx | 2 +- .../profiling/troubleshooting/index.mdx | 6 +- docs/platforms/ruby/common/tracing/index.mdx | 38 +++ .../automatic-instrumentation.mdx | 2 +- .../custom-instrumentation.mdx | 17 + .../common/tracing/instrumentation/index.mdx | 7 + .../instrumentation/opentelemetry.mdx | 0 .../instrumentation/performance-metrics.mdx | 0 .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation/index.mdx | 34 ++ .../limiting-trace-propagation/index.mdx | 0 .../common/tracing/troubleshooting/index.mdx | 21 ++ .../rust/common/configuration/sampling.mdx | 2 +- .../rust/common/distributed-tracing/index.mdx | 34 -- .../rust/common/performance/index.mdx | 38 --- .../performance/instrumentation/index.mdx | 9 - docs/platforms/rust/common/tracing/index.mdx | 36 ++ .../automatic-instrumentation.mdx | 2 +- .../custom-instrumentation.mdx | 2 +- .../common/tracing/instrumentation/index.mdx | 7 + .../custom-instrumentation/index.mdx | 0 .../dealing-with-cors-issues/index.mdx | 0 .../tracing/trace-propagation/index.mdx | 34 ++ .../unity/configuration/sampling.mdx | 2 +- .../unity/distributed-tracing/index.mdx | 34 -- docs/platforms/unity/metrics/index.mdx | 6 +- docs/platforms/unity/migration/index.mdx | 2 +- docs/platforms/unity/performance/index.mdx | 38 --- .../custom-instrumentation.mdx | 17 - .../performance/instrumentation/index.mdx | 9 - docs/platforms/unity/tracing/index.mdx | 36 ++ .../auto-transaction-config.png | Bin .../automatic-instrumentation.mdx | 2 +- .../custom-instrumentation.mdx | 17 + .../unity/tracing/instrumentation/index.mdx | 7 + .../instrumentation/startup-transaction.png | Bin .../dealing-with-cors-issues/index.mdx | 0 .../unity/tracing/trace-propagation/index.mdx | 34 ++ docs/product/performance/queries.mdx | 2 +- docs/product/performance/requests.mdx | 4 +- docs/product/performance/resources.mdx | 2 +- includes/opentelemetry-available.mdx | 2 +- .../sampling-inheritance/php.laravel.mdx | 2 +- .../custom-instrumentation/android.mdx | 2 +- .../custom-instrumentation/dotnet.mdx | 2 +- .../custom-instrumentation/java.mdx | 2 +- .../custom-instrumentation/javascript.mdx | 20 +- .../custom-instrumentation/python.mdx | 2 +- .../custom-instrumentation/ruby.mdx | 2 +- .../how-to-use/_default.mdx | 2 +- .../how-to-use/android.mdx | 2 +- .../distributed-tracing/how-to-use/apple.mdx | 2 +- .../distributed-tracing/how-to-use/dart.mdx | 2 +- .../how-to-use/flutter.mdx | 2 +- .../distributed-tracing/how-to-use/java.mdx | 2 +- .../how-to-use/java.spring-boot.mdx | 2 +- .../how-to-use/java.spring.mdx | 2 +- .../how-to-use/javascript.mdx | 4 +- .../how-to-use/javascript.nextjs.mdx | 2 +- .../how-to-use/javascript.node.mdx | 2 +- .../how-to-use/javascript.remix.mdx | 4 +- .../how-to-use/javascript.sveltekit.mdx | 2 +- .../distributed-tracing/how-to-use/native.mdx | 2 +- .../distributed-tracing/how-to-use/php.mdx | 2 +- .../distributed-tracing/how-to-use/python.mdx | 2 +- .../how-to-use/react-native.mdx | 2 +- .../distributed-tracing/how-to-use/ruby.mdx | 2 +- .../distributed-tracing/how-to-use/rust.mdx | 2 +- .../getting-started-config/apple.mdx | 4 +- .../getting-started-config/dotnet.xamarin.mdx | 2 +- .../getting-started-config/java.mdx | 4 +- .../java.spring-boot.mdx | 4 +- .../javascript.angular.mdx | 6 +- .../javascript.capacitor.mdx | 2 +- .../javascript.ember.mdx | 2 +- .../getting-started-config/javascript.mdx | 12 +- .../javascript.node.mdx | 4 +- .../javascript.react.mdx | 4 +- .../javascript.solid.mdx | 4 +- .../javascript.svelte.mdx | 4 +- .../getting-started-config/javascript.vue.mdx | 8 +- .../getting-started-config/python.mdx | 2 +- .../getting-started-config/ruby.mdx | 2 +- .../getting-started-config/ruby.rack.mdx | 4 +- .../getting-started-config/ruby.rails.mdx | 2 +- .../getting-started-node/javascript.mdx | 4 +- .../getting-started-primer/android.mdx | 2 +- .../basic-features/apple.mdx | 8 +- .../getting-started-primer/dotnet.mdx | 4 +- .../javascript.cordova.mdx | 2 +- .../javascript.nextjs.mdx | 2 +- .../javascript.svelte.mdx | 2 +- .../javascript-v8/intro/javascript.astro.mdx | 2 +- .../intro/javascript.aws-lambda.mdx | 2 +- .../intro/javascript.connect.mdx | 2 +- .../intro/javascript.express.mdx | 2 +- .../intro/javascript.gcp-functions.mdx | 2 +- .../javascript-v8/intro/javascript.koa.mdx | 2 +- .../javascript-v8/intro/javascript.nextjs.mdx | 2 +- .../javascript-v8/intro/javascript.node.mdx | 2 +- .../javascript-v8/intro/javascript.remix.mdx | 2 +- .../intro/javascript.sveltekit.mdx | 2 +- .../other-changes/javascript.gatsby.mdx | 4 +- .../other-changes/javascript.nextjs.mdx | 2 +- .../javascript.astro.mdx | 2 +- .../javascript.nextjs.mdx | 2 +- .../javascript.sveltekit.mdx | 2 +- .../automatic-performance-metrics/android.mdx | 4 +- .../automatic-performance-metrics/apple.mdx | 4 +- .../automatic-performance-metrics/flutter.mdx | 4 +- .../react-native.mdx | 4 +- .../configure-sample-rate/apple.mdx | 58 ++-- .../configure-sample-rate/dart.mdx | 22 +- .../configure-sample-rate/flutter.mdx | 18 +- .../performance/configure-sample-rate/go.mdx | 37 +-- .../configure-sample-rate/java.mdx | 43 +-- .../java.spring-boot.mdx | 2 +- .../configure-sample-rate/java.spring.mdx | 2 +- .../configure-sample-rate/javascript.bun.mdx | 2 +- .../configure-sample-rate/javascript.deno.mdx | 2 +- .../javascript.electron.mdx | 2 +- .../configure-sample-rate/javascript.mdx | 2 +- .../javascript.react.mdx | 2 +- .../javascript.remix.mdx | 14 +- .../configure-sample-rate/javascript.vue.mdx | 2 +- .../configure-sample-rate/native.mdx | 8 +- .../configure-sample-rate/python.mdx | 2 +- .../configure-sample-rate/ruby.mdx | 2 +- .../connect-services/javascript.mdx | 4 +- .../javascript.astro.mdx | 2 +- .../javascript.electron.mdx | 2 +- .../javascript.nextjs.mdx | 2 +- .../javascript.remix.mdx | 2 +- .../javascript.sveltekit.mdx | 2 +- .../enable-manual-instrumentation/native.mdx | 2 +- .../enable-tracing/javascript.astro.mdx | 2 +- .../enable-tracing/javascript.ember.mdx | 2 +- .../performance/enable-tracing/javascript.mdx | 8 +- .../enable-tracing/javascript.nextjs.mdx | 2 +- .../enable-tracing/javascript.sveltekit.mdx | 2 +- .../javascript.mdx | 2 +- .../performance/traces-sample-rate/python.mdx | 2 +- .../_default.mdx | 4 +- .../javascript.angular.mdx | 4 +- .../javascript.astro.mdx | 4 +- .../javascript.electron.mdx | 4 +- .../javascript.nextjs.mdx | 4 +- .../javascript.react.mdx | 4 +- .../javascript.remix.mdx | 4 +- .../javascript.svelte.mdx | 4 +- .../javascript.sveltekit.mdx | 4 +- .../javascript.vue.mdx | 4 +- .../profiling/index/preface/go.mdx | 2 +- .../session-replay/install/javascript.mdx | 2 +- .../setup-canvas/javascript.mdx | 2 +- .../setup-canvas/javascript.sveltekit.mdx | 2 +- .../user-feedback/install/javascript.mdx | 2 +- src/components/onboarding/index.tsx | 8 +- src/middleware.ts | 40 +++ vercel.json | 309 ++++++++---------- 533 files changed, 2171 insertions(+), 2194 deletions(-) delete mode 100644 docs/platforms/android/performance/index.mdx delete mode 100644 docs/platforms/android/performance/instrumentation/index.mdx create mode 100644 docs/platforms/android/tracing/index.mdx rename docs/platforms/android/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (96%) rename docs/platforms/{apple/common/performance => android/tracing}/instrumentation/custom-instrumentation.mdx (82%) create mode 100644 docs/platforms/android/tracing/instrumentation/img/perf-v2-app-start.png create mode 100644 docs/platforms/android/tracing/instrumentation/img/perf-v2-frame-delay.png rename docs/platforms/android/{performance => tracing}/instrumentation/img/ttid-ttfd-concept.png (100%) create mode 100644 docs/platforms/android/tracing/instrumentation/index.mdx rename docs/platforms/android/{performance => tracing}/instrumentation/perf-v2.mdx (90%) rename docs/platforms/android/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/android/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/android/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) rename docs/platforms/android/{distributed-tracing => tracing/trace-propagation}/index.mdx (98%) delete mode 100644 docs/platforms/apple/common/performance/index.mdx delete mode 100644 docs/platforms/apple/common/performance/instrumentation/index.mdx create mode 100644 docs/platforms/apple/common/tracing/index.mdx rename docs/platforms/apple/common/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (92%) rename docs/platforms/{java/common/performance => apple/common/tracing}/instrumentation/custom-instrumentation.mdx (82%) rename docs/platforms/apple/common/{performance => tracing}/instrumentation/img/app-start-transaction.png (100%) rename docs/platforms/apple/common/{performance => tracing}/instrumentation/img/nested-view-transaction.png (100%) rename docs/platforms/apple/common/{performance => tracing}/instrumentation/img/slow-frozen-frames.png (100%) rename docs/platforms/apple/common/{performance => tracing}/instrumentation/img/ttid-ttfd-concept.png (100%) rename docs/platforms/apple/common/{performance => tracing}/instrumentation/img/ui-view-controller-transaction.png (100%) create mode 100644 docs/platforms/apple/common/tracing/instrumentation/index.mdx rename docs/platforms/apple/common/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/apple/common/{performance => tracing}/instrumentation/swiftui-instrumentation.mdx (100%) rename docs/platforms/apple/common/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) rename docs/platforms/apple/common/{distributed-tracing => tracing/trace-propagation}/index.mdx (99%) delete mode 100644 docs/platforms/dart/performance/index.mdx delete mode 100644 docs/platforms/dart/performance/instrumentation/index.mdx create mode 100644 docs/platforms/dart/tracing/index.mdx rename docs/platforms/dart/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (89%) rename docs/platforms/{flutter/performance => dart/tracing}/instrumentation/custom-instrumentation.mdx (82%) create mode 100644 docs/platforms/dart/tracing/instrumentation/index.mdx rename docs/platforms/dart/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/dart/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/dart/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) rename docs/platforms/dart/{distributed-tracing => tracing/trace-propagation}/index.mdx (98%) delete mode 100644 docs/platforms/dotnet/common/performance/index.mdx delete mode 100644 docs/platforms/dotnet/common/performance/instrumentation/index.mdx create mode 100644 docs/platforms/dotnet/common/tracing/index.mdx rename docs/platforms/dotnet/common/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (96%) rename docs/platforms/{php/common/performance => dotnet/common/tracing}/instrumentation/custom-instrumentation.mdx (80%) create mode 100644 docs/platforms/dotnet/common/tracing/instrumentation/index.mdx rename docs/platforms/dotnet/common/{performance => tracing}/instrumentation/opentelemetry.mdx (100%) rename docs/platforms/dotnet/common/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/dotnet/common/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/dotnet/common/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) create mode 100644 docs/platforms/dotnet/common/tracing/trace-propagation/index.mdx rename docs/platforms/{go/common/performance => dotnet/common/tracing}/troubleshooting/index.mdx (92%) rename docs/platforms/dotnet/guides/aspnet/{performance => tracing}/included-instrumentation.mdx (94%) rename docs/platforms/dotnet/guides/aspnet/{performance => tracing}/troubleshooting.mdx (98%) rename docs/platforms/dotnet/guides/aspnetcore/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (93%) delete mode 100644 docs/platforms/flutter/performance/index.mdx delete mode 100644 docs/platforms/flutter/performance/instrumentation/index.mdx create mode 100644 docs/platforms/flutter/tracing/index.mdx rename docs/platforms/flutter/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (97%) rename docs/platforms/{dart/performance => flutter/tracing}/instrumentation/custom-instrumentation.mdx (82%) create mode 100644 docs/platforms/flutter/tracing/instrumentation/index.mdx rename docs/platforms/flutter/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/flutter/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) rename docs/platforms/{dotnet/common/distributed-tracing => flutter/tracing/trace-propagation}/index.mdx (98%) rename docs/platforms/flutter/{distributed-tracing => tracing/trace-propagation}/limiting-trace-propagation/index.mdx (100%) delete mode 100644 docs/platforms/go/common/distributed-tracing/index.mdx delete mode 100644 docs/platforms/go/common/performance/index.mdx delete mode 100644 docs/platforms/go/common/performance/instrumentation/index.mdx create mode 100644 docs/platforms/go/common/tracing/index.mdx rename docs/platforms/{powershell/performance => go/common/tracing}/instrumentation/custom-instrumentation.mdx (80%) create mode 100644 docs/platforms/go/common/tracing/instrumentation/index.mdx rename docs/platforms/go/common/{performance => tracing}/instrumentation/opentelemetry.mdx (100%) rename docs/platforms/go/common/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) rename docs/platforms/{flutter/distributed-tracing => go/common/tracing/trace-propagation}/index.mdx (98%) rename docs/platforms/{java/common/performance => go/common/tracing}/troubleshooting/index.mdx (92%) delete mode 100644 docs/platforms/java/common/distributed-tracing/index.mdx delete mode 100644 docs/platforms/java/common/performance/index.mdx delete mode 100644 docs/platforms/java/common/performance/instrumentation/index.mdx create mode 100644 docs/platforms/java/common/tracing/index.mdx rename docs/platforms/java/common/{performance => tracing}/instrumentation/apollo.mdx (96%) rename docs/platforms/java/common/{performance => tracing}/instrumentation/apollo3.mdx (98%) rename docs/platforms/{android/performance => java/common/tracing}/instrumentation/custom-instrumentation.mdx (82%) rename docs/platforms/java/common/{performance => tracing}/instrumentation/file-io.mdx (87%) create mode 100644 docs/platforms/java/common/tracing/instrumentation/index.mdx rename docs/platforms/java/common/{performance => tracing}/instrumentation/jdbc.mdx (93%) rename docs/platforms/java/common/{performance => tracing}/instrumentation/okhttp.mdx (98%) rename docs/platforms/java/common/{performance => tracing}/instrumentation/open-feign.mdx (94%) rename docs/platforms/java/common/{performance => tracing}/instrumentation/opentelemetry.mdx (100%) rename docs/platforms/java/common/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/java/common/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/java/common/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) create mode 100644 docs/platforms/java/common/tracing/trace-propagation/index.mdx rename docs/platforms/{dotnet/common/performance => java/common/tracing}/troubleshooting/index.mdx (92%) rename docs/platforms/java/guides/spring-boot/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (98%) rename docs/platforms/java/guides/spring/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (98%) delete mode 100644 docs/platforms/javascript/common/performance/index.mdx delete mode 100644 docs/platforms/javascript/common/performance/instrumentation/index.mdx rename docs/platforms/javascript/common/{performance => tracing}/database/auto-instrument.mdx (100%) rename docs/platforms/javascript/common/{performance => tracing}/database/index.mdx (88%) rename docs/platforms/javascript/common/{performance => tracing}/database/opt-in.mdx (100%) create mode 100644 docs/platforms/javascript/common/tracing/index.mdx rename docs/platforms/javascript/common/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (98%) rename docs/platforms/javascript/common/{performance => tracing}/instrumentation/custom-instrumentation/caches-module.mdx (97%) rename docs/platforms/javascript/common/{performance => tracing}/instrumentation/custom-instrumentation/index.mdx (97%) rename docs/platforms/javascript/common/{performance => tracing}/instrumentation/custom-instrumentation/queues-module.mdx (100%) rename docs/platforms/javascript/common/{performance => tracing}/instrumentation/custom-instrumentation/requests-module.mdx (83%) create mode 100644 docs/platforms/javascript/common/tracing/instrumentation/index.mdx rename docs/platforms/javascript/common/{performance => tracing}/instrumentation/opentelemetry.mdx (100%) rename docs/platforms/javascript/common/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/javascript/common/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/javascript/common/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) rename docs/platforms/javascript/common/{distributed-tracing => tracing/trace-propagation}/index.mdx (98%) rename docs/platforms/javascript/common/{performance => tracing}/troubleshooting/index.mdx (94%) rename docs/platforms/javascript/guides/aws-lambda/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) rename docs/platforms/javascript/guides/azure-functions/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) delete mode 100644 docs/platforms/javascript/guides/connect/performance/index.mdx create mode 100644 docs/platforms/javascript/guides/connect/tracing/index.mdx rename docs/platforms/javascript/guides/connect/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) rename docs/platforms/javascript/guides/ember/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (97%) delete mode 100644 docs/platforms/javascript/guides/express/performance/index.mdx create mode 100644 docs/platforms/javascript/guides/express/tracing/index.mdx rename docs/platforms/javascript/guides/express/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) delete mode 100644 docs/platforms/javascript/guides/fastify/performance/index.mdx create mode 100644 docs/platforms/javascript/guides/fastify/tracing/index.mdx rename docs/platforms/javascript/guides/fastify/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) rename docs/platforms/javascript/guides/gcp-functions/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) delete mode 100644 docs/platforms/javascript/guides/hapi/performance/index.mdx create mode 100644 docs/platforms/javascript/guides/hapi/tracing/index.mdx rename docs/platforms/javascript/guides/hapi/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) delete mode 100644 docs/platforms/javascript/guides/koa/performance/index.mdx create mode 100644 docs/platforms/javascript/guides/koa/tracing/index.mdx rename docs/platforms/javascript/guides/koa/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) delete mode 100644 docs/platforms/javascript/guides/nestjs/performance/index.mdx create mode 100644 docs/platforms/javascript/guides/nestjs/tracing/index.mdx rename docs/platforms/javascript/guides/nestjs/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) delete mode 100644 docs/platforms/javascript/guides/node/performance/index.mdx create mode 100644 docs/platforms/javascript/guides/node/tracing/index.mdx rename docs/platforms/javascript/guides/node/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) delete mode 100644 docs/platforms/native/common/distributed-tracing/index.mdx delete mode 100644 docs/platforms/native/common/performance/index.mdx create mode 100644 docs/platforms/native/common/tracing/index.mdx rename docs/platforms/native/common/{performance => tracing}/instrumentation/custom-instrumentation.mdx (75%) rename docs/platforms/native/common/{performance => tracing}/instrumentation/index.mdx (54%) rename docs/platforms/native/common/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/native/common/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) create mode 100644 docs/platforms/native/common/tracing/trace-propagation/index.mdx delete mode 100644 docs/platforms/php/common/distributed-tracing/index.mdx delete mode 100644 docs/platforms/php/common/performance/instrumentation/index.mdx rename docs/platforms/php/common/{performance => tracing}/index.mdx (53%) rename docs/platforms/php/common/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) rename docs/platforms/{dotnet/common/performance => php/common/tracing}/instrumentation/custom-instrumentation.mdx (80%) create mode 100644 docs/platforms/php/common/tracing/instrumentation/index.mdx rename docs/platforms/php/common/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/php/common/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) create mode 100644 docs/platforms/php/common/tracing/trace-propagation/index.mdx rename docs/platforms/php/common/{performance => tracing}/troubleshooting/index.mdx (92%) rename docs/platforms/php/guides/laravel/{performance => tracing}/distributed-tracing.mdx (64%) rename docs/platforms/php/guides/laravel/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) rename docs/platforms/php/guides/symfony/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (100%) delete mode 100644 docs/platforms/powershell/performance/index.mdx delete mode 100644 docs/platforms/powershell/performance/instrumentation/index.mdx delete mode 100644 docs/platforms/powershell/performance/troubleshooting/index.mdx create mode 100644 docs/platforms/powershell/tracing/index.mdx rename docs/platforms/{go/common/performance => powershell/tracing}/instrumentation/custom-instrumentation.mdx (80%) create mode 100644 docs/platforms/powershell/tracing/instrumentation/index.mdx rename docs/platforms/powershell/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) create mode 100644 docs/platforms/powershell/tracing/troubleshooting/index.mdx delete mode 100644 docs/platforms/python/distributed-tracing/index.mdx delete mode 100644 docs/platforms/python/performance/index.mdx delete mode 100644 docs/platforms/python/performance/instrumentation/index.mdx delete mode 100644 docs/platforms/python/performance/troubleshooting/index.mdx create mode 100644 docs/platforms/python/tracing/index.mdx rename docs/platforms/python/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (90%) rename docs/platforms/python/{performance => tracing}/instrumentation/custom-instrumentation/caches-module.mdx (97%) rename docs/platforms/python/{performance => tracing}/instrumentation/custom-instrumentation/index.mdx (100%) rename docs/platforms/python/{performance => tracing}/instrumentation/custom-instrumentation/queues-module.mdx (100%) rename docs/platforms/python/{performance => tracing}/instrumentation/custom-instrumentation/requests-module.mdx (80%) create mode 100644 docs/platforms/python/tracing/instrumentation/index.mdx rename docs/platforms/python/{performance => tracing}/instrumentation/opentelemetry.mdx (100%) rename docs/platforms/python/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/python/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/python/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) create mode 100644 docs/platforms/python/tracing/trace-propagation/index.mdx rename docs/platforms/python/{distributed-tracing => tracing/trace-propagation}/limiting-trace-propagation/index.mdx (100%) create mode 100644 docs/platforms/python/tracing/troubleshooting/index.mdx delete mode 100644 docs/platforms/react-native/distributed-tracing/index.mdx delete mode 100644 docs/platforms/react-native/performance/index.mdx delete mode 100644 docs/platforms/react-native/performance/instrumentation/index.mdx create mode 100644 docs/platforms/react-native/tracing/index.mdx rename docs/platforms/react-native/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (93%) rename docs/platforms/react-native/{performance => tracing}/instrumentation/custom-instrumentation.mdx (95%) rename docs/platforms/react-native/{performance => tracing}/instrumentation/custom-navigation.mdx (88%) rename docs/platforms/react-native/{performance => tracing}/instrumentation/expo-router.mdx (96%) create mode 100644 docs/platforms/react-native/tracing/instrumentation/index.mdx rename docs/platforms/react-native/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/react-native/{performance => tracing}/instrumentation/react-native-navigation.mdx (100%) rename docs/platforms/react-native/{performance => tracing}/instrumentation/react-navigation-v4.mdx (96%) rename docs/platforms/react-native/{performance => tracing}/instrumentation/react-navigation.mdx (90%) rename docs/platforms/react-native/{performance => tracing}/instrumentation/time-to-display.mdx (88%) rename docs/platforms/react-native/{performance => tracing}/instrumentation/user-interaction-instrumentation.mdx (90%) rename docs/platforms/react-native/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) create mode 100644 docs/platforms/react-native/tracing/trace-propagation/index.mdx rename docs/platforms/react-native/{performance => tracing}/troubleshooting/index.mdx (94%) delete mode 100644 docs/platforms/ruby/common/distributed-tracing/index.mdx delete mode 100644 docs/platforms/ruby/common/performance/index.mdx delete mode 100644 docs/platforms/ruby/common/performance/instrumentation/custom-instrumentation.mdx delete mode 100644 docs/platforms/ruby/common/performance/instrumentation/index.mdx delete mode 100644 docs/platforms/ruby/common/performance/troubleshooting/index.mdx create mode 100644 docs/platforms/ruby/common/tracing/index.mdx rename docs/platforms/ruby/common/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (89%) create mode 100644 docs/platforms/ruby/common/tracing/instrumentation/custom-instrumentation.mdx create mode 100644 docs/platforms/ruby/common/tracing/instrumentation/index.mdx rename docs/platforms/ruby/common/{performance => tracing}/instrumentation/opentelemetry.mdx (100%) rename docs/platforms/ruby/common/{performance => tracing}/instrumentation/performance-metrics.mdx (100%) rename docs/platforms/ruby/common/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/ruby/common/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) create mode 100644 docs/platforms/ruby/common/tracing/trace-propagation/index.mdx rename docs/platforms/ruby/common/{distributed-tracing => tracing/trace-propagation}/limiting-trace-propagation/index.mdx (100%) create mode 100644 docs/platforms/ruby/common/tracing/troubleshooting/index.mdx delete mode 100644 docs/platforms/rust/common/distributed-tracing/index.mdx delete mode 100644 docs/platforms/rust/common/performance/index.mdx delete mode 100644 docs/platforms/rust/common/performance/instrumentation/index.mdx create mode 100644 docs/platforms/rust/common/tracing/index.mdx rename docs/platforms/rust/common/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (95%) rename docs/platforms/rust/common/{performance => tracing}/instrumentation/custom-instrumentation.mdx (84%) create mode 100644 docs/platforms/rust/common/tracing/instrumentation/index.mdx rename docs/platforms/rust/common/{distributed-tracing => tracing/trace-propagation}/custom-instrumentation/index.mdx (100%) rename docs/platforms/rust/common/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) create mode 100644 docs/platforms/rust/common/tracing/trace-propagation/index.mdx delete mode 100644 docs/platforms/unity/distributed-tracing/index.mdx delete mode 100644 docs/platforms/unity/performance/index.mdx delete mode 100644 docs/platforms/unity/performance/instrumentation/custom-instrumentation.mdx delete mode 100644 docs/platforms/unity/performance/instrumentation/index.mdx create mode 100644 docs/platforms/unity/tracing/index.mdx rename docs/platforms/unity/{performance => tracing}/instrumentation/auto-transaction-config.png (100%) rename docs/platforms/unity/{performance => tracing}/instrumentation/automatic-instrumentation.mdx (97%) create mode 100644 docs/platforms/unity/tracing/instrumentation/custom-instrumentation.mdx create mode 100644 docs/platforms/unity/tracing/instrumentation/index.mdx rename docs/platforms/unity/{performance => tracing}/instrumentation/startup-transaction.png (100%) rename docs/platforms/unity/{distributed-tracing => tracing/trace-propagation}/dealing-with-cors-issues/index.mdx (100%) create mode 100644 docs/platforms/unity/tracing/trace-propagation/index.mdx diff --git a/docs/concepts/key-terms/key-terms.mdx b/docs/concepts/key-terms/key-terms.mdx index 081b00317b756..dd2920e4571c0 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 in [sentry.io](https://sentry.io) is represented by a - **Issues** - Displays information about grouped problems in your application. From here, you can go to the **Issue Details** page for a more granular view of any issue. Learn more in the full [Issues documentation](/product/issues/). -- **Performance** - The main view in [sentry.io](http://sentry.io) where you can search or browse for transaction data. The page displays graphs that visualize transactions or trends, as well as a table where you can view relevant transactions and drill down to more information about them. Learn more in the full [Performance documentation](/product/performance/). +- **Performance** - The main view in [sentry.io](http://sentry.io) where you can search or browse for transaction data. The page displays graphs that visualize transactions or trends, as well as a table where you can view relevant transactions and drill down to more information about them. Learn more in the full [Tracing documentation](/product/performance/). - **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/). diff --git a/docs/contributing/approach/product-docs/write-index.mdx b/docs/contributing/approach/product-docs/write-index.mdx index 829370972e65c..2fb4ef571049f 100644 --- a/docs/contributing/approach/product-docs/write-index.mdx +++ b/docs/contributing/approach/product-docs/write-index.mdx @@ -41,7 +41,7 @@ Use this approach for a feature that doesn’t require much explanation and has ## How: Wider-Ranging Features - Benefit Breakdown -Use this approach for a page that requires more explanation to break down and/or has a lot of child pages to explain its different benefits, like [Performance Monitoring](/product/performance/). +Use this approach for a page that requires more explanation to break down and/or has a lot of child pages to explain its different benefits, like [Tracing](/product/performance/). - Describe how each page section/element or child page, helps the customer achieve the WHY of this feature. - Include links to relevant child pages in the text. diff --git a/docs/contributing/approach/sdk-docs/index.mdx b/docs/contributing/approach/sdk-docs/index.mdx index a4386273651e0..8fdbd153d25d9 100644 --- a/docs/contributing/approach/sdk-docs/index.mdx +++ b/docs/contributing/approach/sdk-docs/index.mdx @@ -43,7 +43,7 @@ SDKs provide content that focus on 10 sections (two of which are auto-generated) Provided for customers who need to upgrade from the Raven version of the SDK. Not needed for newer SDKs. -6) **Performance Monitoring** section +6) **Tracing** section Covers how to enable tracing (for customers who previously only used error monitoring) as enabled by each SDK, as well as subpages on Sampling and Transactions. diff --git a/docs/organization/early-adopter-features/index.mdx b/docs/organization/early-adopter-features/index.mdx index 533124c4de805..f295bc2cf5b0f 100644 --- a/docs/organization/early-adopter-features/index.mdx +++ b/docs/organization/early-adopter-features/index.mdx @@ -20,4 +20,4 @@ Limitations: - [Issue Status](/product/issues/states-triage/) tags - [Issue Reprocessing](/product/issues/reprocessing/) - [Span Summary](/product/performance/transaction-summary/#span-summary) -- [Investigation Mode](/product/performance/retention-priorities/#investigation-mode) for retention priorities in Performance Monitoring +- [Investigation Mode](/product/performance/retention-priorities/#investigation-mode) for retention priorities in Tracing diff --git a/docs/platforms/android/configuration/app-not-respond.mdx b/docs/platforms/android/configuration/app-not-respond.mdx index 1a339470df1cb..f00da4975f680 100644 --- a/docs/platforms/android/configuration/app-not-respond.mdx +++ b/docs/platforms/android/configuration/app-not-respond.mdx @@ -4,7 +4,7 @@ sidebar_order: 4 description: "Learn how to turn off or specify ANR." --- -Application Not Responding (ANR) errors are triggered when the main UI thread of an application is blocked for more than five seconds. The Android SDK reports ANR errors as Sentry events. In addition, Sentry calculates [ANR rate](/platforms/android/performance/instrumentation/performance-metrics/#application-not-responding-anr-rate) based on these events and user sessions. +Application Not Responding (ANR) errors are triggered when the main UI thread of an application is blocked for more than five seconds. The Android SDK reports ANR errors as Sentry events. In addition, Sentry calculates [ANR rate](/platforms/android/tracing/instrumentation/performance-metrics/#application-not-responding-anr-rate) based on these events and user sessions. ## ANR implementation details @@ -13,7 +13,7 @@ The Android SDK uses different implementations to detect ANRs, depending on what - Below Android 11: Running a Watchdog thread (v1) - Android 11 and above: Reading [ApplicationExitInfo](https://developer.android.com/reference/android/app/ApplicationExitInfo) (v2) -The new implementation (v2) uses the same data source as Google Play Console. This means the reported ANR events and [ANR rate](/platforms/android/performance/instrumentation/performance-metrics/#application-not-responding-anr-rate) should match with what you see on Sentry. The new implementation also captures a thread dump with additional information, like held locks, to help you resolve ANRs more efficiently. +The new implementation (v2) uses the same data source as Google Play Console. This means the reported ANR events and [ANR rate](/platforms/android/tracing/instrumentation/performance-metrics/#application-not-responding-anr-rate) should match with what you see on Sentry. The new implementation also captures a thread dump with additional information, like held locks, to help you resolve ANRs more efficiently. While the original Watchdog approach (v1) reports many false positives and is based on heuristics, it still has some advantages over v2, like capturing screenshots and transactions with profiles at the time of ANR. diff --git a/docs/platforms/android/configuration/gradle.mdx b/docs/platforms/android/configuration/gradle.mdx index cb47808f33fd0..b5364ae85d35b 100644 --- a/docs/platforms/android/configuration/gradle.mdx +++ b/docs/platforms/android/configuration/gradle.mdx @@ -438,7 +438,7 @@ This way potentially heavy operations are automatically measured without the nee -For this data to be captured, you must enable [performance monitoring](/platforms/android/performance/). +For this data to be captured, you must enable [tracing](/platforms/android/tracing/). diff --git a/docs/platforms/android/configuration/options.mdx b/docs/platforms/android/configuration/options.mdx index a44aac75ad38a..dec6f3b161c26 100644 --- a/docs/platforms/android/configuration/options.mdx +++ b/docs/platforms/android/configuration/options.mdx @@ -172,7 +172,7 @@ _(New in version 6.0.0)_ -This only affects [user interaction transactions](/platforms/android/performance/instrumentation/automatic-instrumentation/#user-interaction-instrumentation). +This only affects [user interaction transactions](/platforms/android/tracing/instrumentation/automatic-instrumentation/#user-interaction-instrumentation). diff --git a/docs/platforms/android/configuration/sampling.mdx b/docs/platforms/android/configuration/sampling.mdx index 6cb83279b7d6a..bc66495c36665 100644 --- a/docs/platforms/android/configuration/sampling.mdx +++ b/docs/platforms/android/configuration/sampling.mdx @@ -72,7 +72,7 @@ When using custom instrumentation to create a transaction, you can add data to t Whatever a transaction's sampling decision, that decision will be passed to its child spans and from there to any transactions they subsequently cause in other services. -(See Distributed Tracing for more about how that propagation is done.) +(See Distributed Tracing for more about how that propagation is done.) If the transaction currently being created is one of those subsequent transactions (in other words, if it has a parent transaction), the upstream (parent) sampling decision will be included in the sampling context data. Your can use this information to choose whether to inherit that decision. In most cases, inheritance is the right choice, to avoid breaking distributed traces. A broken trace will not include all your services. diff --git a/docs/platforms/android/enhance-errors/kotlin-compiler-plugin.mdx b/docs/platforms/android/enhance-errors/kotlin-compiler-plugin.mdx index 40f614a709716..ba4adaa0aa621 100644 --- a/docs/platforms/android/enhance-errors/kotlin-compiler-plugin.mdx +++ b/docs/platforms/android/enhance-errors/kotlin-compiler-plugin.mdx @@ -7,7 +7,7 @@ description: "Learn about using the Sentry Kotlin Compiler Plugin." The [Sentry Kotlin Compiler Plugin](https://github.com/getsentry/sentry-android-gradle-plugin) is an addition to the Sentry Android Gradle plugin and offers improvements to existing SDK features. As of now the main focus of the plugin is to improve apps which utilize Jetpack Compose by automatically tagging `@Composable` functions. - View Hierarchy -- User Interaction Tracing +- User Interaction Tracing @@ -59,4 +59,4 @@ plugins { ### Configuration -As of now no additional steps are necessary. Checkout the docs for View Hierarchy and User Interaction Tracing to see which features the Sentry Kotlin Compiler Plugin improves. +As of now no additional steps are necessary. Checkout the docs for View Hierarchy and User Interaction Tracing to see which features the Sentry Kotlin Compiler Plugin improves. diff --git a/docs/platforms/android/features/index.mdx b/docs/platforms/android/features/index.mdx index 5d9167424693f..363006b08694a 100644 --- a/docs/platforms/android/features/index.mdx +++ b/docs/platforms/android/features/index.mdx @@ -23,7 +23,7 @@ Sentry's Android SDK enables automatic reporting of errors and exceptions, and i - [Release health](/product/releases/health/), tracking crash-free users and sessions. - [Attachments](/platforms/android/enriching-events/attachments/) that can enrich your event by storing additional files, such as config or log files. - [User Feedback](/platforms/android/enriching-events/user-feedback/), providing the ability to collect user information when an event occurs. -- [Performance Monitoring](/product/performance/) that can track: +- [Tracing](/product/performance/) that can track: - Android activity transactions. - User interaction transactions such as: view click, scroll, swipe, and so on. - [Navigation transactions](/platforms/android/configuration/integrations/navigation/). diff --git a/docs/platforms/android/integrations/apollo/index.mdx b/docs/platforms/android/integrations/apollo/index.mdx index 2fff3dd9e0b2a..093322c7258c2 100644 --- a/docs/platforms/android/integrations/apollo/index.mdx +++ b/docs/platforms/android/integrations/apollo/index.mdx @@ -10,7 +10,7 @@ categories: -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. diff --git a/docs/platforms/android/integrations/apollo3/index.mdx b/docs/platforms/android/integrations/apollo3/index.mdx index 1fa7f455ca067..bb1e8519adf0b 100644 --- a/docs/platforms/android/integrations/apollo3/index.mdx +++ b/docs/platforms/android/integrations/apollo3/index.mdx @@ -10,7 +10,7 @@ categories: -To be able to capture transactions, you'll need to first set up performance monitoring. +To be able to capture transactions, you'll need to first set up tracing. diff --git a/docs/platforms/android/integrations/file-io/index.mdx b/docs/platforms/android/integrations/file-io/index.mdx index 22420e88ed0dd..77c161bb5abb8 100644 --- a/docs/platforms/android/integrations/file-io/index.mdx +++ b/docs/platforms/android/integrations/file-io/index.mdx @@ -37,7 +37,7 @@ plugins { -Make sure, that [performance monitoring](/platforms/android/performance/#configure-the-sample-rate) is enabled. +Make sure, that [tracing](/platforms/android/tracing/#configure-the-sample-rate) is enabled. diff --git a/docs/platforms/android/integrations/jetpack-compose/index.mdx b/docs/platforms/android/integrations/jetpack-compose/index.mdx index 8ab307cbf171f..aef4c528e5754 100644 --- a/docs/platforms/android/integrations/jetpack-compose/index.mdx +++ b/docs/platforms/android/integrations/jetpack-compose/index.mdx @@ -27,7 +27,7 @@ With Jetpack Compose performance metrics the Sentry Android SDK can automaticall This feature requires an underlying transaction to attach it's spans to. Transactions can be created manually or automatically by configuring -- Activity instrumentation +- Activity instrumentation - [Navigation Instrumentation](#jetpack-compose-navigation) - [User Interactions](#user-interactions) diff --git a/docs/platforms/android/integrations/room-and-sqlite/index.mdx b/docs/platforms/android/integrations/room-and-sqlite/index.mdx index ce3a97350ef42..e385e36b0ad69 100644 --- a/docs/platforms/android/integrations/room-and-sqlite/index.mdx +++ b/docs/platforms/android/integrations/room-and-sqlite/index.mdx @@ -50,7 +50,7 @@ dependencies { -Make sure, that [performance monitoring](/platforms/android/performance/#configure-the-sample-rate) is enabled. +Make sure, that [tracing](/platforms/android/tracing/#configure-the-sample-rate) is enabled. diff --git a/docs/platforms/android/metrics/index.mdx b/docs/platforms/android/metrics/index.mdx index c69fd7494d1f9..df8e808d2890c 100644 --- a/docs/platforms/android/metrics/index.mdx +++ b/docs/platforms/android/metrics/index.mdx @@ -13,7 +13,7 @@ Metrics are supported with Sentry Android SDK version `7.6.0` and above. Sentry metrics help you pinpoint and solve issues that impact user experience and app performance by measuring the data points that are important to you. You can track things like processing time, event size, user signups, and conversion rates, then correlate them back to tracing data in order to get deeper insights and solve issues faster. -## Enabling the Metrics Feature +## Configure Here's how to add Metrics to your application: diff --git a/docs/platforms/android/performance/index.mdx b/docs/platforms/android/performance/index.mdx deleted file mode 100644 index a9d2a5f81e7e9..0000000000000 --- a/docs/platforms/android/performance/index.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Set Up Performance -description: "Learn how to enable performance monitoring in your app if it is not already set up." -sidebar_order: 4000 ---- - -With [performance monitoring](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). - - - -If you’re adopting Performance in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. - - - -## Configure - -First, enable tracing and configure the sampling rate for transactions. Set the sample rate for your transactions by either: - -- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) -- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. - -The two options are meant to be mutually exclusive. If you set both, will take precedence. - - - -Learn more about performance monitoring options, how to use the tracesSampler function, or how to sample transactions. - -## Verify - -Verify that performance monitoring is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. - -Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. - -While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. - -Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. - -## Next Steps - - diff --git a/docs/platforms/android/performance/instrumentation/index.mdx b/docs/platforms/android/performance/instrumentation/index.mdx deleted file mode 100644 index d90ca5418c68b..0000000000000 --- a/docs/platforms/android/performance/instrumentation/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Instrumentation -sidebar_order: 20 -description: "Learn how to instrument performance in your app." ---- - -Instrumenting performance monitoring is specific to your SDK. - - diff --git a/docs/platforms/android/profiling/index.mdx b/docs/platforms/android/profiling/index.mdx index 8b127272d2b19..1412c4b028606 100644 --- a/docs/platforms/android/profiling/index.mdx +++ b/docs/platforms/android/profiling/index.mdx @@ -7,9 +7,9 @@ sidebar_order: 5000 -## Enable Performance Monitoring +## Enable Tracing -Profiling depends on Sentry’s performance monitoring product being enabled beforehand. To enable performance monitoring in the SDK: +Profiling depends on Sentry’s Tracing product being enabled beforehand. To enable tracing in the SDK: In `AndroidManifest.xml`: @@ -20,7 +20,7 @@ In `AndroidManifest.xml`: ``` -Check out the performance setup documentation for more detailed information on how to configure sampling. Setting the sample rate to 1.0 means all transactions will be captured. +Check out the tracing setup documentation for more detailed information on how to configure sampling. Setting the sample rate to 1.0 means all transactions will be captured. By default, some transactions will be created automatically for common operations like loading a view controller/activity and app startup. @@ -54,14 +54,14 @@ The `io.sentry.traces.profiling.sample-rate` setting is _relative_ to the `io.se ## App Start Profiling -When app start profiling is enabled, the whole app start process is profiled. -This includes all methods from any `ContentProvider`, the `Application` class, and the first Activity, until the first automatic Activity transaction is finished. -App start profiling can be enabled with the manifest option `io.sentry.traces.profiling.enable-app-start` as shown above, and it will respect the `io.sentry.traces.sample-rate` and the `io.sentry.traces.profiling.sample-rate`. +When app start profiling is enabled, the whole app start process is profiled. +This includes all methods from any `ContentProvider`, the `Application` class, and the first Activity, until the first automatic Activity transaction is finished. +App start profiling can be enabled with the manifest option `io.sentry.traces.profiling.enable-app-start` as shown above, and it will respect the `io.sentry.traces.sample-rate` and the `io.sentry.traces.profiling.sample-rate`. If you prefer to use a sampling function, the SDK sets the `isForNextAppStart` field on the `TransactionContext` to specify it will be used for the next app start profiling. -The SDK won't run app start profiling the very first time the app runs, as the SDK won't have read the options by the time the profile should run. +The SDK won't run app start profiling the very first time the app runs, as the SDK won't have read the options by the time the profile should run. The SDK will set the `isForNextAppStart` flag in `TransactionContext` if app start profiling is enabled. diff --git a/docs/platforms/android/profiling/troubleshooting/index.mdx b/docs/platforms/android/profiling/troubleshooting/index.mdx index 4d8763caa6863..ee87700b83367 100644 --- a/docs/platforms/android/profiling/troubleshooting/index.mdx +++ b/docs/platforms/android/profiling/troubleshooting/index.mdx @@ -1,12 +1,12 @@ --- title: Troubleshooting description: "Learn how to troubleshoot your profiling setup." -sidebar_order: 5000 +sidebar_order: 9000 --- If you don't see any profiling data in [sentry.io](https://sentry.io), you can try the following: -- Ensure that performance monitoring is enabled. +- Ensure that Tracing is enabled. - Ensure that the automatic instrumentation is sending performance data to Sentry by going to the **Performance** page in [sentry.io](https://sentry.io). -- If the automatic instrumentation is not sending performance data, try using custom instrumentation. +- If the automatic instrumentation is not sending performance data, try using custom instrumentation. - Enable debug mode in the SDK and check the logs. diff --git a/docs/platforms/android/tracing/index.mdx b/docs/platforms/android/tracing/index.mdx new file mode 100644 index 0000000000000..3c8f0ff00637c --- /dev/null +++ b/docs/platforms/android/tracing/index.mdx @@ -0,0 +1,38 @@ +--- +title: Set Up Tracing +description: "Learn how to enable tracing in your app and discover valuable performance insights of your application." +sidebar_order: 4000 +--- + +With [tracing](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). + + + +If you’re adopting Tracing in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. + + + +## Configure + +First, enable tracing and configure the sample rate for transactions. Set the sample rate for your transactions by either: + +- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) +- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. + +The two options are meant to be mutually exclusive. If you set both, will take precedence. + + + +Learn more about tracing options, how to use the tracesSampler function, or how to sample transactions. + +## Verify + +Verify that tracing is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. + +Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. + +While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. + +## Next Steps + + diff --git a/docs/platforms/android/performance/instrumentation/automatic-instrumentation.mdx b/docs/platforms/android/tracing/instrumentation/automatic-instrumentation.mdx similarity index 96% rename from docs/platforms/android/performance/instrumentation/automatic-instrumentation.mdx rename to docs/platforms/android/tracing/instrumentation/automatic-instrumentation.mdx index 72441c73f228d..aac6f6f35b3a0 100644 --- a/docs/platforms/android/performance/instrumentation/automatic-instrumentation.mdx +++ b/docs/platforms/android/tracing/instrumentation/automatic-instrumentation.mdx @@ -6,7 +6,7 @@ description: "Learn what transactions are captured after tracing is enabled." -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. Supported in Sentry's Android SDK version `4.3.0` and above. @@ -116,7 +116,7 @@ The span starts after each fragment's `onCreate` method is called and before its The span finishes after each fragment's `onResume` method is executed. -Fragment Instrumentation depends on having an active transaction bound to the scope, and ideally it'd be used along with [Activity Instrumentation](/platforms/android/performance/instrumentation/automatic-instrumentation/#activity-instrumentation), which starts a transaction and binds it to the scope automatically. +Fragment Instrumentation depends on having an active transaction bound to the scope, and ideally it'd be used along with [Activity Instrumentation](/platforms/android/tracing/instrumentation/automatic-instrumentation/#activity-instrumentation), which starts a transaction and binds it to the scope automatically. Learn more in our [Fragment documentation](/platforms/android/integrations/fragment/). @@ -157,7 +157,7 @@ Supported on Android OS version `7.0` and above. -Unresponsive UI and animation hitches annoy users and degrade the user experience. Two measurements to track these types of experiences are _slow frames_ and _frozen frames_. If you want your app to run smoothly, you should try to avoid both. The SDK adds these two measurements for the [Activity](/platforms/android/performance/instrumentation/automatic-instrumentation/#activity-instrumentation) transactions. +Unresponsive UI and animation hitches annoy users and degrade the user experience. Two measurements to track these types of experiences are _slow frames_ and _frozen frames_. If you want your app to run smoothly, you should try to avoid both. The SDK adds these two measurements for the [Activity](/platforms/android/tracing/instrumentation/automatic-instrumentation/#activity-instrumentation) transactions. Slow and frozen frames are Mobile Vitals, which you can learn about in the [full documentation](/product/performance/mobile-vitals). @@ -401,7 +401,7 @@ The span starts when each Activity is launched, which is defined as an applicati The span finishes after the Activity draws its first frame. -Time to initial display is dependent on having an active transaction bound to the scope. Ideally, it should be used along with [Activity Instrumentation](/platforms/android/performance/instrumentation/automatic-instrumentation/#activity-instrumentation), which starts a transaction and binds it to the scope automatically. +Time to initial display is dependent on having an active transaction bound to the scope. Ideally, it should be used along with [Activity Instrumentation](/platforms/android/tracing/instrumentation/automatic-instrumentation/#activity-instrumentation), which starts a transaction and binds it to the scope automatically. The following chart shows how time to initial display (TTID) and [time to full display (TTFD)](#time-to-full-display) correlate to transitions between activities: @@ -437,7 +437,7 @@ import io.sentry.Sentry Sentry.reportFullyDisplayed() ``` -Time to full display is dependent on having an active transaction bound to the scope. Ideally, it should be used along with [Activity Instrumentation](/platforms/android/performance/instrumentation/automatic-instrumentation/#activity-instrumentation), which starts a transaction and binds it to the scope automatically. +Time to full display is dependent on having an active transaction bound to the scope. Ideally, it should be used along with [Activity Instrumentation](/platforms/android/tracing/instrumentation/automatic-instrumentation/#activity-instrumentation), which starts a transaction and binds it to the scope automatically. If the span finishes through the API, its `status` is set to `SpanStatus.OK`. If the span doesn't finish after 30 seconds, it is finished by the SDK automatically, and its `status` is set to `SpanStatus.DEADLINE_EXCEEDED`. If the span finishes before the Activity is first drawn and displayed as measured by the `Time to initial display`, the reported time will be shifted to `Time to initial display` measured time. diff --git a/docs/platforms/apple/common/performance/instrumentation/custom-instrumentation.mdx b/docs/platforms/android/tracing/instrumentation/custom-instrumentation.mdx similarity index 82% rename from docs/platforms/apple/common/performance/instrumentation/custom-instrumentation.mdx rename to docs/platforms/android/tracing/instrumentation/custom-instrumentation.mdx index 17d36bf8b4635..3c9fbe7658075 100644 --- a/docs/platforms/apple/common/performance/instrumentation/custom-instrumentation.mdx +++ b/docs/platforms/android/tracing/instrumentation/custom-instrumentation.mdx @@ -1,12 +1,12 @@ --- title: Custom Instrumentation -description: "Learn how to capture performance data on any action in your app." sidebar_order: 20 +description: "Learn how to capture performance data on any action in your app." --- -To capture transactions and spans customized to your organization's needs, you must first set up performance monitoring. +To capture transactions and spans customized to your organization's needs, you must first set up tracing. diff --git a/docs/platforms/android/tracing/instrumentation/img/perf-v2-app-start.png b/docs/platforms/android/tracing/instrumentation/img/perf-v2-app-start.png new file mode 100644 index 0000000000000000000000000000000000000000..c797ae1b2b283e4f0dcfe242ed95508548331c69 GIT binary patch literal 184989 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 RO@D5!qNu4*{P3yY{{h0&qf-C? literal 0 HcmV?d00001 diff --git a/docs/platforms/android/tracing/instrumentation/img/perf-v2-frame-delay.png b/docs/platforms/android/tracing/instrumentation/img/perf-v2-frame-delay.png new file mode 100644 index 0000000000000000000000000000000000000000..8a759ae211a9a8330042f65496c3236e6ef465ec GIT binary patch literal 102677 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

=H=U_ebd0 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 literal 0 HcmV?d00001 diff --git a/docs/platforms/android/performance/instrumentation/img/ttid-ttfd-concept.png b/docs/platforms/android/tracing/instrumentation/img/ttid-ttfd-concept.png similarity index 100% rename from docs/platforms/android/performance/instrumentation/img/ttid-ttfd-concept.png rename to docs/platforms/android/tracing/instrumentation/img/ttid-ttfd-concept.png diff --git a/docs/platforms/android/tracing/instrumentation/index.mdx b/docs/platforms/android/tracing/instrumentation/index.mdx new file mode 100644 index 0000000000000..3b76a93277090 --- /dev/null +++ b/docs/platforms/android/tracing/instrumentation/index.mdx @@ -0,0 +1,7 @@ +--- +title: Instrumentation +sidebar_order: 20 +description: "Learn how to instrument tracing in your app." +--- + + diff --git a/docs/platforms/android/performance/instrumentation/perf-v2.mdx b/docs/platforms/android/tracing/instrumentation/perf-v2.mdx similarity index 90% rename from docs/platforms/android/performance/instrumentation/perf-v2.mdx rename to docs/platforms/android/tracing/instrumentation/perf-v2.mdx index 15e7a8195a297..b57105ce1f738 100644 --- a/docs/platforms/android/performance/instrumentation/perf-v2.mdx +++ b/docs/platforms/android/tracing/instrumentation/perf-v2.mdx @@ -49,11 +49,11 @@ Once enabled, your App Start transaction will show a detailed span breakdown of * `application.load`: `Application.onCreate()` execution time * `activity.load`: The execution time of your `Activity` lifecycle prior to the first frame being drawn -![Screenshot Performance V2 App Start](/platforms/android/performance/instrumentation/perf-v2-app-start.png) +![Screenshot Performance V2 App Start](./img/perf-v2-app-start.png) ### Frames Delay Frames Delay is the user-perceived delayed duration of rendered frames. The Android SDK automatically attaches this information to every span, giving useful insights and showcasing which spans correlate the most to an impaired user experience. For more technical details about frame delay, head over to our [develop docs](https://develop.sentry.dev/sdk/performance/frames-delay/). -![Screenshot Performance V2 Frame Delay](/platforms/android/performance/instrumentation/perf-v2-frame-delay.png) +![Screenshot Performance V2 Frame Delay](./img/perf-v2-frame-delay.png) diff --git a/docs/platforms/android/performance/instrumentation/performance-metrics.mdx b/docs/platforms/android/tracing/instrumentation/performance-metrics.mdx similarity index 100% rename from docs/platforms/android/performance/instrumentation/performance-metrics.mdx rename to docs/platforms/android/tracing/instrumentation/performance-metrics.mdx diff --git a/docs/platforms/android/distributed-tracing/custom-instrumentation/index.mdx b/docs/platforms/android/tracing/trace-propagation/custom-instrumentation/index.mdx similarity index 100% rename from docs/platforms/android/distributed-tracing/custom-instrumentation/index.mdx rename to docs/platforms/android/tracing/trace-propagation/custom-instrumentation/index.mdx diff --git a/docs/platforms/android/distributed-tracing/dealing-with-cors-issues/index.mdx b/docs/platforms/android/tracing/trace-propagation/dealing-with-cors-issues/index.mdx similarity index 100% rename from docs/platforms/android/distributed-tracing/dealing-with-cors-issues/index.mdx rename to docs/platforms/android/tracing/trace-propagation/dealing-with-cors-issues/index.mdx diff --git a/docs/platforms/android/distributed-tracing/index.mdx b/docs/platforms/android/tracing/trace-propagation/index.mdx similarity index 98% rename from docs/platforms/android/distributed-tracing/index.mdx rename to docs/platforms/android/tracing/trace-propagation/index.mdx index 2fa131dd15253..fb41f4dd98c48 100644 --- a/docs/platforms/android/distributed-tracing/index.mdx +++ b/docs/platforms/android/tracing/trace-propagation/index.mdx @@ -1,5 +1,5 @@ --- -title: Set Up Distributed Tracing +title: Trace Propagation description: "Learn how to connect events across applications/services." sidebar_order: 3000 --- diff --git a/docs/platforms/apple/common/configuration/sampling.mdx b/docs/platforms/apple/common/configuration/sampling.mdx index 6cb83279b7d6a..bc66495c36665 100644 --- a/docs/platforms/apple/common/configuration/sampling.mdx +++ b/docs/platforms/apple/common/configuration/sampling.mdx @@ -72,7 +72,7 @@ When using custom instrumentation to create a transaction, you can add data to t Whatever a transaction's sampling decision, that decision will be passed to its child spans and from there to any transactions they subsequently cause in other services. -(See Distributed Tracing for more about how that propagation is done.) +(See Distributed Tracing for more about how that propagation is done.) If the transaction currently being created is one of those subsequent transactions (in other words, if it has a parent transaction), the upstream (parent) sampling decision will be included in the sampling context data. Your can use this information to choose whether to inherit that decision. In most cases, inheritance is the right choice, to avoid breaking distributed traces. A broken trace will not include all your services. diff --git a/docs/platforms/apple/common/configuration/swizzling.mdx b/docs/platforms/apple/common/configuration/swizzling.mdx index 9bd94b530a3aa..45d3b298d399e 100644 --- a/docs/platforms/apple/common/configuration/swizzling.mdx +++ b/docs/platforms/apple/common/configuration/swizzling.mdx @@ -9,21 +9,21 @@ The Cocoa SDK uses [swizzling](https://nshipster.com/method-swizzling/) to provi **macOS** - Breadcrumbs for touch events -- Auto instrumentation for HTTP requests -- Auto instrumentation for File I/O operations -- Auto instrumentation for Core Data operations -- Automatically added sentry-trace header to HTTP requests for distributed tracing +- Auto instrumentation for HTTP requests +- Auto instrumentation for File I/O operations +- Auto instrumentation for Core Data operations +- Automatically added sentry-trace header to HTTP requests for distributed tracing - HTTP Client Errors **iOS, tvOS and Catalyst** - Breadcrumbs for touch events and navigation with UIViewControllers -- Auto instrumentation for UIViewControllers -- Auto instrumentation for HTTP requests -- Auto instrumentation for File I/O operations -- Auto instrumentation for Core Data operations -- Automatically added sentry-trace header to HTTP requests for distributed tracing -- User interaction transactions for UI clicks +- Auto instrumentation for UIViewControllers +- Auto instrumentation for HTTP requests +- Auto instrumentation for File I/O operations +- Auto instrumentation for Core Data operations +- Automatically added sentry-trace header to HTTP requests for distributed tracing +- User interaction transactions for UI clicks - HTTP Client Errors Since Cocoa 7.5.0, you can opt out of swizzling using options. When you disable swizzling, the SDK disables the features above: diff --git a/docs/platforms/apple/common/data-management/apple-privacy-manifest.mdx b/docs/platforms/apple/common/data-management/apple-privacy-manifest.mdx index 3662bd90efd7f..dbd9209cde7e8 100644 --- a/docs/platforms/apple/common/data-management/apple-privacy-manifest.mdx +++ b/docs/platforms/apple/common/data-management/apple-privacy-manifest.mdx @@ -8,7 +8,7 @@ sidebar_order: 50 This guide requires [sentry-cocoa@8.25.0](https://github.com/getsentry/sentry-cocoa/releases/tag/8.25.0) or newer. -Sentry's SDKs provide error and performance monitoring for mobile applications running on Apple devices. To do this, the SDK needs to access certain information about the device and the application. Some of the APIs required for this are considered privacy-relevant by Apple. In order to submit apps to the App Store, Apple requires all apps - and libraries used within these apps - to provide privacy manifest files stating which APIs are used under which allowed reasons. For more details, read Apple's guidelines on [Describing use of required reason API](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api). +Sentry's SDKs provide error and tracing for mobile applications running on Apple devices. To do this, the SDK needs to access certain information about the device and the application. Some of the APIs required for this are considered privacy-relevant by Apple. In order to submit apps to the App Store, Apple requires all apps - and libraries used within these apps - to provide privacy manifest files stating which APIs are used under which allowed reasons. For more details, read Apple's guidelines on [Describing use of required reason API](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api). The information and steps in this guide are still being worked on and might change because of new tools or updated [Apple requirements](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files). diff --git a/docs/platforms/apple/common/install/swift-package-manager.mdx b/docs/platforms/apple/common/install/swift-package-manager.mdx index 3b68d90b289a0..6d9e346878220 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/performance/instrumentation/swiftui-instrumentation/). +- `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/). Xcode allows you to choose many options, but you should choose only one of the diff --git a/docs/platforms/apple/common/metrics/index.mdx b/docs/platforms/apple/common/metrics/index.mdx index 2403855d2fd69..a0cc209c2c467 100644 --- a/docs/platforms/apple/common/metrics/index.mdx +++ b/docs/platforms/apple/common/metrics/index.mdx @@ -13,7 +13,7 @@ Metrics are supported with Sentry Cocoa SDK version `8.23.0` and above. Sentry metrics help you pinpoint and solve issues that impact user experience and app performance by measuring the data points that are important to you. You can track things like processing time, event size, user signups, and conversion rates, then correlate them back to tracing data in order to get deeper insights and solve issues faster. -## Enabling the Metrics Feature +## Configure Here's how to add Metrics to your application: diff --git a/docs/platforms/apple/common/migration/index.mdx b/docs/platforms/apple/common/migration/index.mdx index 2d3d9f34c3098..0cfeb42113abd 100644 --- a/docs/platforms/apple/common/migration/index.mdx +++ b/docs/platforms/apple/common/migration/index.mdx @@ -17,9 +17,9 @@ The minimum supported OS versions have been bumped to macOS 10.13, iOS 11, tvOS The following features are now enabled by default: -- The user interaction tracing integration -- The File I/O tracing integration -- Core Data tracing integration +- The user interaction tracing integration +- The File I/O tracing integration +- Core Data tracing integration - Capture failed requests - App Hangs (not available for watchOS) @@ -104,7 +104,7 @@ SentrySDK.start { options in -We recommend updating to at least [7.5.3](https://github.com/getsentry/sentry-cocoa/releases/tag/7.5.3), because the HTTP instrumentation can lead to crashes. Alternatively, you can also disable the feature. +We recommend updating to at least [7.5.3](https://github.com/getsentry/sentry-cocoa/releases/tag/7.5.3), because the HTTP instrumentation can lead to crashes. Alternatively, you can also disable the feature. diff --git a/docs/platforms/apple/common/performance/index.mdx b/docs/platforms/apple/common/performance/index.mdx deleted file mode 100644 index 91bf4b421b2ad..0000000000000 --- a/docs/platforms/apple/common/performance/index.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Set Up Performance -description: "Learn how to enable performance monitoring in your app if it is not already set up." -sidebar_order: 4000 ---- - -With [performance monitoring](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). - -Automatic instrumentation for monitoring the performance of your application is currently in preview. You can also use custom instrumentation to capture transactions. - -## Configure - -First, enable tracing and configure the sampling rate for transactions. Set the sample rate for your transactions by either: - -- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) -- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. - -The two options are meant to be mutually exclusive. If you set both, will take precedence. - - - -Learn more about performance monitoring options, how to use the tracesSampler function, or how to sample transactions. - -## Verify - -Verify that performance monitoring is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. - -Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. - -While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. - -Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. - -## Next Steps - - diff --git a/docs/platforms/apple/common/performance/instrumentation/index.mdx b/docs/platforms/apple/common/performance/instrumentation/index.mdx deleted file mode 100644 index 31b4b4f67612f..0000000000000 --- a/docs/platforms/apple/common/performance/instrumentation/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Instrumentation -description: "Learn how to instrument performance in your app." -sidebar_order: 20 ---- - -Instrumenting performance monitoring is specific to your SDK. - - diff --git a/docs/platforms/apple/common/profiling/index.mdx b/docs/platforms/apple/common/profiling/index.mdx index edd4e6acdf488..f803db06b2872 100644 --- a/docs/platforms/apple/common/profiling/index.mdx +++ b/docs/platforms/apple/common/profiling/index.mdx @@ -7,9 +7,9 @@ sidebar_order: 5000 -## Enable Performance Monitoring +## Enable Tracing -Profiling depends on Sentry’s performance monitoring product being enabled beforehand. To enable performance monitoring in the SDK: +Profiling depends on Sentry’s Tracing product being enabled beforehand. To enable tracing in the SDK: @@ -31,7 +31,7 @@ SentrySDK.start { options in }]; ``` -Check out the performance setup documentation for more detailed information on how to configure sampling. Setting the sample rate to 1.0 means all transactions will be captured. +Check out the tracing setup documentation for more detailed information on how to configure sampling. Setting the sample rate to 1.0 means all transactions will be captured. By default, some transactions will be created automatically for common operations like loading a view controller/activity and app startup. diff --git a/docs/platforms/apple/common/profiling/troubleshooting/index.mdx b/docs/platforms/apple/common/profiling/troubleshooting/index.mdx index 4d8763caa6863..ee87700b83367 100644 --- a/docs/platforms/apple/common/profiling/troubleshooting/index.mdx +++ b/docs/platforms/apple/common/profiling/troubleshooting/index.mdx @@ -1,12 +1,12 @@ --- title: Troubleshooting description: "Learn how to troubleshoot your profiling setup." -sidebar_order: 5000 +sidebar_order: 9000 --- If you don't see any profiling data in [sentry.io](https://sentry.io), you can try the following: -- Ensure that performance monitoring is enabled. +- Ensure that Tracing is enabled. - Ensure that the automatic instrumentation is sending performance data to Sentry by going to the **Performance** page in [sentry.io](https://sentry.io). -- If the automatic instrumentation is not sending performance data, try using custom instrumentation. +- If the automatic instrumentation is not sending performance data, try using custom instrumentation. - Enable debug mode in the SDK and check the logs. diff --git a/docs/platforms/apple/common/tracing/index.mdx b/docs/platforms/apple/common/tracing/index.mdx new file mode 100644 index 0000000000000..292b56de05d9f --- /dev/null +++ b/docs/platforms/apple/common/tracing/index.mdx @@ -0,0 +1,34 @@ +--- +title: Set Up Tracing +description: "Learn how to enable tracing in your app and discover valuable performance insights of your application." +sidebar_order: 4000 +--- + +With [tracing](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). + +Automatic instrumentation for monitoring the performance of your application is currently in preview. You can also use custom instrumentation to capture transactions. + +## Configure + +First, enable tracing and configure the sample rate for transactions. Set the sample rate for your transactions by either: + +- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) +- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. + +The two options are meant to be mutually exclusive. If you set both, will take precedence. + + + +Learn more about tracing options, how to use the tracesSampler function, or how to sample transactions. + +## Verify + +Verify that tracing is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. + +Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. + +While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. + +## Next Steps + + diff --git a/docs/platforms/apple/common/performance/instrumentation/automatic-instrumentation.mdx b/docs/platforms/apple/common/tracing/instrumentation/automatic-instrumentation.mdx similarity index 92% rename from docs/platforms/apple/common/performance/instrumentation/automatic-instrumentation.mdx rename to docs/platforms/apple/common/tracing/instrumentation/automatic-instrumentation.mdx index bd72203d2fa24..b425738d0615d 100644 --- a/docs/platforms/apple/common/performance/instrumentation/automatic-instrumentation.mdx +++ b/docs/platforms/apple/common/tracing/instrumentation/automatic-instrumentation.mdx @@ -6,7 +6,7 @@ description: "Learn what transactions are captured after tracing is enabled." -Once you set up performance monitoring, the SDK enables the following features by default: +Once you set up tracing, the SDK enables the following features by default: - UIViewController Tracing - App Start Tracing @@ -22,7 +22,7 @@ Once you set up performance monitoringset up performance monitoring. This feature captures transactions when your app loads an in-app [UIViewController][UIViewController]. However, the SDK doesn't capture transactions for UIViewControllers of third-party libraries or SwiftUI. +UIViewController Tracing is enabled by default once you set up tracing. This feature captures transactions when your app loads an in-app [UIViewController][UIViewController]. However, the SDK doesn't capture transactions for UIViewControllers of third-party libraries or SwiftUI. The SDK sets the transaction name to the name of the ViewController, including the module — for example, `Your_App.MainViewController` — and the transaction operation to `ui.load`. The SDK creates spans to provide insight into the time consumed by each of the methods shown in the screenshot below. Due to implementation limitations, the SDK only adds a span for loadView if the instrumented view controller implements it. The SDK adds spans for all other methods, whether you implement them in your view controller or not. @@ -64,7 +64,7 @@ SentrySDK.start { options in This feature is available for iOS, tvOS, and Mac Catalyst. -App Start Tracing is enabled by default once you set up performance monitoring. This feature provides insight into how long your application takes to launch. It adds spans for different phases, from the application launch to the first auto-generated UI transaction. +App Start Tracing is enabled by default once you set up tracing. This feature provides insight into how long your application takes to launch. It adds spans for different phases, from the application launch to the first auto-generated UI transaction. The SDK adds these spans to the first transaction that starts during the app launch with the operation `ui.load`. This is what UIViewController tracing uses. If the duration between the transaction start time and the end timestamp of the app start is more than 5 seconds, the SDK doesn't attach the spans from the app start. This helps prevent attaching spans to unrelated transactions. To enable this feature, enable `enableAutoPerformanceTracing`. @@ -133,7 +133,7 @@ SentrySDK.start { options in This feature is available for iOS, tvOS, and Mac Catalyst. -Slow and Frozen Frames are enabled by default once you set up performance monitoring. Unresponsive UI and animation hitches annoy users and degrade the user experience. Two measurements to track these types of experiences are _slow frames_ and _frozen frames_. If you want your app to run smoothly, you should try to avoid both. The SDK adds these two measurements for the transactions you capture. +Slow and Frozen Frames are enabled by default once you set up tracing. Unresponsive UI and animation hitches annoy users and degrade the user experience. Two measurements to track these types of experiences are _slow frames_ and _frozen frames_. If you want your app to run smoothly, you should try to avoid both. The SDK adds these two measurements for the transactions you capture. The detail view of the transaction displays the slow, frozen, and total frames: @@ -143,7 +143,7 @@ Slow and frozen frames are Mobile Vitals, which you can learn about in the [full ## Network Tracking -Network Tracking is enabled by default once you set up performance monitoring. The Sentry SDK adds spans for outgoing HTTP requests to ongoing transactions bound to the Scope. Currently, the SDK supports requests with [NSURLSession][NSURLSession], but not the legacy [NSURLConnection][NSURLConnection]. +Network Tracking is enabled by default once you set up tracing. The Sentry SDK adds spans for outgoing HTTP requests to ongoing transactions bound to the Scope. Currently, the SDK supports requests with [NSURLSession][NSURLSession], but not the legacy [NSURLConnection][NSURLConnection]. To disable the HTTP instrumentation: diff --git a/docs/platforms/java/common/performance/instrumentation/custom-instrumentation.mdx b/docs/platforms/apple/common/tracing/instrumentation/custom-instrumentation.mdx similarity index 82% rename from docs/platforms/java/common/performance/instrumentation/custom-instrumentation.mdx rename to docs/platforms/apple/common/tracing/instrumentation/custom-instrumentation.mdx index 17d36bf8b4635..2d9a41622d610 100644 --- a/docs/platforms/java/common/performance/instrumentation/custom-instrumentation.mdx +++ b/docs/platforms/apple/common/tracing/instrumentation/custom-instrumentation.mdx @@ -6,7 +6,7 @@ sidebar_order: 20 -To capture transactions and spans customized to your organization's needs, you must first set up performance monitoring. +To capture transactions and spans customized to your organization's needs, you must first set up tracing. diff --git a/docs/platforms/apple/common/performance/instrumentation/img/app-start-transaction.png b/docs/platforms/apple/common/tracing/instrumentation/img/app-start-transaction.png similarity index 100% rename from docs/platforms/apple/common/performance/instrumentation/img/app-start-transaction.png rename to docs/platforms/apple/common/tracing/instrumentation/img/app-start-transaction.png diff --git a/docs/platforms/apple/common/performance/instrumentation/img/nested-view-transaction.png b/docs/platforms/apple/common/tracing/instrumentation/img/nested-view-transaction.png similarity index 100% rename from docs/platforms/apple/common/performance/instrumentation/img/nested-view-transaction.png rename to docs/platforms/apple/common/tracing/instrumentation/img/nested-view-transaction.png diff --git a/docs/platforms/apple/common/performance/instrumentation/img/slow-frozen-frames.png b/docs/platforms/apple/common/tracing/instrumentation/img/slow-frozen-frames.png similarity index 100% rename from docs/platforms/apple/common/performance/instrumentation/img/slow-frozen-frames.png rename to docs/platforms/apple/common/tracing/instrumentation/img/slow-frozen-frames.png diff --git a/docs/platforms/apple/common/performance/instrumentation/img/ttid-ttfd-concept.png b/docs/platforms/apple/common/tracing/instrumentation/img/ttid-ttfd-concept.png similarity index 100% rename from docs/platforms/apple/common/performance/instrumentation/img/ttid-ttfd-concept.png rename to docs/platforms/apple/common/tracing/instrumentation/img/ttid-ttfd-concept.png diff --git a/docs/platforms/apple/common/performance/instrumentation/img/ui-view-controller-transaction.png b/docs/platforms/apple/common/tracing/instrumentation/img/ui-view-controller-transaction.png similarity index 100% rename from docs/platforms/apple/common/performance/instrumentation/img/ui-view-controller-transaction.png rename to docs/platforms/apple/common/tracing/instrumentation/img/ui-view-controller-transaction.png diff --git a/docs/platforms/apple/common/tracing/instrumentation/index.mdx b/docs/platforms/apple/common/tracing/instrumentation/index.mdx new file mode 100644 index 0000000000000..eaac9e016be4c --- /dev/null +++ b/docs/platforms/apple/common/tracing/instrumentation/index.mdx @@ -0,0 +1,7 @@ +--- +title: Instrumentation +description: "Learn how to instrument tracing in your app." +sidebar_order: 20 +--- + + diff --git a/docs/platforms/apple/common/performance/instrumentation/performance-metrics.mdx b/docs/platforms/apple/common/tracing/instrumentation/performance-metrics.mdx similarity index 100% rename from docs/platforms/apple/common/performance/instrumentation/performance-metrics.mdx rename to docs/platforms/apple/common/tracing/instrumentation/performance-metrics.mdx diff --git a/docs/platforms/apple/common/performance/instrumentation/swiftui-instrumentation.mdx b/docs/platforms/apple/common/tracing/instrumentation/swiftui-instrumentation.mdx similarity index 100% rename from docs/platforms/apple/common/performance/instrumentation/swiftui-instrumentation.mdx rename to docs/platforms/apple/common/tracing/instrumentation/swiftui-instrumentation.mdx diff --git a/docs/platforms/apple/common/distributed-tracing/dealing-with-cors-issues/index.mdx b/docs/platforms/apple/common/tracing/trace-propagation/dealing-with-cors-issues/index.mdx similarity index 100% rename from docs/platforms/apple/common/distributed-tracing/dealing-with-cors-issues/index.mdx rename to docs/platforms/apple/common/tracing/trace-propagation/dealing-with-cors-issues/index.mdx diff --git a/docs/platforms/apple/common/distributed-tracing/index.mdx b/docs/platforms/apple/common/tracing/trace-propagation/index.mdx similarity index 99% rename from docs/platforms/apple/common/distributed-tracing/index.mdx rename to docs/platforms/apple/common/tracing/trace-propagation/index.mdx index e3e93816ee0ba..4584f4b688ddf 100644 --- a/docs/platforms/apple/common/distributed-tracing/index.mdx +++ b/docs/platforms/apple/common/tracing/trace-propagation/index.mdx @@ -1,5 +1,5 @@ --- -title: Set Up Distributed Tracing +title: Trace Propagation description: "Learn how to connect events across applications/services." sidebar_order: 3000 --- diff --git a/docs/platforms/apple/common/troubleshooting/index.mdx b/docs/platforms/apple/common/troubleshooting/index.mdx index 9bd663610f056..5ce53178683f2 100644 --- a/docs/platforms/apple/common/troubleshooting/index.mdx +++ b/docs/platforms/apple/common/troubleshooting/index.mdx @@ -22,7 +22,7 @@ We recommend updating to at least [7.11.0](https://github.com/getsentry/sentry-c ## Crashes with HTTP Auto Performance Instrumentation -We recommend updating to at least [7.5.3](https://github.com/getsentry/sentry-cocoa/releases/tag/7.5.3), because the HTTP instrumentation can lead to crashes. Alternatively, you can also disable the feature. +We recommend updating to at least [7.5.3](https://github.com/getsentry/sentry-cocoa/releases/tag/7.5.3), because the HTTP instrumentation can lead to crashes. Alternatively, you can also disable the feature. ## Duplicated Crashes Event With Screenshots @@ -98,7 +98,7 @@ SentrySDK.start { options in ``` If you can't upgrade the Sentry Cocoa SDK to version `8.23.0`, you can also disable swizzling, as shown below. -However, this would also disable some useful features, such as automatic performance monitoring and network breadcrumbs. +However, this would also disable some useful features, such as automatic tracing and network breadcrumbs. ```swift {tabTitle:Swift} import Sentry diff --git a/docs/platforms/apple/guides/ios/manual-setup.mdx b/docs/platforms/apple/guides/ios/manual-setup.mdx index 0734e245ebf50..fbfb928364a1c 100644 --- a/docs/platforms/apple/guides/ios/manual-setup.mdx +++ b/docs/platforms/apple/guides/ios/manual-setup.mdx @@ -55,7 +55,7 @@ func application(_ application: UIApplication, options.dsn = @"___PUBLIC_DSN___"; options.debug = YES; // Enabled debug when first installing is always helpful - // Enable tracing to capture 100% of transactions for performance monitoring. + // Enable tracing to capture 100% of transactions for tracing. // Use 'options.tracesSampleRate' to set the sampling rate. // We recommend setting a sample rate in production. options.enableTracing = YES; @@ -79,7 +79,7 @@ struct SwiftUIApp: App { options.dsn = "___PUBLIC_DSN___" options.debug = true // Enabled debug when first installing is always helpful - // Enable tracing to capture 100% of transactions for performance monitoring. + // Enable tracing to capture 100% of transactions for tracing. // Use 'options.tracesSampleRate' to set the sampling rate. // We recommend setting a sample rate in production. options.enableTracing = true diff --git a/docs/platforms/dart/configuration/sampling.mdx b/docs/platforms/dart/configuration/sampling.mdx index 6cb83279b7d6a..bc66495c36665 100644 --- a/docs/platforms/dart/configuration/sampling.mdx +++ b/docs/platforms/dart/configuration/sampling.mdx @@ -72,7 +72,7 @@ When using custom instrumentation to create a transaction, you can add data to t Whatever a transaction's sampling decision, that decision will be passed to its child spans and from there to any transactions they subsequently cause in other services. -(See Distributed Tracing for more about how that propagation is done.) +(See Distributed Tracing for more about how that propagation is done.) If the transaction currently being created is one of those subsequent transactions (in other words, if it has a parent transaction), the upstream (parent) sampling decision will be included in the sampling context data. Your can use this information to choose whether to inherit that decision. In most cases, inheritance is the right choice, to avoid breaking distributed traces. A broken trace will not include all your services. diff --git a/docs/platforms/dart/features/index.mdx b/docs/platforms/dart/features/index.mdx index c8f15f446c77a..df27a6be01578 100644 --- a/docs/platforms/dart/features/index.mdx +++ b/docs/platforms/dart/features/index.mdx @@ -14,7 +14,7 @@ Sentry's Dart SDK enables automatic reporting of errors and exceptions, and iden - [Dio Integration](/platforms/dart/integrations/dio/). - [Attachments](/platforms/dart/enriching-events/attachments/) enrich your event by storing additional files, such as config or log files. - [User Feedback](/platforms/dart/user-feedback/) provides the ability to collect user information when an event occurs. -- [Performance Monitoring](/product/performance/) creates transactions for: +- [Tracing](/product/performance/) creates transactions for: - [HTTP requests](/platforms/dart/integrations/http-integration/#performance-monitoring-for-http-requests). - [Dio HTTP library](/platforms/dart/integrations/dio/#performance-monitoring-for-http-requests). - [File I/O Integration](/platforms/dart/integrations/file/). diff --git a/docs/platforms/dart/index.mdx b/docs/platforms/dart/index.mdx index f14db9ec186c1..6d42ba2c15a3a 100644 --- a/docs/platforms/dart/index.mdx +++ b/docs/platforms/dart/index.mdx @@ -45,7 +45,7 @@ import 'package:sentry/sentry.dart'; Future main() async { await Sentry.init((options) { options.dsn = '___PUBLIC_DSN___'; - // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring. + // Set tracesSampleRate to 1.0 to capture 100% of transactions for tracing. // We recommend adjusting this value in production. options.tracesSampleRate = 1.0; }); @@ -75,4 +75,4 @@ try { ## Next Steps - Learn about the features of Sentry's Dart SDK -- Add performance instrumentation to your app +- Add performance instrumentation to your app diff --git a/docs/platforms/dart/integrations/dio.mdx b/docs/platforms/dart/integrations/dio.mdx index 3985b61024d7f..f25623fda860a 100644 --- a/docs/platforms/dart/integrations/dio.mdx +++ b/docs/platforms/dart/integrations/dio.mdx @@ -4,7 +4,7 @@ description: "Learn more about the Sentry Dio integration for the Dart SDK." sidebar_order: 4 --- -The `sentry_dio` library provides [Dio](https://pub.dev/packages/dio) support for Sentry using the [HttpClientAdapter](https://pub.dev/documentation/dio/latest/dio/HttpClientAdapter-class.html). It is able to collect breadcrumbs, run performance monitoring for HTTP requests, and capture events for failed requests. +The `sentry_dio` library provides [Dio](https://pub.dev/packages/dio) support for Sentry using the [HttpClientAdapter](https://pub.dev/documentation/dio/latest/dio/HttpClientAdapter-class.html). It is able to collect breadcrumbs, run tracing for HTTP requests, and capture events for failed requests. ## Install @@ -74,9 +74,9 @@ Future main() async { } ``` -## Performance Monitoring for HTTP Requests +## Tracing for HTTP Requests -The Dio integration also provides insight into performance monitoring for your HTTP requests done with Dio. +The Dio integration also provides insight into tracing for your HTTP requests done with Dio. ### Instrumentation Behaviour @@ -91,7 +91,7 @@ The Dio integration also provides insight into performance monitoring for your H Before starting, ensure: 1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure). -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). ### Configure diff --git a/docs/platforms/dart/integrations/file.mdx b/docs/platforms/dart/integrations/file.mdx index b4ba965caadda..5e98241bea931 100644 --- a/docs/platforms/dart/integrations/file.mdx +++ b/docs/platforms/dart/integrations/file.mdx @@ -5,7 +5,7 @@ sidebar_order: 5 --- File I/O operations are fundamental for reading from and writing to files within an application. -The `sentry_file` integration provides [File](https://api.dart.dev/stable/2.18.5/dart-io/File-class.html) support for Sentry thus providing insight into performance monitoring of file operations. +The `sentry_file` integration provides [File](https://api.dart.dev/stable/2.18.5/dart-io/File-class.html) support for Sentry thus providing insight into tracing of file operations. ## Behavior @@ -18,7 +18,7 @@ The `sentry_file` integration provides [File](https://api.dart.dev/stable/2.18.5 ## Prerequisites 1. The Sentry [Dart](/platforms/dart/#configure) SDK is initialized. -2. Performance Monitoring is set up. Learn more [here](/platforms/dart/performance/). +2. Tracing is set up. Learn more [here](/platforms/dart/tracing/). ## Install diff --git a/docs/platforms/dart/integrations/http-integration.mdx b/docs/platforms/dart/integrations/http-integration.mdx index 09413f9c568ac..50001dce4548f 100644 --- a/docs/platforms/dart/integrations/http-integration.mdx +++ b/docs/platforms/dart/integrations/http-integration.mdx @@ -62,11 +62,11 @@ var uriResponse = await client.post('https://example.com/whatsit/create', } ``` -## Performance Monitoring for HTTP Requests +## Tracing for HTTP Requests -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. diff --git a/docs/platforms/dart/metrics/index.mdx b/docs/platforms/dart/metrics/index.mdx index 15b62f4eb2fef..e74a0abaf9065 100644 --- a/docs/platforms/dart/metrics/index.mdx +++ b/docs/platforms/dart/metrics/index.mdx @@ -1,6 +1,7 @@ --- title: Set Up Metrics description: "Learn how to measure the data points you care about by configuring Metrics in your Dart app." +sidebar_order: 6000 --- @@ -12,7 +13,7 @@ Metrics are supported with Sentry Dart SDK version `7.19.0` and above. Sentry metrics help you pinpoint and solve issues that impact user experience and app performance by measuring the data points that are important to you. You can track things like processing time, event size, user signups, and conversion rates, then correlate them back to tracing data in order to get deeper insights and solve issues faster. -## Enabling the Metrics Feature +## Configure Here's how to add Metrics to your application: diff --git a/docs/platforms/dart/performance/index.mdx b/docs/platforms/dart/performance/index.mdx deleted file mode 100644 index a9d2a5f81e7e9..0000000000000 --- a/docs/platforms/dart/performance/index.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Set Up Performance -description: "Learn how to enable performance monitoring in your app if it is not already set up." -sidebar_order: 4000 ---- - -With [performance monitoring](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). - - - -If you’re adopting Performance in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. - - - -## Configure - -First, enable tracing and configure the sampling rate for transactions. Set the sample rate for your transactions by either: - -- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) -- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. - -The two options are meant to be mutually exclusive. If you set both, will take precedence. - - - -Learn more about performance monitoring options, how to use the tracesSampler function, or how to sample transactions. - -## Verify - -Verify that performance monitoring is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. - -Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. - -While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. - -Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. - -## Next Steps - - diff --git a/docs/platforms/dart/performance/instrumentation/index.mdx b/docs/platforms/dart/performance/instrumentation/index.mdx deleted file mode 100644 index 31b4b4f67612f..0000000000000 --- a/docs/platforms/dart/performance/instrumentation/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Instrumentation -description: "Learn how to instrument performance in your app." -sidebar_order: 20 ---- - -Instrumenting performance monitoring is specific to your SDK. - - diff --git a/docs/platforms/dart/tracing/index.mdx b/docs/platforms/dart/tracing/index.mdx new file mode 100644 index 0000000000000..3c8f0ff00637c --- /dev/null +++ b/docs/platforms/dart/tracing/index.mdx @@ -0,0 +1,38 @@ +--- +title: Set Up Tracing +description: "Learn how to enable tracing in your app and discover valuable performance insights of your application." +sidebar_order: 4000 +--- + +With [tracing](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). + + + +If you’re adopting Tracing in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. + + + +## Configure + +First, enable tracing and configure the sample rate for transactions. Set the sample rate for your transactions by either: + +- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) +- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. + +The two options are meant to be mutually exclusive. If you set both, will take precedence. + + + +Learn more about tracing options, how to use the tracesSampler function, or how to sample transactions. + +## Verify + +Verify that tracing is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. + +Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. + +While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. + +## Next Steps + + diff --git a/docs/platforms/dart/performance/instrumentation/automatic-instrumentation.mdx b/docs/platforms/dart/tracing/instrumentation/automatic-instrumentation.mdx similarity index 89% rename from docs/platforms/dart/performance/instrumentation/automatic-instrumentation.mdx rename to docs/platforms/dart/tracing/instrumentation/automatic-instrumentation.mdx index 837ca534dd7d4..3931d7911e1b0 100644 --- a/docs/platforms/dart/performance/instrumentation/automatic-instrumentation.mdx +++ b/docs/platforms/dart/tracing/instrumentation/automatic-instrumentation.mdx @@ -6,13 +6,13 @@ sidebar_order: 10 -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. ### http.Client Library Instrumentation -The `http.Client` instrumentation, once added the `SentryHttpClient` and enabled the [performance](/platforms/dart/performance/) feature, starts a span out of the active span bound to the scope for each HTTP Request. The SDK sets the span `operation` to `http.client` and `description` to request `$METHOD $url`; for example, `GET https://sentry.io`. +The `http.Client` instrumentation, once added the `SentryHttpClient` and enabled the [performance](/platforms/dart/tracing/) feature, starts a span out of the active span bound to the scope for each HTTP Request. The SDK sets the span `operation` to `http.client` and `description` to request `$METHOD $url`; for example, `GET https://sentry.io`. The span finishes once the request has been executed. The span `status` depends on either the HTTP Response `code` or `SpanStatus.internalError()` if the `code` does not match any of Sentry's `SpanStatus`. diff --git a/docs/platforms/flutter/performance/instrumentation/custom-instrumentation.mdx b/docs/platforms/dart/tracing/instrumentation/custom-instrumentation.mdx similarity index 82% rename from docs/platforms/flutter/performance/instrumentation/custom-instrumentation.mdx rename to docs/platforms/dart/tracing/instrumentation/custom-instrumentation.mdx index f1d1d5bb6bccf..c34b1e38fe92f 100644 --- a/docs/platforms/flutter/performance/instrumentation/custom-instrumentation.mdx +++ b/docs/platforms/dart/tracing/instrumentation/custom-instrumentation.mdx @@ -6,7 +6,7 @@ sidebar_order: 20 -To capture transactions and spans customized to your organization's needs, you must first set up performance monitoring. +To capture transactions and spans customized to your organization's needs, you must first set up tracing. diff --git a/docs/platforms/dart/tracing/instrumentation/index.mdx b/docs/platforms/dart/tracing/instrumentation/index.mdx new file mode 100644 index 0000000000000..eaac9e016be4c --- /dev/null +++ b/docs/platforms/dart/tracing/instrumentation/index.mdx @@ -0,0 +1,7 @@ +--- +title: Instrumentation +description: "Learn how to instrument tracing in your app." +sidebar_order: 20 +--- + + diff --git a/docs/platforms/dart/performance/instrumentation/performance-metrics.mdx b/docs/platforms/dart/tracing/instrumentation/performance-metrics.mdx similarity index 100% rename from docs/platforms/dart/performance/instrumentation/performance-metrics.mdx rename to docs/platforms/dart/tracing/instrumentation/performance-metrics.mdx diff --git a/docs/platforms/dart/distributed-tracing/custom-instrumentation/index.mdx b/docs/platforms/dart/tracing/trace-propagation/custom-instrumentation/index.mdx similarity index 100% rename from docs/platforms/dart/distributed-tracing/custom-instrumentation/index.mdx rename to docs/platforms/dart/tracing/trace-propagation/custom-instrumentation/index.mdx diff --git a/docs/platforms/dart/distributed-tracing/dealing-with-cors-issues/index.mdx b/docs/platforms/dart/tracing/trace-propagation/dealing-with-cors-issues/index.mdx similarity index 100% rename from docs/platforms/dart/distributed-tracing/dealing-with-cors-issues/index.mdx rename to docs/platforms/dart/tracing/trace-propagation/dealing-with-cors-issues/index.mdx diff --git a/docs/platforms/dart/distributed-tracing/index.mdx b/docs/platforms/dart/tracing/trace-propagation/index.mdx similarity index 98% rename from docs/platforms/dart/distributed-tracing/index.mdx rename to docs/platforms/dart/tracing/trace-propagation/index.mdx index 2fa131dd15253..fb41f4dd98c48 100644 --- a/docs/platforms/dart/distributed-tracing/index.mdx +++ b/docs/platforms/dart/tracing/trace-propagation/index.mdx @@ -1,5 +1,5 @@ --- -title: Set Up Distributed Tracing +title: Trace Propagation description: "Learn how to connect events across applications/services." sidebar_order: 3000 --- diff --git a/docs/platforms/dotnet/common/configuration/sampling.mdx b/docs/platforms/dotnet/common/configuration/sampling.mdx index 6cb83279b7d6a..bc66495c36665 100644 --- a/docs/platforms/dotnet/common/configuration/sampling.mdx +++ b/docs/platforms/dotnet/common/configuration/sampling.mdx @@ -72,7 +72,7 @@ When using custom instrumentation to create a transaction, you can add data to t Whatever a transaction's sampling decision, that decision will be passed to its child spans and from there to any transactions they subsequently cause in other services. -(See Distributed Tracing for more about how that propagation is done.) +(See Distributed Tracing for more about how that propagation is done.) If the transaction currently being created is one of those subsequent transactions (in other words, if it has a parent transaction), the upstream (parent) sampling decision will be included in the sampling context data. Your can use this information to choose whether to inherit that decision. In most cases, inheritance is the right choice, to avoid breaking distributed traces. A broken trace will not include all your services. diff --git a/docs/platforms/dotnet/common/metrics/index.mdx b/docs/platforms/dotnet/common/metrics/index.mdx index 00617570a35cd..ae6a90a3cab42 100644 --- a/docs/platforms/dotnet/common/metrics/index.mdx +++ b/docs/platforms/dotnet/common/metrics/index.mdx @@ -36,7 +36,8 @@ To emit a counter, do the following: ```csharp // Incrementing a counter by one for each button click. SentrySdk.Metrics.Increment("ButtonClicked", - tags: new Dictionary {{ "region", "us-west-1" }}); + tags: new Dictionary {{ "region", "us-west-1" }} +); ``` ## Emit a Distribution @@ -50,7 +51,8 @@ To emit a distribution, do the following: SentrySdk.Metrics.Distribution("LoadingTime", 15, unit: MeasurementUnit.Duration.Millisecond, - tags: new Dictionary {{ "region", "us-west-1" }}); + tags: new Dictionary {{ "region", "us-west-1" }} +); ``` ## Emit a Set @@ -63,7 +65,8 @@ To emit a set, do the following: // Adding a set of unique occurrences. SentrySdk.Metrics.Set("UserView", "Rufus", unit: MeasurementUnit.Custom("username"), - tags: new Dictionary {{ "region", "us-west-1" }}); + tags: new Dictionary {{ "region", "us-west-1" }} +); ``` ## Emit a Gauge @@ -77,7 +80,8 @@ To emit a gauge, do the following: SentrySdk.Metrics.Gauge("LoadingTime", 15, unit: MeasurementUnit.Duration.Millisecond, - tags: new Dictionary {{ "region", "us-west-1" }}); + tags: new Dictionary {{ "region", "us-west-1" }} +); ``` ## Emit a Timer diff --git a/docs/platforms/dotnet/common/migration/index.mdx b/docs/platforms/dotnet/common/migration/index.mdx index f9490656dc6b4..a81de33b54695 100644 --- a/docs/platforms/dotnet/common/migration/index.mdx +++ b/docs/platforms/dotnet/common/migration/index.mdx @@ -23,7 +23,7 @@ We're dropping support for some of the old target frameworks. See this [GitHub D ### Sentry Self-Hosted Compatibility If you're using `sentry.io` this change does not affect you. -This SDK version is compatible with a self-hosted version of Sentry `22.12.0` or higher. If you are using an older version of [self-hosted Sentry](https://develop.sentry.dev/self-hosted/) (aka on-premise), you will need to [upgrade](https://develop.sentry.dev/self-hosted/releases/). +This SDK version is compatible with a self-hosted version of Sentry `22.12.0` or higher. If you are using an older version of [self-hosted Sentry](https://develop.sentry.dev/self-hosted/) (aka on-premise), you will need to [upgrade](https://develop.sentry.dev/self-hosted/releases/). ### Significant Changes in Behavior @@ -36,7 +36,7 @@ This SDK version is compatible with a self-hosted version of Sentry `22.12.0` or false ``` -- Transactions' spans are no longer automatically finished with the status `deadline_exceeded` by the transaction. This is now handled by [Relay](https://github.com/getsentry/relay). +- Transactions' spans are no longer automatically finished with the status `deadline_exceeded` by the transaction. This is now handled by [Relay](https://github.com/getsentry/relay). - Customers self hosting Sentry must use version `22.12.0` or later - The `User.IpAddress` is now set to `{{auto}}` by default, even when `sendDefaultPII` is disabled. - To prevent sending IP addresses, use the "Prevent Storing of IP Addresses" option in the "Security & Privacy" project settings on sentry.io. @@ -121,7 +121,7 @@ This SDK version is compatible with a self-hosted version of Sentry `22.12.0` or - `Runtime.Clone()` - this shouldn't have been public in the past and has no replacement. - `AssemblyExtensions` - this shouldn't have been public in the past and has no replacement. - `SentryDatabaseLogging.UseBreadcrumbs()` - it is called automatically and has no replacement. -- A number of interfaces have removed: +- A number of interfaces have removed: - `IHasMeasurements` - use `ISpanData` instead. - `IHasBreadcrumbs` - use `IEventLike` instead. - `ISpanContext` - use `ITraceContext` instead. @@ -248,7 +248,7 @@ The replacement is the option `MaxRequestBodySize`. #### New Methods on `IHub` and `ISentryClient` -Sentry's performance monitoring capabilities requires additive API changes to interfaces such as `IHub` and `ISentryClient`. If you implement your own `IHub`, you'll need to implement two new methods: +Sentry's tracing capabilities requires additive API changes to interfaces such as `IHub` and `ISentryClient`. If you implement your own `IHub`, you'll need to implement two new methods: `ISentryClient` received: `CaptureTransaction`. `IHub` received: `StartTransaction` and `GetTraceHeader`. diff --git a/docs/platforms/dotnet/common/performance/index.mdx b/docs/platforms/dotnet/common/performance/index.mdx deleted file mode 100644 index 92192c7757b6e..0000000000000 --- a/docs/platforms/dotnet/common/performance/index.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Set Up Performance -description: "Learn how to enable performance monitoring in your app if it is not already set up." -sidebar_order: 4000 ---- - -With [performance monitoring](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). - - - -If you’re adopting Performance in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. - - - -## Configure - -First, enable tracing and configure the sampling rate for transactions. Set the sample rate for your transactions by either: - -- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) -- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. - -The two options are meant to be mutually exclusive. If you set both, will take precedence. - - - -Learn more about performance monitoring options, how to use the TracesSampler function, or how to sample transactions. - -## Verify - -Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. - -While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. - -Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. - -## Next Steps - - diff --git a/docs/platforms/dotnet/common/performance/instrumentation/index.mdx b/docs/platforms/dotnet/common/performance/instrumentation/index.mdx deleted file mode 100644 index 31b4b4f67612f..0000000000000 --- a/docs/platforms/dotnet/common/performance/instrumentation/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Instrumentation -description: "Learn how to instrument performance in your app." -sidebar_order: 20 ---- - -Instrumenting performance monitoring is specific to your SDK. - - diff --git a/docs/platforms/dotnet/common/profiling/index.mdx b/docs/platforms/dotnet/common/profiling/index.mdx index 3690ae2a714af..8b3f31ccbfdc0 100644 --- a/docs/platforms/dotnet/common/profiling/index.mdx +++ b/docs/platforms/dotnet/common/profiling/index.mdx @@ -29,7 +29,7 @@ Additionally, for all platforms except iOS/Mac Catalyst, you need to add a depen dotnet add package Sentry.Profiling ``` -Profiling depends on Sentry’s performance monitoring product being enabled beforehand. To enable performance monitoring in the SDK, set the `TracesSampleRate` option to the desired value. +Profiling depends on Sentry’s tracing product being enabled beforehand. To enable tracing in the SDK, set the `TracesSampleRate` option to the desired value. ```csharp {tabTitle:Windows/Linux/macOS} SentrySdk.Init(options => @@ -74,6 +74,6 @@ SentrySdk.Init(options => ### -Check out the performance setup documentation for more detailed information on how to configure sampling. +Check out the tracing setup documentation for more detailed information on how to configure sampling. Setting the traces sample rate to 1.0 means all transactions will be captured. Setting the profiles sample rate to 1.0 means all captured transactions will be profiled. diff --git a/docs/platforms/dotnet/common/profiling/troubleshooting/index.mdx b/docs/platforms/dotnet/common/profiling/troubleshooting/index.mdx index 688a978e4232a..a74bdea9dc748 100644 --- a/docs/platforms/dotnet/common/profiling/troubleshooting/index.mdx +++ b/docs/platforms/dotnet/common/profiling/troubleshooting/index.mdx @@ -1,16 +1,16 @@ --- title: Troubleshooting description: "Learn how to troubleshoot your profiling setup." -sidebar_order: 5000 +sidebar_order: 9000 --- ### Profiles are not showing up If you don't see any profiling data in [sentry.io](https://sentry.io), you can try the following: -- Ensure that performance monitoring is enabled. +- Ensure that Tracing is enabled. - Ensure that the automatic instrumentation is sending performance data to Sentry by going to the **Performance** page in [sentry.io](https://sentry.io). -- If the automatic instrumentation is not sending performance data, try using custom instrumentation. +- If the automatic instrumentation is not sending performance data, try using custom instrumentation. - Enable debug mode in the SDK and check the logs. - If the transactions happen too soon after `Sentry.Init()`, they may not be captured yet. This is because the `ProfilingIntegration()` from `Sentry.Profiling` NuGet package initializes asynchronously by default. diff --git a/docs/platforms/dotnet/common/tracing/index.mdx b/docs/platforms/dotnet/common/tracing/index.mdx new file mode 100644 index 0000000000000..5c67d66942f9a --- /dev/null +++ b/docs/platforms/dotnet/common/tracing/index.mdx @@ -0,0 +1,42 @@ +--- +title: Set Up Tracing +description: "Learn how to enable tracing in your app and discover valuable performance insights of your application." +sidebar_order: 4000 +--- + +With [tracing](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). + + + +If you’re adopting Tracing in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. + + + +## Configure + +First, enable tracing and configure the sample rate for transactions. Set the sample rate for your transactions by either: + +- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) +- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. + +The two options are meant to be mutually exclusive. If you set both, will take precedence. + +```csharp {diff} +using Sentry; + ++ // Add this to the SDK initialization callback ++ // Example uniform sample rate: capture 100% of transactions ++ options.TracesSampleRate = 1.0; +``` + +Learn more about tracing options, how to use the TracesSampler function, or how to sample transactions. + +## Verify + +Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. + +While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. + +## Next Steps + + diff --git a/docs/platforms/dotnet/common/performance/instrumentation/automatic-instrumentation.mdx b/docs/platforms/dotnet/common/tracing/instrumentation/automatic-instrumentation.mdx similarity index 96% rename from docs/platforms/dotnet/common/performance/instrumentation/automatic-instrumentation.mdx rename to docs/platforms/dotnet/common/tracing/instrumentation/automatic-instrumentation.mdx index e7312e9e46dfd..1a82c3110ad05 100644 --- a/docs/platforms/dotnet/common/performance/instrumentation/automatic-instrumentation.mdx +++ b/docs/platforms/dotnet/common/tracing/instrumentation/automatic-instrumentation.mdx @@ -8,7 +8,7 @@ sidebar_order: 20 -If you are using Sentry's ASP.NET Core integration, trace propagation is enabled automatically on all clients created by an HTTP client factory. Read more about it here. +If you are using Sentry's ASP.NET Core integration, trace propagation is enabled automatically on all clients created by an HTTP client factory. Read more about it here. @@ -33,10 +33,10 @@ To avoid depleting performance quota, Sentry will only create request spans if t ```csharp var transaction = SentrySdk.StartTransaction("tutorial", "example"); SentrySdk.ConfigureScope(scope => scope.Transaction = transaction); - + // The SentryHttpMessageHandler will automatically create a span for the request var response = await httpClient.GetStringAsync("https://example.com"); - + transaction.Finish(); ``` diff --git a/docs/platforms/php/common/performance/instrumentation/custom-instrumentation.mdx b/docs/platforms/dotnet/common/tracing/instrumentation/custom-instrumentation.mdx similarity index 80% rename from docs/platforms/php/common/performance/instrumentation/custom-instrumentation.mdx rename to docs/platforms/dotnet/common/tracing/instrumentation/custom-instrumentation.mdx index add6773ee1f09..a9e53aaa98de7 100644 --- a/docs/platforms/php/common/performance/instrumentation/custom-instrumentation.mdx +++ b/docs/platforms/dotnet/common/tracing/instrumentation/custom-instrumentation.mdx @@ -6,7 +6,7 @@ sidebar_order: 20 -To capture transactions and spans customized to your organization's needs, you must first set up performance monitoring. +To capture transactions and spans customized to your organization's needs, you must first set up tracing. diff --git a/docs/platforms/dotnet/common/tracing/instrumentation/index.mdx b/docs/platforms/dotnet/common/tracing/instrumentation/index.mdx new file mode 100644 index 0000000000000..eaac9e016be4c --- /dev/null +++ b/docs/platforms/dotnet/common/tracing/instrumentation/index.mdx @@ -0,0 +1,7 @@ +--- +title: Instrumentation +description: "Learn how to instrument tracing in your app." +sidebar_order: 20 +--- + + diff --git a/docs/platforms/dotnet/common/performance/instrumentation/opentelemetry.mdx b/docs/platforms/dotnet/common/tracing/instrumentation/opentelemetry.mdx similarity index 100% rename from docs/platforms/dotnet/common/performance/instrumentation/opentelemetry.mdx rename to docs/platforms/dotnet/common/tracing/instrumentation/opentelemetry.mdx diff --git a/docs/platforms/dotnet/common/performance/instrumentation/performance-metrics.mdx b/docs/platforms/dotnet/common/tracing/instrumentation/performance-metrics.mdx similarity index 100% rename from docs/platforms/dotnet/common/performance/instrumentation/performance-metrics.mdx rename to docs/platforms/dotnet/common/tracing/instrumentation/performance-metrics.mdx diff --git a/docs/platforms/dotnet/common/distributed-tracing/custom-instrumentation/index.mdx b/docs/platforms/dotnet/common/tracing/trace-propagation/custom-instrumentation/index.mdx similarity index 100% rename from docs/platforms/dotnet/common/distributed-tracing/custom-instrumentation/index.mdx rename to docs/platforms/dotnet/common/tracing/trace-propagation/custom-instrumentation/index.mdx diff --git a/docs/platforms/dotnet/common/distributed-tracing/dealing-with-cors-issues/index.mdx b/docs/platforms/dotnet/common/tracing/trace-propagation/dealing-with-cors-issues/index.mdx similarity index 100% rename from docs/platforms/dotnet/common/distributed-tracing/dealing-with-cors-issues/index.mdx rename to docs/platforms/dotnet/common/tracing/trace-propagation/dealing-with-cors-issues/index.mdx diff --git a/docs/platforms/dotnet/common/tracing/trace-propagation/index.mdx b/docs/platforms/dotnet/common/tracing/trace-propagation/index.mdx new file mode 100644 index 0000000000000..73523e4c8c435 --- /dev/null +++ b/docs/platforms/dotnet/common/tracing/trace-propagation/index.mdx @@ -0,0 +1,34 @@ +--- +title: Trace Propagation +description: "Learn how to connect events across applications/services." +sidebar_order: 30 +--- + +If the overall application landscape that you want to observe with Sentry consists of more than just a single service or application, distributed tracing can add a lot of value. + +## What is Distributed Tracing? + +In the context of tracing events across a distributed system, distributed tracing acts as a powerful debugging tool. Imagine your application as a vast network of interconnected parts. For example, your system might be spread across different servers or your application might split into different backend and frontend services, each potentially having their own technology stack. + +When an error or performance issue occurs, it can be challenging to pinpoint the root cause due to the complexity of such a system. Distributed tracing helps you follow the path of an event as it travels through this intricate web, recording every step it takes. By examining these traces, you can reconstruct the sequence of events leading up to the event of interest, identify the specific components involved, and understand their interactions. This detailed visibility enables you to diagnose and resolve issues more effectively, ultimately improving the reliability and performance of your distributed system. + +## Basic Example + +Here's an example showing a distributed trace in Sentry: + + + +This distributed trace shows a Vue app's `pageload` making a request to a Python backend, which then calls the `/api` endpoint of a Ruby microservice. + +What happens in the background is that Sentry uses reads and further propagates two HTTP headers between your applications: + +- `sentry-trace` +- `baggage` + +If you run any JavaScript applications in your distributed system, make sure that those two headers are added to your CORS allowlist and won't be blocked or stripped by your proxy servers, gateways, or firewalls. + +## How to Use Distributed Tracing? + + + +Remember that in order to propagate trace information through your whole distributed system, you have to use Sentry in all of the involved services and applications. Take a look at the respective SDK documentation to learn how distributed tracing can be enabled for each platform. diff --git a/docs/platforms/go/common/performance/troubleshooting/index.mdx b/docs/platforms/dotnet/common/tracing/troubleshooting/index.mdx similarity index 92% rename from docs/platforms/go/common/performance/troubleshooting/index.mdx rename to docs/platforms/dotnet/common/tracing/troubleshooting/index.mdx index ae3f809c8df2c..91680e839de3e 100644 --- a/docs/platforms/go/common/performance/troubleshooting/index.mdx +++ b/docs/platforms/dotnet/common/tracing/troubleshooting/index.mdx @@ -1,7 +1,7 @@ --- title: Troubleshooting -description: "Learn how to troubleshoot your performance monitoring setup." -sidebar_order: 40 +description: "Learn how to troubleshoot your tracing setup." +sidebar_order: 9000 --- If you need help managing transactions, you can read more here. If you need additional help, you can ask on GitHub. Customers on a paid plan may also contact support. diff --git a/docs/platforms/dotnet/guides/aspnet/performance/included-instrumentation.mdx b/docs/platforms/dotnet/guides/aspnet/tracing/included-instrumentation.mdx similarity index 94% rename from docs/platforms/dotnet/guides/aspnet/performance/included-instrumentation.mdx rename to docs/platforms/dotnet/guides/aspnet/tracing/included-instrumentation.mdx index eb6916e885827..f81637aa9fede 100644 --- a/docs/platforms/dotnet/guides/aspnet/performance/included-instrumentation.mdx +++ b/docs/platforms/dotnet/guides/aspnet/tracing/included-instrumentation.mdx @@ -6,7 +6,7 @@ description: "Learn what transactions are captured after tracing is enabled." -Capturing transactions requires that you first set up performance monitoring if you haven't already. You'll also need to enable the base Sentry integration. +Capturing transactions requires that you first set up tracing if you haven't already. You'll also need to enable the base Sentry integration. diff --git a/docs/platforms/dotnet/guides/aspnet/performance/troubleshooting.mdx b/docs/platforms/dotnet/guides/aspnet/tracing/troubleshooting.mdx similarity index 98% rename from docs/platforms/dotnet/guides/aspnet/performance/troubleshooting.mdx rename to docs/platforms/dotnet/guides/aspnet/tracing/troubleshooting.mdx index 44681c186bbce..1762c45c8ce55 100644 --- a/docs/platforms/dotnet/guides/aspnet/performance/troubleshooting.mdx +++ b/docs/platforms/dotnet/guides/aspnet/tracing/troubleshooting.mdx @@ -1,6 +1,6 @@ --- title: Troubleshooting -sidebar_order: 100 +sidebar_order: 9000 description: "Learn more about how to troubleshoot performance issues with the ASP.NET SDK." --- diff --git a/docs/platforms/dotnet/guides/aspnet/troubleshooting.mdx b/docs/platforms/dotnet/guides/aspnet/troubleshooting.mdx index 041193959991f..b35de2a282666 100644 --- a/docs/platforms/dotnet/guides/aspnet/troubleshooting.mdx +++ b/docs/platforms/dotnet/guides/aspnet/troubleshooting.mdx @@ -1,6 +1,6 @@ --- title: Troubleshooting -sidebar_order: 100 +sidebar_order: 9000 description: "Learn more about how to troubleshoot common issues with the ASP.NET SDK." --- diff --git a/docs/platforms/dotnet/guides/aspnetcore/index.mdx b/docs/platforms/dotnet/guides/aspnetcore/index.mdx index f75aeb78a6397..d86847489713b 100644 --- a/docs/platforms/dotnet/guides/aspnetcore/index.mdx +++ b/docs/platforms/dotnet/guides/aspnetcore/index.mdx @@ -8,7 +8,7 @@ Sentry provides an integration with ASP.NET Core through the [Sentry.AspNetCore -To enable tracing integration for ASP.NET Core, refer to this guide. +To enable tracing integration for ASP.NET Core, refer to this guide. @@ -132,7 +132,7 @@ An example of some of the options that can be configured via `appsettings.json`: }, ``` -Setting `TracesSampleRate` to `1.0` in this example configures Sentry to capture 100% of transactions for performance monitoring. We recommend adjusting this value in production. See Automatic Instrumentation for further information. +Setting `TracesSampleRate` to `1.0` in this example configures Sentry to capture 100% of transactions for tracing. We recommend adjusting this value in production. See Automatic Instrumentation for further information. ### Environment variables diff --git a/docs/platforms/dotnet/guides/aspnetcore/performance/instrumentation/automatic-instrumentation.mdx b/docs/platforms/dotnet/guides/aspnetcore/tracing/instrumentation/automatic-instrumentation.mdx similarity index 93% rename from docs/platforms/dotnet/guides/aspnetcore/performance/instrumentation/automatic-instrumentation.mdx rename to docs/platforms/dotnet/guides/aspnetcore/tracing/instrumentation/automatic-instrumentation.mdx index e29e8e9f06380..d20538d4508a3 100644 --- a/docs/platforms/dotnet/guides/aspnetcore/performance/instrumentation/automatic-instrumentation.mdx +++ b/docs/platforms/dotnet/guides/aspnetcore/tracing/instrumentation/automatic-instrumentation.mdx @@ -6,7 +6,7 @@ description: "Learn what transactions are captured after tracing is enabled." -Capturing transactions requires that you first set up performance monitoring if you haven't already. You'll also need to enable the base Sentry integration for ASP.NET Core. +Capturing transactions requires that you first set up tracing if you haven't already. You'll also need to enable the base Sentry integration for ASP.NET Core. diff --git a/docs/platforms/dotnet/guides/aws-lambda/index.mdx b/docs/platforms/dotnet/guides/aws-lambda/index.mdx index 6ad63b7a64131..cf56686935050 100644 --- a/docs/platforms/dotnet/guides/aws-lambda/index.mdx +++ b/docs/platforms/dotnet/guides/aws-lambda/index.mdx @@ -41,7 +41,7 @@ public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFu // When configuring for the first time, to see what the SDK is doing: o.Debug = true; // Set TracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. + // of transactions for tracing. // We recommend adjusting this value in production o.TracesSampleRate = 1.0; // Required in Serverless environments diff --git a/docs/platforms/dotnet/guides/entityframework/index.mdx b/docs/platforms/dotnet/guides/entityframework/index.mdx index 6f27da2342ed9..106d340536e22 100644 --- a/docs/platforms/dotnet/guides/entityframework/index.mdx +++ b/docs/platforms/dotnet/guides/entityframework/index.mdx @@ -6,7 +6,7 @@ description: "Learn about Sentry's .NET integration with Entity Framework." Sentry provides an integration with `EntityFramework` through the of the [Sentry.EntityFramework NuGet package](https://www.nuget.org/packages/Sentry.EntityFramework). -> Looking for `EntityFramework Core`? If you're targeting .NET Core 3.1 or newer, that's already built in to the main Sentry .NET SDK. It's also enabled by default for our ASP.NET or ASP.NET Core integrations, even for older targets. For other scenarios, you may need to add the `Sentry.DiagnosticSource` package and call `AddDiagnosticSourceIntegration`, [as described here](/platforms/dotnet/performance/instrumentation/automatic-instrumentation/#diagnosticsource-integration). (The rest of this page describes our EF6 integration, not EFCore.) +> Looking for `EntityFramework Core`? If you're targeting .NET Core 3.1 or newer, that's already built in to the main Sentry .NET SDK. It's also enabled by default for our ASP.NET or ASP.NET Core integrations, even for older targets. For other scenarios, you may need to add the `Sentry.DiagnosticSource` package and call `AddDiagnosticSourceIntegration`, [as described here](/platforms/dotnet/tracing/instrumentation/automatic-instrumentation/#diagnosticsource-integration). (The rest of this page describes our EF6 integration, not EFCore.) ## Installation diff --git a/docs/platforms/dotnet/guides/maui/index.mdx b/docs/platforms/dotnet/guides/maui/index.mdx index f91037a7d6198..b01b37eb1ed32 100644 --- a/docs/platforms/dotnet/guides/maui/index.mdx +++ b/docs/platforms/dotnet/guides/maui/index.mdx @@ -57,7 +57,7 @@ public static MauiApp CreateMauiApp() // This option is not recommended when deploying your application. options.Debug = true; - // Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring. + // Set TracesSampleRate to 1.0 to capture 100% of transactions for tracing. // We recommend adjusting this value in production. options.TracesSampleRate = 1.0; diff --git a/docs/platforms/dotnet/guides/uwp/index.mdx b/docs/platforms/dotnet/guides/uwp/index.mdx index ca536a61fd74e..4d5b97ce5bd4a 100644 --- a/docs/platforms/dotnet/guides/uwp/index.mdx +++ b/docs/platforms/dotnet/guides/uwp/index.mdx @@ -36,7 +36,7 @@ sealed partial class App : Application // When configuring for the first time, to see what the SDK is doing: o.Debug = true; - // Set traces_sample_rate to 1.0 to capture 100% of transactions for performance monitoring. + // Set traces_sample_rate to 1.0 to capture 100% of transactions for tracing. // We recommend adjusting this value in production. o.TracesSampleRate = 1.0; diff --git a/docs/platforms/dotnet/guides/winforms/index.mdx b/docs/platforms/dotnet/guides/winforms/index.mdx index 5032ead31b117..6dee633d0b110 100644 --- a/docs/platforms/dotnet/guides/winforms/index.mdx +++ b/docs/platforms/dotnet/guides/winforms/index.mdx @@ -51,7 +51,7 @@ namespace WindowsFormsApp1 // When configuring for the first time, to see what the SDK is doing: Debug = true, - // Set traces_sample_rate to 1.0 to capture 100% of transactions for performance monitoring. + // Set traces_sample_rate to 1.0 to capture 100% of transactions for tracing. // We recommend adjusting this value in production. TracesSampleRate = 1.0, diff --git a/docs/platforms/dotnet/guides/winui/index.mdx b/docs/platforms/dotnet/guides/winui/index.mdx index c1667b6f913f5..e5b6bd30aa9df 100644 --- a/docs/platforms/dotnet/guides/winui/index.mdx +++ b/docs/platforms/dotnet/guides/winui/index.mdx @@ -35,7 +35,7 @@ sealed partial class App : Application // When configuring for the first time, to see what the SDK is doing: o.Debug = true; - // Set traces_sample_rate to 1.0 to capture 100% of transactions for performance monitoring. + // Set traces_sample_rate to 1.0 to capture 100% of transactions for tracing. // We recommend adjusting this value in production. o.TracesSampleRate = 1.0; @@ -84,7 +84,7 @@ sealed partial class App : Application // When configuring for the first time, to see what the SDK is doing: o.Debug = true; - // Set traces_sample_rate to 1.0 to capture 100% of transactions for performance monitoring. + // Set traces_sample_rate to 1.0 to capture 100% of transactions for tracing. // We recommend adjusting this value in production. o.TracesSampleRate = 1.0; diff --git a/docs/platforms/dotnet/guides/wpf/index.mdx b/docs/platforms/dotnet/guides/wpf/index.mdx index e73a9692c5ca1..749dcfd8e7fbf 100644 --- a/docs/platforms/dotnet/guides/wpf/index.mdx +++ b/docs/platforms/dotnet/guides/wpf/index.mdx @@ -34,7 +34,7 @@ public partial class App : Application // When configuring for the first time, to see what the SDK is doing: o.Debug = true; - // Set traces_sample_rate to 1.0 to capture 100% of transactions for performance monitoring. + // Set traces_sample_rate to 1.0 to capture 100% of transactions for tracing. // We recommend adjusting this value in production. o.TracesSampleRate = 1.0; diff --git a/docs/platforms/dotnet/guides/xamarin/data-management/apple-privacy-manifest.mdx b/docs/platforms/dotnet/guides/xamarin/data-management/apple-privacy-manifest.mdx index 8dbd59a6c29a5..19f96a5451089 100644 --- a/docs/platforms/dotnet/guides/xamarin/data-management/apple-privacy-manifest.mdx +++ b/docs/platforms/dotnet/guides/xamarin/data-management/apple-privacy-manifest.mdx @@ -8,7 +8,7 @@ sidebar_order: 50 This guide requires [@sentry/xamarin@2.1.0](https://github.com/getsentry/sentry-xamarin/releases/tag/2.1.0) or newer. -Sentry's SDKs provide error and performance monitoring for mobile applications running on Apple devices. To do this, the SDK needs to access certain information about the device and the application. Some of the APIs required for this are considered privacy-relevant by Apple. In order to submit apps to the App Store, Apple requires all apps - and libraries used within these apps - to provide privacy manifest files stating which APIs are used under which allowed reasons. For more details, read Apple's guidelines on [Describing use of required reason API](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api). +Sentry's SDKs provide error and tracing for mobile applications running on Apple devices. To do this, the SDK needs to access certain information about the device and the application. Some of the APIs required for this are considered privacy-relevant by Apple. In order to submit apps to the App Store, Apple requires all apps - and libraries used within these apps - to provide privacy manifest files stating which APIs are used under which allowed reasons. For more details, read Apple's guidelines on [Describing use of required reason API](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api). The information and steps in this guide are still being worked on and might change because of new tools or updated [Apple requirements](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files). diff --git a/docs/platforms/dotnet/guides/xamarin/troubleshooting.mdx b/docs/platforms/dotnet/guides/xamarin/troubleshooting.mdx index 7875ea84f55f8..df4a25607bd99 100644 --- a/docs/platforms/dotnet/guides/xamarin/troubleshooting.mdx +++ b/docs/platforms/dotnet/guides/xamarin/troubleshooting.mdx @@ -1,6 +1,6 @@ --- title: Troubleshooting -sidebar_order: 100 +sidebar_order: 9000 description: "Learn more about how to troubleshoot common issues with the Xamarin SDK." --- diff --git a/docs/platforms/elixir/crons/troubleshooting.mdx b/docs/platforms/elixir/crons/troubleshooting.mdx index a55c71575ba8a..9d92124e718c5 100644 --- a/docs/platforms/elixir/crons/troubleshooting.mdx +++ b/docs/platforms/elixir/crons/troubleshooting.mdx @@ -1,7 +1,7 @@ --- title: Troubleshooting description: "Learn how to troubleshoot your Cron Monitoring setup." -sidebar_order: 500 +sidebar_order: 9000 --- diff --git a/docs/platforms/flutter/configuration/options.mdx b/docs/platforms/flutter/configuration/options.mdx index a548fe0d5589c..ab883b4166bd0 100644 --- a/docs/platforms/flutter/configuration/options.mdx +++ b/docs/platforms/flutter/configuration/options.mdx @@ -281,7 +281,7 @@ Set this boolean to `true` to automatically attach all threads to all logged eve -Set this boolean to `false` to disable auto [performance monitoring](/product/performance/) tracking. +Set this boolean to `false` to disable auto [tracing](/product/performance/) tracking. diff --git a/docs/platforms/flutter/configuration/sampling.mdx b/docs/platforms/flutter/configuration/sampling.mdx index 8090006ae9c86..322d5ba1034f7 100644 --- a/docs/platforms/flutter/configuration/sampling.mdx +++ b/docs/platforms/flutter/configuration/sampling.mdx @@ -72,7 +72,7 @@ When using custom instrumentation to create a transaction, you can add data to t Whatever a transaction's sampling decision, that decision will be passed to its child spans and from there to any transactions they subsequently cause in other services. -(See Distributed Tracing for more about how that propagation is done.) +(See Distributed Tracing for more about how that propagation is done.) If the transaction currently being created is one of those subsequent transactions (in other words, if it has a parent transaction), the upstream (parent) sampling decision will be included in the sampling context data. Your can use this information to choose whether to inherit that decision. In most cases, inheritance is the right choice, to avoid breaking distributed traces. A broken trace will not include all your services. diff --git a/docs/platforms/flutter/data-management/apple-privacy-manifest.mdx b/docs/platforms/flutter/data-management/apple-privacy-manifest.mdx index 0dacaa4c6bf62..98e5d58a3ffca 100644 --- a/docs/platforms/flutter/data-management/apple-privacy-manifest.mdx +++ b/docs/platforms/flutter/data-management/apple-privacy-manifest.mdx @@ -8,7 +8,7 @@ sidebar_order: 50 This guide requires [@sentry/dart@7.20.1](https://github.com/getsentry/sentry-dart/releases/tag/7.20.1) or newer. -Sentry's SDKs provide error and performance monitoring for mobile applications running on Apple devices. To do this, the SDK needs to access certain information about the device and the application. Some of the APIs required for this are considered privacy-relevant by Apple. In order to submit apps to the App Store, Apple requires all apps - and libraries used within these apps - to provide privacy manifest files stating which APIs are used under which allowed reasons. For more details, read Apple's guidelines on [Describing use of required reason API](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api). +Sentry's SDKs provide error and tracing for mobile applications running on Apple devices. To do this, the SDK needs to access certain information about the device and the application. Some of the APIs required for this are considered privacy-relevant by Apple. In order to submit apps to the App Store, Apple requires all apps - and libraries used within these apps - to provide privacy manifest files stating which APIs are used under which allowed reasons. For more details, read Apple's guidelines on [Describing use of required reason API](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api). The information and steps in this guide are still being worked on and might change because of new tools or updated [Apple requirements](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files). diff --git a/docs/platforms/flutter/index.mdx b/docs/platforms/flutter/index.mdx index 0e87ec70fa2e8..07911ca946a02 100644 --- a/docs/platforms/flutter/index.mdx +++ b/docs/platforms/flutter/index.mdx @@ -50,7 +50,7 @@ Future main() async { await SentryFlutter.init( (options) { options.dsn = '___PUBLIC_DSN___'; - // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring. + // Set tracesSampleRate to 1.0 to capture 100% of transactions for tracing. // We recommend adjusting this value in production. options.tracesSampleRate = 1.0; // The sampling rate for profiling is relative to tracesSampleRate @@ -87,4 +87,4 @@ try { - Learn about the features of Sentry's Flutter SDK - Add readable stack traces to errors -- Add performance instrumentation to your app +- Add performance instrumentation to your app diff --git a/docs/platforms/flutter/integrations/app-start-instrumentation.mdx b/docs/platforms/flutter/integrations/app-start-instrumentation.mdx index 1ea3281cca175..4c413a81656ea 100644 --- a/docs/platforms/flutter/integrations/app-start-instrumentation.mdx +++ b/docs/platforms/flutter/integrations/app-start-instrumentation.mdx @@ -22,8 +22,8 @@ Before diving into the configuration, it's important to understand how app start Before starting, ensure: -1. The Sentry Flutter SDK is nitialized. Learn more [here](/platforms/flutter/#configure) -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure) +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). ## Configure diff --git a/docs/platforms/flutter/integrations/asset-bundle-instrumentation.mdx b/docs/platforms/flutter/integrations/asset-bundle-instrumentation.mdx index 051b6807a02fe..2a0a7cad75eb6 100644 --- a/docs/platforms/flutter/integrations/asset-bundle-instrumentation.mdx +++ b/docs/platforms/flutter/integrations/asset-bundle-instrumentation.mdx @@ -22,7 +22,7 @@ The instrumentation starts a span from an active transaction that's bound to the Before starting, ensure: 1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure). -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). ## Configure diff --git a/docs/platforms/flutter/integrations/drift-instrumentation.mdx b/docs/platforms/flutter/integrations/drift-instrumentation.mdx index 763ba2235c70b..768a80ad49e2a 100644 --- a/docs/platforms/flutter/integrations/drift-instrumentation.mdx +++ b/docs/platforms/flutter/integrations/drift-instrumentation.mdx @@ -24,7 +24,7 @@ The created spans will be attached to the transaction on the scope - if no trans Before starting, ensure: 1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure). -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). ## Install diff --git a/docs/platforms/flutter/integrations/hive-instrumentation.mdx b/docs/platforms/flutter/integrations/hive-instrumentation.mdx index 8a665388c0a00..af5f70d65be2e 100644 --- a/docs/platforms/flutter/integrations/hive-instrumentation.mdx +++ b/docs/platforms/flutter/integrations/hive-instrumentation.mdx @@ -24,7 +24,7 @@ The created spans will be attached to the transaction on the scope - if no trans Before starting, ensure: 1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure). -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). ## Install diff --git a/docs/platforms/flutter/integrations/isar-instrumentation.mdx b/docs/platforms/flutter/integrations/isar-instrumentation.mdx index 5d750a6042aad..617ecb2b5debd 100644 --- a/docs/platforms/flutter/integrations/isar-instrumentation.mdx +++ b/docs/platforms/flutter/integrations/isar-instrumentation.mdx @@ -24,7 +24,7 @@ The created spans will be attached to the transaction on the scope. If no transa Before starting, ensure: 1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure). -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). ## Install diff --git a/docs/platforms/flutter/integrations/routing-instrumentation.mdx b/docs/platforms/flutter/integrations/routing-instrumentation.mdx index 081cb3085aed1..3c6da6530d29c 100644 --- a/docs/platforms/flutter/integrations/routing-instrumentation.mdx +++ b/docs/platforms/flutter/integrations/routing-instrumentation.mdx @@ -22,7 +22,7 @@ The routing instrumentation feature is shipped with Sentry's Flutter SDK automat Before starting, ensure: 1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure). -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). ## Configure diff --git a/docs/platforms/flutter/integrations/slow-and-frozen-frames-instrumentation.mdx b/docs/platforms/flutter/integrations/slow-and-frozen-frames-instrumentation.mdx index 08edfa80c1172..f53d0f71cb7a2 100644 --- a/docs/platforms/flutter/integrations/slow-and-frozen-frames-instrumentation.mdx +++ b/docs/platforms/flutter/integrations/slow-and-frozen-frames-instrumentation.mdx @@ -21,7 +21,7 @@ Slow and frozen frames are retrieved directly from the native layer, not the Flu Before starting, ensure: 1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure). -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). 3. Routing Instrumentation is set up. Learn more [here](/platforms/flutter/integrations/routing-instrumentation/). ## Configure diff --git a/docs/platforms/flutter/integrations/sqflite-instrumentation.mdx b/docs/platforms/flutter/integrations/sqflite-instrumentation.mdx index e13bfc8ab4c51..e3379ed53aec1 100644 --- a/docs/platforms/flutter/integrations/sqflite-instrumentation.mdx +++ b/docs/platforms/flutter/integrations/sqflite-instrumentation.mdx @@ -24,7 +24,7 @@ The [sentry_sqflite](https://pub.dev/packages/sentry_sqflite) package provides ` Before starting, ensure: 1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure). -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). ## Install diff --git a/docs/platforms/flutter/integrations/user-interaction-instrumentation.mdx b/docs/platforms/flutter/integrations/user-interaction-instrumentation.mdx index bd52ebefae183..b10dd01c3e4f6 100644 --- a/docs/platforms/flutter/integrations/user-interaction-instrumentation.mdx +++ b/docs/platforms/flutter/integrations/user-interaction-instrumentation.mdx @@ -25,7 +25,7 @@ Before diving into the configuration, it's important to understand how user inte Before starting, ensure: 1. The Sentry Flutter SDK is initialized. Learn more [here](/platforms/flutter/#configure). -2. Performance Monitoring is set up. Learn more [here](/platforms/flutter/performance/). +2. Tracing is set up. Learn more [here](/platforms/flutter/tracing/). ## Configure diff --git a/docs/platforms/flutter/metrics/index.mdx b/docs/platforms/flutter/metrics/index.mdx index 918993432a451..601cb62a0a351 100644 --- a/docs/platforms/flutter/metrics/index.mdx +++ b/docs/platforms/flutter/metrics/index.mdx @@ -1,6 +1,7 @@ --- title: Set Up Metrics description: "Learn how to measure the data points you care about by configuring Metrics in your Flutter app." +sidebar_order: 6000 --- @@ -12,7 +13,7 @@ Metrics are supported with Sentry Flutter SDK version `7.19.0` and above. Sentry metrics help you pinpoint and solve issues that impact user experience and app performance by measuring the data points that are important to you. You can track things like processing time, event size, user signups, and conversion rates, then correlate them back to tracing data in order to get deeper insights and solve issues faster. -## Enabling the Metrics Feature +## Configure Here's how to add Metrics to your application: diff --git a/docs/platforms/flutter/performance/index.mdx b/docs/platforms/flutter/performance/index.mdx deleted file mode 100644 index a9d2a5f81e7e9..0000000000000 --- a/docs/platforms/flutter/performance/index.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Set Up Performance -description: "Learn how to enable performance monitoring in your app if it is not already set up." -sidebar_order: 4000 ---- - -With [performance monitoring](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). - - - -If you’re adopting Performance in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. - - - -## Configure - -First, enable tracing and configure the sampling rate for transactions. Set the sample rate for your transactions by either: - -- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) -- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. - -The two options are meant to be mutually exclusive. If you set both, will take precedence. - - - -Learn more about performance monitoring options, how to use the tracesSampler function, or how to sample transactions. - -## Verify - -Verify that performance monitoring is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. - -Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. - -While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. - -Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. - -## Next Steps - - diff --git a/docs/platforms/flutter/performance/instrumentation/index.mdx b/docs/platforms/flutter/performance/instrumentation/index.mdx deleted file mode 100644 index 31b4b4f67612f..0000000000000 --- a/docs/platforms/flutter/performance/instrumentation/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Instrumentation -description: "Learn how to instrument performance in your app." -sidebar_order: 20 ---- - -Instrumenting performance monitoring is specific to your SDK. - - diff --git a/docs/platforms/flutter/profiling/index.mdx b/docs/platforms/flutter/profiling/index.mdx index 1c5ff73fd16fb..00df85f5fb693 100644 --- a/docs/platforms/flutter/profiling/index.mdx +++ b/docs/platforms/flutter/profiling/index.mdx @@ -7,24 +7,24 @@ sidebar_order: 5000 -## Enable Performance Monitoring +## Enable Tracing -Profiling depends on Sentry’s performance monitoring product being enabled beforehand. To enable performance monitoring in the SDK: +Profiling depends on Sentry’s Tracing product being enabled beforehand. To enable tracing in the SDK: -```dart +```dart {diff} SentryFlutter.init( (options) => { options.dsn = '___PUBLIC_DSN___'; - // We recommend adjusting this value in production: - options.tracesSampleRate = 1.0; ++ // We recommend adjusting this value in production: ++ options.tracesSampleRate = 1.0; }, appRunner: () => runApp(MyApp()), ); ``` -Check out the performance setup documentation for more detailed information on how to configure sampling. Setting the sample rate to 1.0 means all transactions will be captured. +Check out the tracing setup documentation for more detailed information on how to configure sampling. Setting the sample rate to 1.0 means all transactions will be captured. ## Enable Profiling @@ -38,15 +38,15 @@ To enable profiling, set the `profilesSampleRate`: -```dart +```dart {diff} SentryFlutter.init( (options) => { options.dsn = '___PUBLIC_DSN___'; // We recommend adjusting this value in production: options.tracesSampleRate = 1.0; - // The sampling rate for profiling is relative to tracesSampleRate - // Setting to 1.0 will profile 100% of sampled transactions: - options.profilesSampleRate = 1.0; ++ // The sampling rate for profiling is relative to tracesSampleRate ++ // Setting to 1.0 will profile 100% of sampled transactions: ++ options.profilesSampleRate = 1.0; }, appRunner: () => runApp(MyApp()), ); diff --git a/docs/platforms/flutter/profiling/troubleshooting/index.mdx b/docs/platforms/flutter/profiling/troubleshooting/index.mdx index e8fc2b10e6dc0..e8d61cdf3461e 100644 --- a/docs/platforms/flutter/profiling/troubleshooting/index.mdx +++ b/docs/platforms/flutter/profiling/troubleshooting/index.mdx @@ -1,14 +1,14 @@ --- title: Troubleshooting description: "Learn how to troubleshoot your profiling setup." -sidebar_order: 5000 +sidebar_order: 9000 --- If you don't see any profiling data in [sentry.io](https://sentry.io), you can try the following: -- Ensure that performance monitoring is enabled. +- Ensure that Tracing is enabled. - Ensure that the automatic instrumentation is sending performance data to Sentry by going to the **Performance** page in [sentry.io](https://sentry.io). -- If the automatic instrumentation is not sending performance data, try using custom instrumentation. +- If the automatic instrumentation is not sending performance data, try using custom instrumentation. - Enable debug mode in the SDK and check the logs. ### Limitations diff --git a/docs/platforms/flutter/tracing/index.mdx b/docs/platforms/flutter/tracing/index.mdx new file mode 100644 index 0000000000000..3c8f0ff00637c --- /dev/null +++ b/docs/platforms/flutter/tracing/index.mdx @@ -0,0 +1,38 @@ +--- +title: Set Up Tracing +description: "Learn how to enable tracing in your app and discover valuable performance insights of your application." +sidebar_order: 4000 +--- + +With [tracing](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). + + + +If you’re adopting Tracing in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. + + + +## Configure + +First, enable tracing and configure the sample rate for transactions. Set the sample rate for your transactions by either: + +- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) +- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. + +The two options are meant to be mutually exclusive. If you set both, will take precedence. + + + +Learn more about tracing options, how to use the tracesSampler function, or how to sample transactions. + +## Verify + +Verify that tracing is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. + +Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. + +While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. + +## Next Steps + + diff --git a/docs/platforms/flutter/performance/instrumentation/automatic-instrumentation.mdx b/docs/platforms/flutter/tracing/instrumentation/automatic-instrumentation.mdx similarity index 97% rename from docs/platforms/flutter/performance/instrumentation/automatic-instrumentation.mdx rename to docs/platforms/flutter/tracing/instrumentation/automatic-instrumentation.mdx index 93c843056e903..1e930779696f1 100644 --- a/docs/platforms/flutter/performance/instrumentation/automatic-instrumentation.mdx +++ b/docs/platforms/flutter/tracing/instrumentation/automatic-instrumentation.mdx @@ -6,7 +6,7 @@ sidebar_order: 10 -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. diff --git a/docs/platforms/dart/performance/instrumentation/custom-instrumentation.mdx b/docs/platforms/flutter/tracing/instrumentation/custom-instrumentation.mdx similarity index 82% rename from docs/platforms/dart/performance/instrumentation/custom-instrumentation.mdx rename to docs/platforms/flutter/tracing/instrumentation/custom-instrumentation.mdx index f1d1d5bb6bccf..c34b1e38fe92f 100644 --- a/docs/platforms/dart/performance/instrumentation/custom-instrumentation.mdx +++ b/docs/platforms/flutter/tracing/instrumentation/custom-instrumentation.mdx @@ -6,7 +6,7 @@ sidebar_order: 20 -To capture transactions and spans customized to your organization's needs, you must first set up performance monitoring. +To capture transactions and spans customized to your organization's needs, you must first set up tracing. diff --git a/docs/platforms/flutter/tracing/instrumentation/index.mdx b/docs/platforms/flutter/tracing/instrumentation/index.mdx new file mode 100644 index 0000000000000..eaac9e016be4c --- /dev/null +++ b/docs/platforms/flutter/tracing/instrumentation/index.mdx @@ -0,0 +1,7 @@ +--- +title: Instrumentation +description: "Learn how to instrument tracing in your app." +sidebar_order: 20 +--- + + diff --git a/docs/platforms/flutter/performance/instrumentation/performance-metrics.mdx b/docs/platforms/flutter/tracing/instrumentation/performance-metrics.mdx similarity index 100% rename from docs/platforms/flutter/performance/instrumentation/performance-metrics.mdx rename to docs/platforms/flutter/tracing/instrumentation/performance-metrics.mdx diff --git a/docs/platforms/flutter/distributed-tracing/dealing-with-cors-issues/index.mdx b/docs/platforms/flutter/tracing/trace-propagation/dealing-with-cors-issues/index.mdx similarity index 100% rename from docs/platforms/flutter/distributed-tracing/dealing-with-cors-issues/index.mdx rename to docs/platforms/flutter/tracing/trace-propagation/dealing-with-cors-issues/index.mdx diff --git a/docs/platforms/dotnet/common/distributed-tracing/index.mdx b/docs/platforms/flutter/tracing/trace-propagation/index.mdx similarity index 98% rename from docs/platforms/dotnet/common/distributed-tracing/index.mdx rename to docs/platforms/flutter/tracing/trace-propagation/index.mdx index 2fa131dd15253..fb41f4dd98c48 100644 --- a/docs/platforms/dotnet/common/distributed-tracing/index.mdx +++ b/docs/platforms/flutter/tracing/trace-propagation/index.mdx @@ -1,5 +1,5 @@ --- -title: Set Up Distributed Tracing +title: Trace Propagation description: "Learn how to connect events across applications/services." sidebar_order: 3000 --- diff --git a/docs/platforms/flutter/distributed-tracing/limiting-trace-propagation/index.mdx b/docs/platforms/flutter/tracing/trace-propagation/limiting-trace-propagation/index.mdx similarity index 100% rename from docs/platforms/flutter/distributed-tracing/limiting-trace-propagation/index.mdx rename to docs/platforms/flutter/tracing/trace-propagation/limiting-trace-propagation/index.mdx diff --git a/docs/platforms/go/common/configuration/sampling.mdx b/docs/platforms/go/common/configuration/sampling.mdx index 6cb83279b7d6a..bc66495c36665 100644 --- a/docs/platforms/go/common/configuration/sampling.mdx +++ b/docs/platforms/go/common/configuration/sampling.mdx @@ -72,7 +72,7 @@ When using custom instrumentation to create a transaction, you can add data to t Whatever a transaction's sampling decision, that decision will be passed to its child spans and from there to any transactions they subsequently cause in other services. -(See Distributed Tracing for more about how that propagation is done.) +(See Distributed Tracing for more about how that propagation is done.) If the transaction currently being created is one of those subsequent transactions (in other words, if it has a parent transaction), the upstream (parent) sampling decision will be included in the sampling context data. Your can use this information to choose whether to inherit that decision. In most cases, inheritance is the right choice, to avoid breaking distributed traces. A broken trace will not include all your services. diff --git a/docs/platforms/go/common/distributed-tracing/index.mdx b/docs/platforms/go/common/distributed-tracing/index.mdx deleted file mode 100644 index 2fa131dd15253..0000000000000 --- a/docs/platforms/go/common/distributed-tracing/index.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Set Up Distributed Tracing -description: "Learn how to connect events across applications/services." -sidebar_order: 3000 ---- - -If the overall application landscape that you want to observe with Sentry consists of more than just a single service or application, distributed tracing can add a lot of value. - -## What is Distributed Tracing? - -In the context of tracing events across a distributed system, distributed tracing acts as a powerful debugging tool. Imagine your application as a vast network of interconnected parts. For example, your system might be spread across different servers or your application might split into different backend and frontend services, each potentially having their own technology stack. - -When an error or performance issue occurs, it can be challenging to pinpoint the root cause due to the complexity of such a system. Distributed tracing helps you follow the path of an event as it travels through this intricate web, recording every step it takes. By examining these traces, you can reconstruct the sequence of events leading up to the event of interest, identify the specific components involved, and understand their interactions. This detailed visibility enables you to diagnose and resolve issues more effectively, ultimately improving the reliability and performance of your distributed system. - -## Basic Example - -Here's an example showing a distributed trace in Sentry: - - - -This distributed trace shows a Vue app's `pageload` making a request to a Python backend, which then calls the `/api` endpoint of a Ruby microservice. - -What happens in the background is that Sentry uses reads and further propagates two HTTP headers between your applications: - -- `sentry-trace` -- `baggage` - -If you run any JavaScript applications in your distributed system, make sure that those two headers are added to your CORS allowlist and won't be blocked or stripped by your proxy servers, gateways, or firewalls. - -## How to Use Distributed Tracing? - - - -Remember that in order to propagate trace information through your whole distributed system, you have to use Sentry in all of the involved services and applications. Take a look at the respective SDK documentation to learn how distributed tracing can be enabled for each platform. diff --git a/docs/platforms/go/common/enriching-events/transaction-name/index.mdx b/docs/platforms/go/common/enriching-events/transaction-name/index.mdx index fc959724579a8..2e202ccb1a9a1 100644 --- a/docs/platforms/go/common/enriching-events/transaction-name/index.mdx +++ b/docs/platforms/go/common/enriching-events/transaction-name/index.mdx @@ -24,4 +24,4 @@ To override the name of the currently running transaction: -Please refer to [the tracing documentation](../../performance/) for how to start and stop transactions. +Please refer to [the tracing documentation](../../tracing/) for how to start and stop transactions. diff --git a/docs/platforms/go/common/performance/index.mdx b/docs/platforms/go/common/performance/index.mdx deleted file mode 100644 index ac99794fc3278..0000000000000 --- a/docs/platforms/go/common/performance/index.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Set Up Performance -description: "Learn how to set up performance monitoring in your app." -sidebar_order: 4000 ---- - -With [performance monitoring](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). - - - -If you’re adopting Performance in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. - - - - - -## Configure - -First, enable tracing and configure the sampling rate for transactions. Set the sample rate for your transactions by either: - -- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) -- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. - -The two options are meant to be mutually exclusive. If you set both, will take precedence. - - - -Learn more about performance monitoring options, how to use the TracesSampler function, or how to sample transactions. - -## Verify - -Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. - -While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. - -Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. - -## Next Steps - - diff --git a/docs/platforms/go/common/performance/instrumentation/index.mdx b/docs/platforms/go/common/performance/instrumentation/index.mdx deleted file mode 100644 index 31b4b4f67612f..0000000000000 --- a/docs/platforms/go/common/performance/instrumentation/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Instrumentation -description: "Learn how to instrument performance in your app." -sidebar_order: 20 ---- - -Instrumenting performance monitoring is specific to your SDK. - - diff --git a/docs/platforms/go/common/profiling/index.mdx b/docs/platforms/go/common/profiling/index.mdx index 1001706c08dc8..e79ae1654915f 100644 --- a/docs/platforms/go/common/profiling/index.mdx +++ b/docs/platforms/go/common/profiling/index.mdx @@ -9,29 +9,24 @@ sidebar_order: 5000 ## Enable Profiling - - -Go Profiling alpha is available since SDK version `0.22.0`. - - To enable profiling, set the `ProfilesSampleRate`: -```go +```go {diff} err := sentry.Init(sentry.ClientOptions{ - Dsn: "___PUBLIC_DSN___", - EnableTracing: true, - TracesSampleRate: 1.0, - ProfilesSampleRate: 1.0, + Dsn: "___PUBLIC_DSN___", + EnableTracing: true, + TracesSampleRate: 1.0, ++ ProfilesSampleRate: 1.0, }) ``` -The setting is _relative_ to the setting. +The `ProfilesSampleRate` setting is _relative_ to the `TracesSampleRate` setting. -For Profiling to work, you have to first enable Sentry’s performance monitoring via `traces_sample_rate` (like in the example above). Read our performance setup documentation to learn how to configure sampling. If you set your sample rate to 1.0, all transactions will be captured. +For Profiling to work, you have to first enable Sentry’s tracing via `TracesSampleRate` (like in the example above). Read our tracing setup documentation to learn how to configure sampling. If you set your sample rate to 1.0, all transactions will be captured. - \ No newline at end of file + diff --git a/docs/platforms/go/common/profiling/troubleshooting/index.mdx b/docs/platforms/go/common/profiling/troubleshooting/index.mdx index d9ed25c1789ab..22851bdcb132f 100644 --- a/docs/platforms/go/common/profiling/troubleshooting/index.mdx +++ b/docs/platforms/go/common/profiling/troubleshooting/index.mdx @@ -1,14 +1,14 @@ --- title: Troubleshooting description: "Learn how to troubleshoot your profiling setup." -sidebar_order: 5000 +sidebar_order: 9000 --- If you don't see any profiling data in [sentry.io](https://sentry.io), you can try the following: -- Ensure that performance monitoring is enabled. +- Ensure that Tracing is enabled. - Ensure that the automatic instrumentation is sending performance data to Sentry by going to the **Performance** page in [sentry.io](https://sentry.io). -- If the automatic instrumentation is not sending performance data, try using custom instrumentation. +- If the automatic instrumentation is not sending performance data, try using custom instrumentation. - Enable debug mode in the SDK and check the logs. ### Limitations diff --git a/docs/platforms/go/common/tracing/index.mdx b/docs/platforms/go/common/tracing/index.mdx new file mode 100644 index 0000000000000..b8dac419bd1ec --- /dev/null +++ b/docs/platforms/go/common/tracing/index.mdx @@ -0,0 +1,41 @@ +--- +title: Set Up Tracing +description: "Learn how to enable tracing in your app and discover valuable performance insights of your application." +sidebar_order: 4000 +--- + +With [tracing](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). + + + +If you’re adopting Tracing in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. + + + + + +## Requirements +- Tracing is available for the Sentry's Go SDK version ≥ 0.9.0. + +## Configure + +First, enable tracing and configure the sample rate for transactions. Set the sample rate for your transactions by either: + +- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) +- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. + +The two options are meant to be mutually exclusive. If you set both, will take precedence. + + + +Learn more about tracing options, how to use the TracesSampler function, or how to sample transactions. + +## Verify + +Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. + +While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. + +## Next Steps + + diff --git a/docs/platforms/powershell/performance/instrumentation/custom-instrumentation.mdx b/docs/platforms/go/common/tracing/instrumentation/custom-instrumentation.mdx similarity index 80% rename from docs/platforms/powershell/performance/instrumentation/custom-instrumentation.mdx rename to docs/platforms/go/common/tracing/instrumentation/custom-instrumentation.mdx index add6773ee1f09..a9e53aaa98de7 100644 --- a/docs/platforms/powershell/performance/instrumentation/custom-instrumentation.mdx +++ b/docs/platforms/go/common/tracing/instrumentation/custom-instrumentation.mdx @@ -6,7 +6,7 @@ sidebar_order: 20 -To capture transactions and spans customized to your organization's needs, you must first set up performance monitoring. +To capture transactions and spans customized to your organization's needs, you must first set up tracing. diff --git a/docs/platforms/go/common/tracing/instrumentation/index.mdx b/docs/platforms/go/common/tracing/instrumentation/index.mdx new file mode 100644 index 0000000000000..eaac9e016be4c --- /dev/null +++ b/docs/platforms/go/common/tracing/instrumentation/index.mdx @@ -0,0 +1,7 @@ +--- +title: Instrumentation +description: "Learn how to instrument tracing in your app." +sidebar_order: 20 +--- + + diff --git a/docs/platforms/go/common/performance/instrumentation/opentelemetry.mdx b/docs/platforms/go/common/tracing/instrumentation/opentelemetry.mdx similarity index 100% rename from docs/platforms/go/common/performance/instrumentation/opentelemetry.mdx rename to docs/platforms/go/common/tracing/instrumentation/opentelemetry.mdx diff --git a/docs/platforms/go/common/distributed-tracing/dealing-with-cors-issues/index.mdx b/docs/platforms/go/common/tracing/trace-propagation/dealing-with-cors-issues/index.mdx similarity index 100% rename from docs/platforms/go/common/distributed-tracing/dealing-with-cors-issues/index.mdx rename to docs/platforms/go/common/tracing/trace-propagation/dealing-with-cors-issues/index.mdx diff --git a/docs/platforms/flutter/distributed-tracing/index.mdx b/docs/platforms/go/common/tracing/trace-propagation/index.mdx similarity index 98% rename from docs/platforms/flutter/distributed-tracing/index.mdx rename to docs/platforms/go/common/tracing/trace-propagation/index.mdx index 2fa131dd15253..fb41f4dd98c48 100644 --- a/docs/platforms/flutter/distributed-tracing/index.mdx +++ b/docs/platforms/go/common/tracing/trace-propagation/index.mdx @@ -1,5 +1,5 @@ --- -title: Set Up Distributed Tracing +title: Trace Propagation description: "Learn how to connect events across applications/services." sidebar_order: 3000 --- diff --git a/docs/platforms/java/common/performance/troubleshooting/index.mdx b/docs/platforms/go/common/tracing/troubleshooting/index.mdx similarity index 92% rename from docs/platforms/java/common/performance/troubleshooting/index.mdx rename to docs/platforms/go/common/tracing/troubleshooting/index.mdx index ae3f809c8df2c..91680e839de3e 100644 --- a/docs/platforms/java/common/performance/troubleshooting/index.mdx +++ b/docs/platforms/go/common/tracing/troubleshooting/index.mdx @@ -1,7 +1,7 @@ --- title: Troubleshooting -description: "Learn how to troubleshoot your performance monitoring setup." -sidebar_order: 40 +description: "Learn how to troubleshoot your tracing setup." +sidebar_order: 9000 --- If you need help managing transactions, you can read more here. If you need additional help, you can ask on GitHub. Customers on a paid plan may also contact support. diff --git a/docs/platforms/go/guides/echo/index.mdx b/docs/platforms/go/guides/echo/index.mdx index cddf361ccc944..6c8e9f1281461 100644 --- a/docs/platforms/go/guides/echo/index.mdx +++ b/docs/platforms/go/guides/echo/index.mdx @@ -32,7 +32,7 @@ import ( if err := sentry.Init(sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", // Set TracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. + // of transactions for tracing. // We recommend adjusting this value in production, TracesSampleRate: 1.0, }); err != nil { diff --git a/docs/platforms/go/guides/fasthttp/index.mdx b/docs/platforms/go/guides/fasthttp/index.mdx index 08f00fc21d5ee..0d2009d179f05 100644 --- a/docs/platforms/go/guides/fasthttp/index.mdx +++ b/docs/platforms/go/guides/fasthttp/index.mdx @@ -31,7 +31,7 @@ if err := sentry.Init(sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", EnableTracing: true, // Set TracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. + // of transactions for tracing. // We recommend adjusting this value in production, TracesSampleRate: 1.0, }); err != nil { diff --git a/docs/platforms/go/guides/gin/index.mdx b/docs/platforms/go/guides/gin/index.mdx index e81fd93f5c6e5..3e966a778038e 100644 --- a/docs/platforms/go/guides/gin/index.mdx +++ b/docs/platforms/go/guides/gin/index.mdx @@ -39,7 +39,7 @@ if err := sentry.Init(sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", EnableTracing: true, // Set TracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. + // of transactions for tracing. // We recommend adjusting this value in production, TracesSampleRate: 1.0, }); err != nil { diff --git a/docs/platforms/go/guides/http/index.mdx b/docs/platforms/go/guides/http/index.mdx index ee7959bf9a59f..01fcf0fbfd9d8 100644 --- a/docs/platforms/go/guides/http/index.mdx +++ b/docs/platforms/go/guides/http/index.mdx @@ -31,7 +31,7 @@ if err := sentry.Init(sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", EnableTracing: true, // Set TracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. + // of transactions for tracing. // We recommend adjusting this value in production, TracesSampleRate: 1.0, }); err != nil { diff --git a/docs/platforms/go/guides/iris/index.mdx b/docs/platforms/go/guides/iris/index.mdx index 3c5a81ea73e55..a13110b8b3d3c 100644 --- a/docs/platforms/go/guides/iris/index.mdx +++ b/docs/platforms/go/guides/iris/index.mdx @@ -31,7 +31,7 @@ if err := sentry.Init(sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", EnableTracing: true, // Set TracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. + // of transactions for tracing. // We recommend adjusting this value in production, TracesSampleRate: 1.0, }); err != nil { diff --git a/docs/platforms/go/guides/martini/index.mdx b/docs/platforms/go/guides/martini/index.mdx index 9056abb527657..070d77791ea2b 100644 --- a/docs/platforms/go/guides/martini/index.mdx +++ b/docs/platforms/go/guides/martini/index.mdx @@ -31,7 +31,7 @@ if err := sentry.Init(sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", EnableTracing: true, // Set TracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. + // of transactions for tracing. // We recommend adjusting this value in production, TracesSampleRate: 1.0, }); err != nil { diff --git a/docs/platforms/go/guides/negroni/index.mdx b/docs/platforms/go/guides/negroni/index.mdx index fd443ff91f804..588e6e8b872c0 100644 --- a/docs/platforms/go/guides/negroni/index.mdx +++ b/docs/platforms/go/guides/negroni/index.mdx @@ -32,7 +32,7 @@ if err := sentry.Init(sentry.ClientOptions{ Dsn: "___PUBLIC_DSN___", EnableTracing: true, // Set TracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. + // of transactions for tracing. // We recommend adjusting this value in production, TracesSampleRate: 1.0, }); err != nil { diff --git a/docs/platforms/java/common/configuration/sampling.mdx b/docs/platforms/java/common/configuration/sampling.mdx index 6cb83279b7d6a..bc66495c36665 100644 --- a/docs/platforms/java/common/configuration/sampling.mdx +++ b/docs/platforms/java/common/configuration/sampling.mdx @@ -72,7 +72,7 @@ When using custom instrumentation to create a transaction, you can add data to t Whatever a transaction's sampling decision, that decision will be passed to its child spans and from there to any transactions they subsequently cause in other services. -(See Distributed Tracing for more about how that propagation is done.) +(See Distributed Tracing for more about how that propagation is done.) If the transaction currently being created is one of those subsequent transactions (in other words, if it has a parent transaction), the upstream (parent) sampling decision will be included in the sampling context data. Your can use this information to choose whether to inherit that decision. In most cases, inheritance is the right choice, to avoid breaking distributed traces. A broken trace will not include all your services. diff --git a/docs/platforms/java/common/crons/troubleshooting.mdx b/docs/platforms/java/common/crons/troubleshooting.mdx index 697a484c30fdf..ba79cba0ba2d8 100644 --- a/docs/platforms/java/common/crons/troubleshooting.mdx +++ b/docs/platforms/java/common/crons/troubleshooting.mdx @@ -1,7 +1,7 @@ --- title: Troubleshooting description: "Learn how to troubleshoot your Cron Monitoring setup." -sidebar_order: 500 +sidebar_order: 9000 --- diff --git a/docs/platforms/java/common/distributed-tracing/index.mdx b/docs/platforms/java/common/distributed-tracing/index.mdx deleted file mode 100644 index 2fa131dd15253..0000000000000 --- a/docs/platforms/java/common/distributed-tracing/index.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Set Up Distributed Tracing -description: "Learn how to connect events across applications/services." -sidebar_order: 3000 ---- - -If the overall application landscape that you want to observe with Sentry consists of more than just a single service or application, distributed tracing can add a lot of value. - -## What is Distributed Tracing? - -In the context of tracing events across a distributed system, distributed tracing acts as a powerful debugging tool. Imagine your application as a vast network of interconnected parts. For example, your system might be spread across different servers or your application might split into different backend and frontend services, each potentially having their own technology stack. - -When an error or performance issue occurs, it can be challenging to pinpoint the root cause due to the complexity of such a system. Distributed tracing helps you follow the path of an event as it travels through this intricate web, recording every step it takes. By examining these traces, you can reconstruct the sequence of events leading up to the event of interest, identify the specific components involved, and understand their interactions. This detailed visibility enables you to diagnose and resolve issues more effectively, ultimately improving the reliability and performance of your distributed system. - -## Basic Example - -Here's an example showing a distributed trace in Sentry: - - - -This distributed trace shows a Vue app's `pageload` making a request to a Python backend, which then calls the `/api` endpoint of a Ruby microservice. - -What happens in the background is that Sentry uses reads and further propagates two HTTP headers between your applications: - -- `sentry-trace` -- `baggage` - -If you run any JavaScript applications in your distributed system, make sure that those two headers are added to your CORS allowlist and won't be blocked or stripped by your proxy servers, gateways, or firewalls. - -## How to Use Distributed Tracing? - - - -Remember that in order to propagate trace information through your whole distributed system, you have to use Sentry in all of the involved services and applications. Take a look at the respective SDK documentation to learn how distributed tracing can be enabled for each platform. diff --git a/docs/platforms/java/common/integrations/graphql.mdx b/docs/platforms/java/common/integrations/graphql.mdx index 8bcdb6e10dda0..8989070b61bcc 100644 --- a/docs/platforms/java/common/integrations/graphql.mdx +++ b/docs/platforms/java/common/integrations/graphql.mdx @@ -98,9 +98,9 @@ The `SentryDataFetcherExceptionHandler` has been deprecated. Please upgrade to ` -## Capture Performance +## Capture Tracing Information -To be able to capture transactions, you have to first set up performance monitoring. +To be able to capture transactions, you have to first set up tracing. ### Modify or Drop Spans diff --git a/docs/platforms/java/common/metrics/index.mdx b/docs/platforms/java/common/metrics/index.mdx index 9a9b8ecba1d73..c3c11e6865611 100644 --- a/docs/platforms/java/common/metrics/index.mdx +++ b/docs/platforms/java/common/metrics/index.mdx @@ -5,15 +5,14 @@ sidebar_order: 5500 --- - -Metrics are supported with Sentry Java SDK version `7.6.0` and above. +Sentry metrics help you pinpoint and solve issues that impact user experience and app performance by measuring the data points that are important to you. You can track things like processing time, event size, user signups, and conversion rates, then correlate them back to tracing data in order to get deeper insights and solve issues faster. - +## Requirements -Sentry metrics help you pinpoint and solve issues that impact user experience and app performance by measuring the data points that are important to you. You can track things like processing time, event size, user signups, and conversion rates, then correlate them back to tracing data in order to get deeper insights and solve issues faster. +Metrics are supported with Sentry Java SDK version `7.6.0` and above. -## Enabling the Metrics Feature +## Configure Here's how to add Metrics to your application: diff --git a/docs/platforms/java/common/performance/index.mdx b/docs/platforms/java/common/performance/index.mdx deleted file mode 100644 index 924157594dc65..0000000000000 --- a/docs/platforms/java/common/performance/index.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Set Up Performance -description: "Learn how to enable performance monitoring in your app if it is not already set up." -sidebar_order: 4000 -supported: - - java - - java.spring-boot - - java.spring ---- - -With [performance monitoring](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). - - - -If you’re adopting Performance in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. - - - - - - - -## Enable Tracing - - - - - -## Configure - -First, enable tracing and configure the sampling rate for transactions. Set the sample rate for your transactions by either: - -- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) -- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. - -The two options are meant to be mutually exclusive. If you set both, will take precedence. - - - -Learn more about performance monitoring options, how to use the tracesSampler function, or how to sample transactions. - -## Verify - - - -Verify that performance monitoring is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. - - - - - -Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. - - - -While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. - -Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. - -## Next Steps - - diff --git a/docs/platforms/java/common/performance/instrumentation/index.mdx b/docs/platforms/java/common/performance/instrumentation/index.mdx deleted file mode 100644 index 31b4b4f67612f..0000000000000 --- a/docs/platforms/java/common/performance/instrumentation/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Instrumentation -description: "Learn how to instrument performance in your app." -sidebar_order: 20 ---- - -Instrumenting performance monitoring is specific to your SDK. - - diff --git a/docs/platforms/java/common/tracing/index.mdx b/docs/platforms/java/common/tracing/index.mdx new file mode 100644 index 0000000000000..24288935b2429 --- /dev/null +++ b/docs/platforms/java/common/tracing/index.mdx @@ -0,0 +1,64 @@ +--- +title: Set Up Tracing +description: "Learn how to enable tracing in your app and discover valuable performance insights of your application." +sidebar_order: 4000 +supported: + - java + - java.spring-boot + - java.spring +--- + +With [tracing](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](/product/sentry-basics/tracing/distributed-tracing/). + + + +If you’re adopting Tracing in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. + + + + + +## Requirements + +Tracing is available for the Sentry Java SDK version ≥ 4.0. + + + +## Enable Tracing + + + + + +## Configure + +First, enable tracing and configure the sample rate for transactions. Set the sample rate for your transactions by either: + +- Setting a uniform sample rate for all transactions using the option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set to `0.2`.) +- Controlling the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the config option. + +The two options are meant to be mutually exclusive. If you set both, will take precedence. + + + +Learn more about tracing options, how to use the tracesSampler function, or how to sample transactions. + +## Verify + + + +Verify that tracing is working correctly by using our automatic instrumentation or by starting and finishing a transaction using custom instrumentation. + + + + + +Test out tracing by starting and finishing a transaction, which you _must_ do so transactions can be sent to Sentry. Learn how in our Custom Instrumentation content. + + + +While you're testing, set to `1.0`, as that ensures that every transaction will be sent to Sentry. Once testing is complete, you may want to set a lower value, or switch to using to selectively sample and filter your transactions, based on contextual data. + +## Next Steps + + diff --git a/docs/platforms/java/common/performance/instrumentation/apollo.mdx b/docs/platforms/java/common/tracing/instrumentation/apollo.mdx similarity index 96% rename from docs/platforms/java/common/performance/instrumentation/apollo.mdx rename to docs/platforms/java/common/tracing/instrumentation/apollo.mdx index 0c5918283625c..b06c690e95372 100644 --- a/docs/platforms/java/common/performance/instrumentation/apollo.mdx +++ b/docs/platforms/java/common/tracing/instrumentation/apollo.mdx @@ -2,7 +2,7 @@ title: Apollo Integration sidebar_order: 30 sdk: sentry.java.apollo -description: "Learn how to capture the performance of Apollo GraphQL client." +description: "Learn how to capture tracing information of the Apollo GraphQL client." notSupported: - java.logback - java.log4j2 @@ -11,7 +11,7 @@ notSupported: -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. diff --git a/docs/platforms/java/common/performance/instrumentation/apollo3.mdx b/docs/platforms/java/common/tracing/instrumentation/apollo3.mdx similarity index 98% rename from docs/platforms/java/common/performance/instrumentation/apollo3.mdx rename to docs/platforms/java/common/tracing/instrumentation/apollo3.mdx index f39aea0878f7c..21945880f7b2f 100644 --- a/docs/platforms/java/common/performance/instrumentation/apollo3.mdx +++ b/docs/platforms/java/common/tracing/instrumentation/apollo3.mdx @@ -2,7 +2,7 @@ title: Apollo3 Integration sidebar_order: 31 sdk: sentry.java.apollo-3 -description: "Learn how to capture the performance of Apollo GraphQL client." +description: "Learn how to capture tracing information of the Apollo GraphQL client." notSupported: - java.logback - java.log4j2 @@ -11,7 +11,7 @@ notSupported: -To be able to capture transactions, you'll need to first set up performance monitoring. +To be able to capture transactions, you'll need to first set up tracing. diff --git a/docs/platforms/android/performance/instrumentation/custom-instrumentation.mdx b/docs/platforms/java/common/tracing/instrumentation/custom-instrumentation.mdx similarity index 82% rename from docs/platforms/android/performance/instrumentation/custom-instrumentation.mdx rename to docs/platforms/java/common/tracing/instrumentation/custom-instrumentation.mdx index 959714a579e3c..2d9a41622d610 100644 --- a/docs/platforms/android/performance/instrumentation/custom-instrumentation.mdx +++ b/docs/platforms/java/common/tracing/instrumentation/custom-instrumentation.mdx @@ -1,12 +1,12 @@ --- title: Custom Instrumentation -sidebar_order: 20 description: "Learn how to capture performance data on any action in your app." +sidebar_order: 20 --- -To capture transactions and spans customized to your organization's needs, you must first set up performance monitoring. +To capture transactions and spans customized to your organization's needs, you must first set up tracing. diff --git a/docs/platforms/java/common/performance/instrumentation/file-io.mdx b/docs/platforms/java/common/tracing/instrumentation/file-io.mdx similarity index 87% rename from docs/platforms/java/common/performance/instrumentation/file-io.mdx rename to docs/platforms/java/common/tracing/instrumentation/file-io.mdx index be4147310f611..e5d020f5da6d0 100644 --- a/docs/platforms/java/common/performance/instrumentation/file-io.mdx +++ b/docs/platforms/java/common/tracing/instrumentation/file-io.mdx @@ -1,7 +1,7 @@ --- title: File I/O Integration sidebar_order: 60 -description: "Learn how to capture the performance of file I/O operations." +description: "Learn how to capture tracing information for file I/O operations." notSupported: - java.logback - java.log4j2 @@ -10,7 +10,7 @@ notSupported: -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. diff --git a/docs/platforms/java/common/tracing/instrumentation/index.mdx b/docs/platforms/java/common/tracing/instrumentation/index.mdx new file mode 100644 index 0000000000000..eaac9e016be4c --- /dev/null +++ b/docs/platforms/java/common/tracing/instrumentation/index.mdx @@ -0,0 +1,7 @@ +--- +title: Instrumentation +description: "Learn how to instrument tracing in your app." +sidebar_order: 20 +--- + + diff --git a/docs/platforms/java/common/performance/instrumentation/jdbc.mdx b/docs/platforms/java/common/tracing/instrumentation/jdbc.mdx similarity index 93% rename from docs/platforms/java/common/performance/instrumentation/jdbc.mdx rename to docs/platforms/java/common/tracing/instrumentation/jdbc.mdx index 7e7d4fd7fbeb5..7d382d36428b3 100644 --- a/docs/platforms/java/common/performance/instrumentation/jdbc.mdx +++ b/docs/platforms/java/common/tracing/instrumentation/jdbc.mdx @@ -2,7 +2,7 @@ title: JDBC Instrumentation sidebar_order: 40 sdk: sentry.java.jdbc -description: "Learn how to capture the performance of database queries executed with JDBC." +description: "Learn how to capture tracing information for database queries executed with JDBC." notSupported: - java.logback - java.log4j2 @@ -11,7 +11,7 @@ notSupported: -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. diff --git a/docs/platforms/java/common/performance/instrumentation/okhttp.mdx b/docs/platforms/java/common/tracing/instrumentation/okhttp.mdx similarity index 98% rename from docs/platforms/java/common/performance/instrumentation/okhttp.mdx rename to docs/platforms/java/common/tracing/instrumentation/okhttp.mdx index e6d3fb33ff443..7bab85432ecdd 100644 --- a/docs/platforms/java/common/performance/instrumentation/okhttp.mdx +++ b/docs/platforms/java/common/tracing/instrumentation/okhttp.mdx @@ -2,7 +2,7 @@ title: OkHttp Integration sidebar_order: 35 sdk: sentry.java.okhttp -description: "Learn how to capture the performance of OkHttp client." +description: "Learn how to capture tracing information of the OkHttp client." notSupported: - java.logback - java.log4j2 @@ -11,7 +11,7 @@ notSupported: -To be able to capture transactions, you'll need to first set up performance monitoring. +To be able to capture transactions, you'll need to first set up tracing. diff --git a/docs/platforms/java/common/performance/instrumentation/open-feign.mdx b/docs/platforms/java/common/tracing/instrumentation/open-feign.mdx similarity index 94% rename from docs/platforms/java/common/performance/instrumentation/open-feign.mdx rename to docs/platforms/java/common/tracing/instrumentation/open-feign.mdx index fee8426c0fa54..4480b247668d7 100644 --- a/docs/platforms/java/common/performance/instrumentation/open-feign.mdx +++ b/docs/platforms/java/common/tracing/instrumentation/open-feign.mdx @@ -2,7 +2,7 @@ title: OpenFeign Integration sidebar_order: 50 sdk: sentry.java.openfeign -description: "Learn how to capture the performance of OpenFeign-based HTTP clients." +description: "Learn how to capture tracing information of OpenFeign-based HTTP clients." notSupported: - java.logback - java.log4j2 @@ -11,7 +11,7 @@ notSupported: -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. diff --git a/docs/platforms/java/common/performance/instrumentation/opentelemetry.mdx b/docs/platforms/java/common/tracing/instrumentation/opentelemetry.mdx similarity index 100% rename from docs/platforms/java/common/performance/instrumentation/opentelemetry.mdx rename to docs/platforms/java/common/tracing/instrumentation/opentelemetry.mdx diff --git a/docs/platforms/java/common/performance/instrumentation/performance-metrics.mdx b/docs/platforms/java/common/tracing/instrumentation/performance-metrics.mdx similarity index 100% rename from docs/platforms/java/common/performance/instrumentation/performance-metrics.mdx rename to docs/platforms/java/common/tracing/instrumentation/performance-metrics.mdx diff --git a/docs/platforms/java/common/distributed-tracing/custom-instrumentation/index.mdx b/docs/platforms/java/common/tracing/trace-propagation/custom-instrumentation/index.mdx similarity index 100% rename from docs/platforms/java/common/distributed-tracing/custom-instrumentation/index.mdx rename to docs/platforms/java/common/tracing/trace-propagation/custom-instrumentation/index.mdx diff --git a/docs/platforms/java/common/distributed-tracing/dealing-with-cors-issues/index.mdx b/docs/platforms/java/common/tracing/trace-propagation/dealing-with-cors-issues/index.mdx similarity index 100% rename from docs/platforms/java/common/distributed-tracing/dealing-with-cors-issues/index.mdx rename to docs/platforms/java/common/tracing/trace-propagation/dealing-with-cors-issues/index.mdx diff --git a/docs/platforms/java/common/tracing/trace-propagation/index.mdx b/docs/platforms/java/common/tracing/trace-propagation/index.mdx new file mode 100644 index 0000000000000..fb41f4dd98c48 --- /dev/null +++ b/docs/platforms/java/common/tracing/trace-propagation/index.mdx @@ -0,0 +1,34 @@ +--- +title: Trace Propagation +description: "Learn how to connect events across applications/services." +sidebar_order: 3000 +--- + +If the overall application landscape that you want to observe with Sentry consists of more than just a single service or application, distributed tracing can add a lot of value. + +## What is Distributed Tracing? + +In the context of tracing events across a distributed system, distributed tracing acts as a powerful debugging tool. Imagine your application as a vast network of interconnected parts. For example, your system might be spread across different servers or your application might split into different backend and frontend services, each potentially having their own technology stack. + +When an error or performance issue occurs, it can be challenging to pinpoint the root cause due to the complexity of such a system. Distributed tracing helps you follow the path of an event as it travels through this intricate web, recording every step it takes. By examining these traces, you can reconstruct the sequence of events leading up to the event of interest, identify the specific components involved, and understand their interactions. This detailed visibility enables you to diagnose and resolve issues more effectively, ultimately improving the reliability and performance of your distributed system. + +## Basic Example + +Here's an example showing a distributed trace in Sentry: + + + +This distributed trace shows a Vue app's `pageload` making a request to a Python backend, which then calls the `/api` endpoint of a Ruby microservice. + +What happens in the background is that Sentry uses reads and further propagates two HTTP headers between your applications: + +- `sentry-trace` +- `baggage` + +If you run any JavaScript applications in your distributed system, make sure that those two headers are added to your CORS allowlist and won't be blocked or stripped by your proxy servers, gateways, or firewalls. + +## How to Use Distributed Tracing? + + + +Remember that in order to propagate trace information through your whole distributed system, you have to use Sentry in all of the involved services and applications. Take a look at the respective SDK documentation to learn how distributed tracing can be enabled for each platform. diff --git a/docs/platforms/dotnet/common/performance/troubleshooting/index.mdx b/docs/platforms/java/common/tracing/troubleshooting/index.mdx similarity index 92% rename from docs/platforms/dotnet/common/performance/troubleshooting/index.mdx rename to docs/platforms/java/common/tracing/troubleshooting/index.mdx index ae3f809c8df2c..91680e839de3e 100644 --- a/docs/platforms/dotnet/common/performance/troubleshooting/index.mdx +++ b/docs/platforms/java/common/tracing/troubleshooting/index.mdx @@ -1,7 +1,7 @@ --- title: Troubleshooting -description: "Learn how to troubleshoot your performance monitoring setup." -sidebar_order: 40 +description: "Learn how to troubleshoot your tracing setup." +sidebar_order: 9000 --- If you need help managing transactions, you can read more here. If you need additional help, you can ask on GitHub. Customers on a paid plan may also contact support. diff --git a/docs/platforms/java/guides/spring-boot/performance/instrumentation/automatic-instrumentation.mdx b/docs/platforms/java/guides/spring-boot/tracing/instrumentation/automatic-instrumentation.mdx similarity index 98% rename from docs/platforms/java/guides/spring-boot/performance/instrumentation/automatic-instrumentation.mdx rename to docs/platforms/java/guides/spring-boot/tracing/instrumentation/automatic-instrumentation.mdx index 73e09b8e7761a..c09767b03044d 100644 --- a/docs/platforms/java/guides/spring-boot/performance/instrumentation/automatic-instrumentation.mdx +++ b/docs/platforms/java/guides/spring-boot/tracing/instrumentation/automatic-instrumentation.mdx @@ -6,7 +6,7 @@ description: "Learn what transactions are captured after tracing is enabled." -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. diff --git a/docs/platforms/java/guides/spring/performance/instrumentation/automatic-instrumentation.mdx b/docs/platforms/java/guides/spring/tracing/instrumentation/automatic-instrumentation.mdx similarity index 98% rename from docs/platforms/java/guides/spring/performance/instrumentation/automatic-instrumentation.mdx rename to docs/platforms/java/guides/spring/tracing/instrumentation/automatic-instrumentation.mdx index 4f5857c81bc53..cee7fd1feb5c2 100644 --- a/docs/platforms/java/guides/spring/performance/instrumentation/automatic-instrumentation.mdx +++ b/docs/platforms/java/guides/spring/tracing/instrumentation/automatic-instrumentation.mdx @@ -6,7 +6,7 @@ description: "Learn what transactions we capture after tracing is enabled." -Capturing transactions requires that you first set up performance monitoring if you haven't already. +Capturing transactions requires that you first set up tracing if you haven't already. diff --git a/docs/platforms/java/migration/6.x-to-7.0.mdx b/docs/platforms/java/migration/6.x-to-7.0.mdx index 33e2f8543eea5..4b9561c1af75c 100644 --- a/docs/platforms/java/migration/6.x-to-7.0.mdx +++ b/docs/platforms/java/migration/6.x-to-7.0.mdx @@ -8,7 +8,7 @@ description: "Learn about migrating from version 6.x to 7.0.0" ### Breaking Changes -- The `sentry-android-okhttp` classes were deprecated in favor of `sentry-okhttp`, which is a pure Java module and can be used in non-Android projects. Check the [OkHttp Integration](/platforms/java/performance/instrumentation/okhttp) documentation to see how to use it. +- The `sentry-android-okhttp` classes were deprecated in favor of `sentry-okhttp`, which is a pure Java module and can be used in non-Android projects. Check the [OkHttp Integration](/platforms/java/tracing/instrumentation/okhttp) documentation to see how to use it. - The `SentryOkHttpUtils` class was removed from the public API. If you were using it, consider filing a [feature request](https://github.com/getsentry/sentry-java/issues). - If you're using `sentry-kotlin-extensions`, it now requires `kotlinx-coroutines-core` version `1.6.1` or higher. - Changed the return type of `SentryApolloInterceptor.BeforeSpanCallback` from `ISpan` to `ISpan?`. @@ -27,7 +27,7 @@ val transaction = Sentry.startTransaction("name", "op", TransactionOptions().app ### Behavioral Changes - The SDK now captures failed HTTP and GraphQL (Apollo) requests by default. - - This can increase your event consumption and may affect your quota, because the SDK will report failed network requests as Sentry events if you're using the `sentry-okhttp` or `sentry-apollo-3` integrations by default. You can customize what errors you want/don't want to have reported for [OkHttp](/platforms/java/performance/instrumentation/okhttp/#http-client-errors) and [Apollo3](/platforms/java/performance/instrumentation/apollo3/#graphql-client-errors) respectively. + - This can increase your event consumption and may affect your quota, because the SDK will report failed network requests as Sentry events if you're using the `sentry-okhttp` or `sentry-apollo-3` integrations by default. You can customize what errors you want/don't want to have reported for [OkHttp](/platforms/java/tracing/instrumentation/okhttp/#http-client-errors) and [Apollo3](/platforms/java/tracing/instrumentation/apollo3/#graphql-client-errors) respectively. - The SDK now sets `ip_address` to \{\{auto}} by default, even if sendDefaultPII is disabled. - We recommend you instead use the "Prevent Storing of IP Addresses" option in the "Security & Privacy" project settings on [sentry.io](https://sentry.io/). - The `maxSpans` setting (defaults to 1000) is now enforced for nested child spans. This means a single transaction can have `maxSpans` number of children (nested or not) at most. diff --git a/docs/platforms/javascript/common/configuration/integrations/browsertracing.mdx b/docs/platforms/javascript/common/configuration/integrations/browsertracing.mdx index 310de86c2f9b3..16094f02b77c3 100644 --- a/docs/platforms/javascript/common/configuration/integrations/browsertracing.mdx +++ b/docs/platforms/javascript/common/configuration/integrations/browsertracing.mdx @@ -21,8 +21,8 @@ notSupported: _Import name: `Sentry.browserTracingIntegration`_ -With [performance monitoring](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. +With [tracing](/product/performance/), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. -The BrowserTracing integration sets up automatic performance monitoring for your frontend applications. It captures transactions and spans from the browser and sends them to Sentry. +The BrowserTracing integration sets up automatic tracing for your frontend applications. It captures transactions and spans from the browser and sends them to Sentry. -Read more about [setting up BrowserTracing](./../../../performance/). +Read more about [setting up BrowserTracing](./../../../tracing/). diff --git a/docs/platforms/javascript/common/configuration/sampling.mdx b/docs/platforms/javascript/common/configuration/sampling.mdx index fe7c18735e07c..10390b4e898b2 100644 --- a/docs/platforms/javascript/common/configuration/sampling.mdx +++ b/docs/platforms/javascript/common/configuration/sampling.mdx @@ -78,7 +78,7 @@ Whatever a transaction's sampling decision, that decision will be passed to its -(See Distributed Tracing for more about how that propagation is done.) +(See Distributed Tracing for more about how that propagation is done.) diff --git a/docs/platforms/javascript/common/configuration/tree-shaking/index.mdx b/docs/platforms/javascript/common/configuration/tree-shaking/index.mdx index a889439310e3f..6bd69636d24a5 100644 --- a/docs/platforms/javascript/common/configuration/tree-shaking/index.mdx +++ b/docs/platforms/javascript/common/configuration/tree-shaking/index.mdx @@ -22,7 +22,7 @@ If you want to minimize the bundle size of the Sentry SDK, we recommend reading ## Tree Shaking Optional Code -The Sentry SDK ships with code that is not strictly required for it to collect your errors. This includes code to debug your Sentry configuration or code to enable performance monitoring, for example. While debug code can be very useful in development environments, it's not typically necessary to include it in your production bundles where it takes up valuable space. The JavaScript SDK includes special flags in its CommonJS and ESM distributions, which can be used to facilitate tree shaking (removal) of this kind of code during the build process. +The Sentry SDK ships with code that is not strictly required for it to collect your errors. This includes code to debug your Sentry configuration or code to enable tracing, for example. While debug code can be very useful in development environments, it's not typically necessary to include it in your production bundles where it takes up valuable space. The JavaScript SDK includes special flags in its CommonJS and ESM distributions, which can be used to facilitate tree shaking (removal) of this kind of code during the build process. Anything that you don't import and use will automatically be tree @@ -108,10 +108,10 @@ Replacing this flag with `false` will tree shake any SDK code that's related to `__SENTRY_TRACING__` -Replacing this flag with `false` will tree shake any SDK code that's related to performance monitoring. +Replacing this flag with `false` will tree shake any SDK code that's related to tracing. - `__SENTRY_TRACING__` must not be replaced with `false` when you're using any performance monitoring-related SDK features (for example,`Sentry.startTransaction()`). This flag is intended to be used in combination with packages like `@sentry/next` or `@sentry/sveltekit`, which automatically include the performance monitoring functionality. + `__SENTRY_TRACING__` must not be replaced with `false` when you're using any tracing-related SDK features (for example,`Sentry.startTransaction()`). This flag is intended to be used in combination with packages like `@sentry/next` or `@sentry/sveltekit`, which automatically include the tracing functionality. diff --git a/docs/platforms/javascript/common/crons/troubleshooting.mdx b/docs/platforms/javascript/common/crons/troubleshooting.mdx index 28d847ac8c093..0a82042828496 100644 --- a/docs/platforms/javascript/common/crons/troubleshooting.mdx +++ b/docs/platforms/javascript/common/crons/troubleshooting.mdx @@ -1,7 +1,7 @@ --- title: Troubleshooting description: "Learn how to troubleshoot your Cron Monitoring setup." -sidebar_order: 500 +sidebar_order: 9000 supported: - javascript.nextjs - javascript.sveltekit diff --git a/docs/platforms/javascript/common/enriching-events/transaction-name/index.mdx b/docs/platforms/javascript/common/enriching-events/transaction-name/index.mdx index fb6c46ff75ca1..524482e94dce1 100644 --- a/docs/platforms/javascript/common/enriching-events/transaction-name/index.mdx +++ b/docs/platforms/javascript/common/enriching-events/transaction-name/index.mdx @@ -33,4 +33,4 @@ To override the name of the currently running transaction: -Please refer to [the tracing documentation](../../performance/) for how to start and stop transactions. +Please refer to [the tracing documentation](../../tracing/) for how to start and stop transactions. diff --git a/docs/platforms/javascript/common/install/esm-without-import.mdx b/docs/platforms/javascript/common/install/esm-without-import.mdx index 6300177e4351d..0a93cdee9d460 100644 --- a/docs/platforms/javascript/common/install/esm-without-import.mdx +++ b/docs/platforms/javascript/common/install/esm-without-import.mdx @@ -36,7 +36,7 @@ import * as Sentry from "@sentry/node"; Sentry.init({ dsn: "___PUBLIC_DSN___", - // Add Performance Monitoring by setting tracesSampleRate + // Add Tracing by setting tracesSampleRate // We recommend adjusting this value in production tracesSampleRate: 1.0, }); diff --git a/docs/platforms/javascript/common/install/esm.mdx b/docs/platforms/javascript/common/install/esm.mdx index 4417dd7642e5c..d62ca3446d166 100644 --- a/docs/platforms/javascript/common/install/esm.mdx +++ b/docs/platforms/javascript/common/install/esm.mdx @@ -27,7 +27,7 @@ import * as Sentry from "@sentry/node"; Sentry.init({ dsn: "___PUBLIC_DSN___", - // Add Performance Monitoring by setting tracesSampleRate + // Add Tracing by setting tracesSampleRate // We recommend adjusting this value in production tracesSampleRate: 1.0, }); diff --git a/docs/platforms/javascript/common/install/index.mdx b/docs/platforms/javascript/common/install/index.mdx index 50ae69ccd2c1d..31a34a943edf7 100644 --- a/docs/platforms/javascript/common/install/index.mdx +++ b/docs/platforms/javascript/common/install/index.mdx @@ -71,7 +71,7 @@ Using the Loader Script is the easiest way to start using Sentry. Add a script t - **Lazy-loading**: If you just want to use Sentry for errors, we'll only load the SDK when an error occurs, reducing the amount of JavaScript loaded on your page until then. - Note that when enabling Session Replay and/or Performance Monitoring, the + Note that when enabling Session Replay and/or Tracing, the SDK will be loaded immediately because we need to capture what's happening on the page as early as possible. diff --git a/docs/platforms/javascript/common/install/late-initializtion.mdx b/docs/platforms/javascript/common/install/late-initializtion.mdx index f80f30c3dc151..7bfa2f418b348 100644 --- a/docs/platforms/javascript/common/install/late-initializtion.mdx +++ b/docs/platforms/javascript/common/install/late-initializtion.mdx @@ -49,7 +49,7 @@ const dsn = fetchDsn(); Sentry.init({ dsn, - // Add Performance Monitoring by setting tracesSampleRate + // Add Tracing by setting tracesSampleRate // We recommend adjusting this value in production tracesSampleRate: 1.0, }); @@ -80,7 +80,7 @@ const dsn = fetchDsn(); Sentry.init({ dsn, - // Add Performance Monitoring by setting tracesSampleRate + // Add Tracing by setting tracesSampleRate // We recommend adjusting this value in production tracesSampleRate: 1.0, }); diff --git a/docs/platforms/javascript/common/install/loader.mdx b/docs/platforms/javascript/common/install/loader.mdx index 183c0f3cb7735..157bf8f2e59a7 100644 --- a/docs/platforms/javascript/common/install/loader.mdx +++ b/docs/platforms/javascript/common/install/loader.mdx @@ -46,7 +46,7 @@ To use the loader, go in the Sentry UI to **Settings > Projects > (select projec > ``` -By default, Performance Monitoring and Session Replay are enabled. +By default, Tracing and Session Replay are enabled. ## Source Maps @@ -57,7 +57,7 @@ To have correct stack traces for minified asset files when using the Loader Scri The loader has a few configuration options: - What version of the SDK to load -- Using Performance Monitoring +- Using Tracing - Using Session Replay - Showing debug logs @@ -93,7 +93,7 @@ Alternatively, you can set the loader to request the full SDK earlier: still as Finally, if you want to control the timing yourself, you can call `Sentry.forceLoad()`. You can do this as early as immediately after the loader runs (which has the same effect as setting `data-lazy="no"`) and as late as the first unhandled error, unhandled promise rejection, or call to `Sentry.captureMessage` or `Sentry.captureEvent` (which has the same effect as not calling it at all). Note that you can't delay loading past one of the aforementioned triggering events. -If Performance Monitoring and/or Session Replay is enabled, the SDK will immediately fetch and initialize the bundle to make sure it can capture transactions and/or replays once the page loads. +If Tracing and/or Session Replay is enabled, the SDK will immediately fetch and initialize the bundle to make sure it can capture transactions and/or replays once the page loads. ## SDK Configuration @@ -101,7 +101,7 @@ While the Loader Script will work out of the box without any configuration in yo ### Default Configuration -For Performance Monitoring, the SDK will be initialized with `tracesSampleRate: 1` by default. This means that the SDK will capture all traces. +For Tracing, the SDK will be initialized with `tracesSampleRate: 1` by default. This means that the SDK will capture all traces. For Session Replay, the defaults are `replaysSessionSampleRate: 0.1` and `replaysOnErrorSampleRate: 1`. This means Replays will be captured for 10% of all normal sessions and for all sessions with an error. @@ -191,7 +191,7 @@ Sentry supports loading the JavaScript SDK from a CDN. Generally we suggest usin ## Default Bundle -To use Sentry for error and performance monitoring, you can use the following bundle: +To use Sentry for error and tracing, you can use the following bundle: ```html {tabTitle: CDN}