Skip to content

Commit 05f8102

Browse files
committed
Merge branch 'master' into martinhaintz/fix-flutter-multiview
* master: (39 commits) getsentry/relay@403f2bf feat(native): add backend trade-offs to Advanced Usage (#11721) 🔧 chore(api): add additional troubleshooting instructions to publish api docs (#11772) Bump API schema to 02adb960 (#11773) Update metric-alert-config.mdx (#11760) update w-9 tax form (#11764) chore: silence fetch cache error due to size limit (#11767) fix Ureal engine DSN placeholder (#11769) feat: Banner pathname regex (#11761) docs(nuxt): Add troubleshoot pnpm (#11720) Docker Desktop to Colima fix (#11752) Bump API schema to d51784a6 (#11759) ref(feedback): update user feedback docs to include external issue linking & auto issue creation (#11729) getsentry/relay@d23c39a Changed /store to /envelope (because /store does not exist anymore (#11755) Refactor arcade embeds (#11722) feat(js): Add `skipBrowserExtensionCheck` documentation (#11693) getsentry/relay@a7d9096 fix mermaid charts in dark mode (#11754) fix: Log4j configurations and wording (#11395) ...
2 parents 06c2123 + 3711dd8 commit 05f8102

File tree

83 files changed

+1168
-821
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+1168
-821
lines changed

.github/labels.yml

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@
1717
color: F6F6F8
1818
description: Pull requests that update a dependency file
1919

20+
# Issue types
21+
- name: 'Type: Content'
22+
color: FBCA04
23+
- name: 'Type: Platform'
24+
color: 1D76DB
25+
26+
#
27+
- name: 'Develop'
28+
color: F6F6F8
29+
2030
# Impacts
2131
- name: 'Impact: Large'
2232
color: C83852
@@ -32,6 +42,8 @@
3242
color: '584774'
3343
- name: 'Platform: Capacitor'
3444
color: '584774'
45+
- name: 'Platform: CLI'
46+
color: '584774'
3547
- name: 'Platform: Cocoa'
3648
color: '584774'
3749
- name: 'Platform: Cordova'
@@ -40,14 +52,20 @@
4052
color: '584774'
4153
- name: 'Platform: Elixir'
4254
color: '584774'
55+
- name: 'Platform: Flutter'
56+
color: '584774'
4357
- name: 'Platform: Go'
4458
color: '584774'
59+
- name: 'Platform: iOS'
60+
color: '584774'
4561
- name: 'Platform: Java'
4662
color: '584774'
4763
- name: 'Platform: JavaScript'
4864
color: '584774'
4965
- name: 'Platform: KMP'
5066
color: '584774'
67+
- name: 'Platform: Native'
68+
color: '584774'
5169
- name: 'Platform: PHP'
5270
color: '584774'
5371
- name: 'Platform: Python'
@@ -67,6 +85,7 @@
6785
- name: 'Platform: Xamarin'
6886
color: '584774'
6987

88+
7089
# Waiting for Labels
7190
- name: 'Waiting for: Support'
7291
color: '8D5494'
@@ -80,7 +99,7 @@
8099
# Product Areas - www.notion.so/sentry/473791bae5bf43399d46093050b77bf0
81100
- name: 'Product Area: Unknown'
82101
color: '8D5494'
83-
- name: 'Product Area: Go to Sentry'
102+
- name: 'Product Area: Sign In'
84103
color: '8D5494'
85104
- name: 'Product Area: Issues'
86105
color: '8D5494'
@@ -217,16 +236,36 @@
217236
- name: 'Team: Web Frontend'
218237
color: 8D5494
219238
description: team-web-sdk-frontend
239+
- name: 'Team: Web Frontend SDKs'
240+
color: 8D5494
241+
description: team-web-sdk-frontend
220242
- name: 'Team: Web SDK Backend'
221243
color: 8D5494
222244
description: team-web-sdk-backend
245+
- name: 'Team: Web Backend SDKs'
246+
color: 8D5494
247+
description: team-web-sdk-backend
223248
- name: 'Team: Workflow'
224249
color: 8D5494
250+
- name: 'All SDKs'
251+
color: 1D76DB
252+
- name: 'SDKs'
253+
color: 1D76DB
254+
- name: 'Develop'
255+
color: 8D5494
256+
- name: 'Do not merge'
257+
color: 8D5494
258+
- name: 'Improvement'
259+
color: 8D5494
260+
- name: 'Launch 🚀'
261+
color: 8D5494
262+
- name: 'Product'
263+
color: 8D5494
225264

226265
# Miscellaneous
227266
- name: API Docs
228267
color: 649B42
229-
- name: bug
268+
- name: Bug
230269
color: F6F6F8
231270
- name: Common content
232271
color: B0E299
@@ -279,3 +318,11 @@
279318
color: F6F6F8
280319
- name: release health
281320
color: F6F6F8
321+
- name: submodules
322+
color: F6F6F8
323+
- name: '404'
324+
color: F6F6F8
325+
- name: darkmode
326+
color: F6F6F8
327+
- name: github_actions
328+
color: F6F6F8

develop-docs/application/architecture.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Edges represent service dependencies.
1010
```mermaid
1111
graph TD
1212
app[Your Application] --> |SDK| lb{{Load Balancer}}
13-
lb --> |"sentry.example.com/api/\d+/store/"| relay
13+
lb --> |"sentry.example.com/api/0/envelope/"| relay
1414
lb --> |"sentry.example.com"| sentry_web["Sentry (web)"]
1515
symbolicator --> sentry_web
1616
relay --> kafka
@@ -50,7 +50,7 @@ For more information read [Path of an event through Relay](https://getsentry.git
5050
```mermaid
5151
graph TD
5252
app[Your application] --> |sends crashes| lb{{nginx}}
53-
lb --> |/api/n/store/| relay
53+
lb --> |/api/0/envelope/| relay
5454
relay --> kafka[(Ingest Kafka)]
5555
kafka --> ingest-consumer["Sentry ingest consumer"]
5656
ingest-consumer --> preprocess-event

develop-docs/backend/api/public.mdx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,30 @@ NOTE: The `openapi-diff` test is supposed to fail when CI runs on your pull requ
483483

484484
---
485485

486+
**Problem**: `drf_spectacular.plumbing.UnableToProceedError' <class 'serializer_path.FooSerializer'> ... raise UnableToProceedError(hint)`
487+
488+
**Solution**: Check that the response of your API documentation is using a TypedDict rather than a serializer.
489+
490+
If the schema looks something like this:
491+
```python
492+
...
493+
200: inline_sentry_response_serializer(
494+
"ListDocIntegrationResponse", list[FooSerializer]
495+
),
496+
```
497+
498+
Then you need to change it to use a TypedDict by first typing the serializer, then updating the schema to use the TypedDict:
499+
```python
500+
...
501+
200: inline_sentry_response_serializer(
502+
"ListDocIntegrationResponse", list[FooSerializerResponse]
503+
),
504+
```
505+
506+
Refer to the section above on [Success Responses](#success-responses) for more information.
507+
508+
---
509+
486510
## Requesting an API to be public
487511

488512
Are you a Sentry user who wants an endpoint to be public?

develop-docs/development/environment/index.mdx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,3 +288,9 @@ docker ps
288288
**Problem:** You use an Android emulator with a DSN pointing to localhost, and the events don't show up in your local Sentry instance.
289289

290290
**Solution:** Change `localhost` to `10.0.2.2`. So, for example, change http://d895df97e1cb4a33b4dff8af3e78da09@localhost:8000/2 to http://[email protected]:8000/2. This is because localhost or `127.0.0.1` refers to the emulator's own loopback interface, not the loopback interface of the host machine. For more information see https://developer.android.com/studio/run/emulator-networking.
291+
292+
---
293+
294+
**Problem:** Switching from Docker Desktop to Colima results in error `Failed to start service: Credentials store error: StoreError('docker-credential-desktop not installed or not available in PATH')`
295+
296+
**Solution:** Remove the `credsStore` key in your `~/.docker/config.json` file.

develop-docs/sdk/data-model/envelope-items.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ details.
272272
**Constraints:**
273273

274274
- This Item may occur at most once per Envelope.
275-
- This Item must be sent with a Replay Recording Item.
275+
- This Item must be sent with a Replay Event Item.
276276

277277
**Envelope Headers:**
278278

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
---
2+
title: Tracing Without Performance
3+
---
4+
5+
If Sentry SDKs are not configured for sending spans (or transactions), they should fall back to a mode where they still handle continuing and propagating traces.
6+
Internally, we call this mode "Tracing without Performance", or "TwP" in short ([learn more why](#historical-context)).
7+
TwP mode ensures that error events and other signals are still connected via a trace, even if users choose not to send spans or performance data.
8+
9+
## Behavior
10+
11+
Tracing without Performance is the default fallback behavior of SDKs, when users [don't specify any tracing options](#configuration).
12+
13+
This means that SDKs by default always:
14+
15+
- continue incoming traces
16+
- attach `event.contexts.trace` context on events (e.g. errors, check-ins, replays)
17+
- attach the `trace` envelope header to Sentry envelopes, populated from the dynamic sampling context
18+
- propagate trace data (`sentry-trace`, `baggage`) via the usual channels (e.g. HTTP headers, `<meta>` HTML elements, etc), with the correct [sampling decision](#sampling-decision)
19+
20+
## Configuration
21+
22+
TwP is active by default if users don't specify sampling options that enable span collection and sending (i.e. [regular tracing](#enable-regular-tracing)).
23+
For example, the following trivial SDK setup (note the absence of sampling options) enables TwP:
24+
25+
```JavaScript
26+
Sentry.init({
27+
dsn: "___PUBLIC_DSN___",
28+
});
29+
```
30+
31+
TwP mode is exited by configuring the SDK for [regular tracing](#enable-regular-tracing) or partially disabled by [opting out of trace propagation](#disable-trace-propagation).
32+
33+
<Alert>
34+
35+
Note that some SDKs like the JavaScript Browser SDK require additional integrations to enable tracing all together.
36+
This is fine as long as there's a good reason why additional configuration is required (like keeping bundle size in check in JS).
37+
38+
</Alert>
39+
40+
### Enable Regular Tracing
41+
42+
As soon as users specify a tracing option in the SDK configuration, SDKs will use the normal tracing mode, which means collecting and sending spans (or transactions) in addition to continuing and propagating traces.
43+
44+
This can be achieved by specifying `tracesSampleRate` or `tracesSampler`, or any other equivalent option in the SDK configuration:
45+
46+
```js
47+
Sentry.init({
48+
dsn: "___PUBLIC_DSN___",
49+
tracesSampleRate: 0.1,
50+
// or
51+
tracesSampler: () => {
52+
/*...*/
53+
},
54+
});
55+
```
56+
57+
It's important to note that setting `tracesSampleRate: 0` does not mean that we fall back to TwP mode but that sampling decisions are always negative and we propagate the trace with a negative sampling decision.
58+
59+
### Disable Trace Propagation
60+
61+
To opt out of further propagating a trace, users can pass an empty array (or language-equivalent parameter) to the [`tracePropagationTargets` option](/sdk/telemetry/traces/#tracepropagationtargets). This will prevent the SDK from propagating trace information any further.
62+
63+
```js
64+
Sentry.init({
65+
dsn: "___PUBLIC_DSN___",
66+
tracePropagationTargets: [],
67+
});
68+
```
69+
70+
Note, that for incoming requests with trace headers, SDKs should still continue this trace, but not propagate it further downstream.
71+
72+
## Implementation
73+
74+
SDKs implementing TwP mode must adhere to the behavior described in this section.
75+
Everything else (e.g. how to store the trace data and specific tracing options) is considered an implementation detail and can be implemented as needed.
76+
77+
### Continuing Incoming Traces
78+
79+
SDKs in TwP mode must continue incoming traces (e.g. from incoming HTTP requests) if available and attach the trace data of the continued trace to any events that are created during the lifetime of this trace.
80+
Furthermore, they must propagate the continued trace as usual on all outgoing requests.
81+
This means that continuing traces should work just like in the regular tracing mode (with spans).
82+
83+
At the time of writing this document, there is no way to opt out of continuing incoming traces in TwP mode, unless users manually start a new trace.
84+
85+
### Starting a New Trace
86+
87+
If an SDK in TwP mode doesn't receive an incoming trace, it should start a new trace.
88+
In this case, the new trace is not sampled (as in, there is no sampling decision, neither positive nor negative).
89+
Instead, the sampling decision is _deferred_ to the next downstream SDK.
90+
91+
This means that:
92+
93+
- the SDK must not include a sampled flag in the [`sentry-trace` header](../#header-sentry-trace), meaning the header has the format `<traceId>-<spanId>`.
94+
More details on the [sampled flag](../#the-sampled-value).
95+
- the [dynamic sampling context](https://develop.sentry.dev/sdk/telemetry/traces/dynamic-sampling-context/), propagated via `baggage` must not contain the `sentry-sampled` key.
96+
97+
### Attaching Trace Data to Events and Envelopes
98+
99+
Any event created by an SDK in TwP mode must include the [`trace` context](/sdk/event-payloads/contexts/#trace-context).
100+
This context should contain the trace data of the current trace, if available, just like in regular tracing mode.
101+
102+
Furthermore, the [`trace` envelope header](/sdk/telemetry/traces/dynamic-sampling-context/#envelope-header) (populated from the dynamic sampling context) must be attached to any outgoing event envelope.
103+
104+
### Trace Duration and Storage
105+
106+
Traces in TwP mode should have the same duration as regular traces.
107+
For example, a TwP trace for a backend server should generally last for the duration of one individual request.
108+
This usually corresponds with the lifetime of an [isolation scope](/sdk/miscellaneous/hub_and_scope_refactoring/#scope) (or current scope created within the isolation scope).
109+
110+
SDKs in TwP mode must store trace data in a way that makes it possible for them to be attached to events and propagated to outgoing requests.
111+
The exact storage mechanism is up to the SDK implementation, but we recommended using the same mechanism as for regular traces.
112+
Usually this means storing the data on the scope in a field called `propagationContext` as [recommended here](/sdk/telemetry/traces/distributed-tracing/).
113+
114+
On a related note, the `propagationContext` should be populated with a random `traceId` and `spanId` if no incoming trace is present.
115+
This—in combination with the [`sentry-trace` header specification](/sdk/telemetry/traces/#header-sentry-trace) requiring a `spanId`—has an important implication on the Sentry product:
116+
A non-existing `spanId` will be propagated along with the trace and attached to events.
117+
While not ideal, we accept this limitation as the Sentry product can and should handle non-existing (parent) spans anyway.
118+
119+
As in regular tracing mode, for SDKs starting a new trace, the [Dynamic Sampling Context](/sdk/telemetry/traces/dynamic-sampling-context/) should be lazily populated and frozen for the duration of the trace.
120+
Given that no span is actually available in TwP mode, the DSC will not contain any keys related to spans (`transaction`, `sample_rate` or `sampled`).
121+
122+
In SDKs adapting OpenTelemetry's tracing capabilities ([POTel](/sdk/hub_and_scope_refactoring/#f-use-otel-for-performance-instrumentation-potel)), the TwP trace data could also be stored in a non-recording span.
123+
For Example, the Node SDK also starts non-recording Otel spans in TwP mode and takes the trace data from them. In case no span is started (e.g. a node script without request handling), it falls back to the propagation context on the scope.
124+
Note that in the case of using the non-recording span, the span is also not sampled, meaning the sampling decision must still be deferred [when starting a new Trace](#starting-a-new-trace).
125+
126+
## Historical Context
127+
128+
TwP mode was introduced after SDKs were already capable of sending spans and transactions. Before TwP, SDKs would only handle traces if span-sending was enabled. Otherwise, neither trace data would be attached to any events nor were traces propagated further downstream.
129+
130+
The primary motivation for TwP was to ensure that errors across application or service boundaries were still connected if they occurred in the same trace.
131+
132+
The name "Tracing without Performance" was chosen because at the time of introduction, we associated spans purely with performance monitoring.
133+
Today, we associate spans with "Tracing" in general, and only (some of) the data from spans with Performance Monitoring.
134+
This is why the name from today's perspective is a bit misleading.
135+
As a mental model, think of TwP as "Trace propagation and continuation without Spans".

docs/api/auth.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ You can create authentication tokens within Sentry by [creating an internal inte
2525

2626
Some API endpoints require an authentication token that's associated with your user account, rather than an authentication token from an internal integration. These auth tokens can be created within Sentry on the "User settings" page (**User settings > User Auth Tokens**) and assigned specific scopes.
2727

28-
The endpoints that require a user authentication token are specific to your user, such as [List Your Organizations](/api/organizations/list-your-organizations/).
28+
The endpoints that require a user authentication token are specific to your user, such as [Retrieve an Organization](/api/organizations/retrieve-an-organization/).
2929

3030
## DSN Authentication
3131

docs/concepts/data-management/event-grouping/index.mdx

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -80,19 +80,7 @@ Stack trace rules can work as a combination of both SDK and project settings. As
8080

8181
You can see a fingerprint by opening an issue, clicking "{} View JSON", and finding the _fingerprint_ property in that file. If the default grouping was used, you'll see "default" written there. If a different grouping was used, you'll see the actual fingerprint value itself.
8282

83-
<div style={{"height":"0px","paddingBottom":"calc(56.88524590163935% + 41px)","position":"relative","width":"100%"}}>
84-
<iframe
85-
src="https://demo.arcade.software/8vE2p1OF0WRxjg7XN8HH?embed"
86-
frameborder="0"
87-
loading="lazy"
88-
webkitallowfullscreen
89-
mozallowfullscreen
90-
allowfullscreen
91-
allow="fullscreen;"
92-
style={{"colorScheme":"light","height":"100%","left":"0px","position":"absolute","top":"0px","width":"100%"}}
93-
title="View Issue Fingerprint"
94-
></iframe>
95-
</div>
83+
<Arcade src="https://demo.arcade.software/8vE2p1OF0WRxjg7XN8HH?embed" />
9684

9785
## Transaction Grouping Algorithms
9886

docs/concepts/key-terms/environments/index.mdx

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,4 @@ If a project is hidden, you won't see that environment in the environment select
4040

4141
Follow along with the interactive demo below to see how to hide and unhide environments.
4242

43-
<div style={{"height":"0px","paddingBottom":"calc(66.5403% + 41px)","position":"relative","width":"100%"}}>
44-
<iframe
45-
src="https://demo.arcade.software/GqXUGJBjoH5fOG5AMyLt?embed"
46-
frameborder="0"
47-
loading="lazy"
48-
webkitallowfullscreen
49-
mozallowfullscreen
50-
allowfullscreen
51-
allow="fullscreen;"
52-
style={{"colorScheme":"light","height":"100%","left":"0px","position":"absolute","top":"0px","width":"100%"}}
53-
title="Environments - Hide/show"
54-
></iframe>
55-
</div>
43+
<Arcade src="https://demo.arcade.software/GqXUGJBjoH5fOG5AMyLt?embed" />

0 commit comments

Comments
 (0)