From a0f24e86c209b212017eb107048e545c1589d8c8 Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Wed, 13 Mar 2024 13:40:30 -0400 Subject: [PATCH 01/14] feat(spans): Add topic definitons for buffered-segment topic --- topics/buffered-segment.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 topics/buffered-segment.yaml diff --git a/topics/buffered-segment.yaml b/topics/buffered-segment.yaml new file mode 100644 index 00000000..39d79323 --- /dev/null +++ b/topics/buffered-segment.yaml @@ -0,0 +1,14 @@ +topic: buffered-segment +description: List of buffered spans for a segment +services: + producers: + - getsentry/sentry + consumers: + - getsentry/sentry +schemas: + - version: 1 + compatibility_mode: none + type: json + resource: any.json + examples: + - any/ From 9f5d6c376bd0094d0dcea89a5d6957f52e91eb01 Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Wed, 13 Mar 2024 16:44:33 -0400 Subject: [PATCH 02/14] add schema, examples --- .../1/basic_buffered_segment.json | 50 ++++ schemas/buffered-segment.v1.schema.json | 233 ++++++++++++++++++ topics/buffered-segment.yaml | 4 +- 3 files changed, 285 insertions(+), 2 deletions(-) create mode 100644 examples/buffered-segment/1/basic_buffered_segment.json create mode 100644 schemas/buffered-segment.v1.schema.json diff --git a/examples/buffered-segment/1/basic_buffered_segment.json b/examples/buffered-segment/1/basic_buffered_segment.json new file mode 100644 index 00000000..3a69ac1b --- /dev/null +++ b/examples/buffered-segment/1/basic_buffered_segment.json @@ -0,0 +1,50 @@ +[ + { + "duration_ms": 0, + "event_id": "72fcea47d44a444fb132f8d462eeb0b4", + "exclusive_time_ms": 0.006, + "is_segment": true, + "parent_span_id": "93f0e87ad9cc709e", + "profile_id": "7ce060d7ea62432b8355bc9e612676e4", + "project_id": 1, + "received": 1706734067.029479, + "retention_days": 90, + "segment_id": "ace31e54d65652aa", + "sentry_tags": { + "environment": "development", + "op": "relay_fetch_org_options", + "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", + "transaction": "/api/0/relays/projectconfigs/", + "transaction.method": "POST", + "transaction.op": "http.server", + "user": "ip:127.0.0.1" + }, + "span_id": "95acbe6d30a66717", + "start_timestamp_ms": 1706734066840, + "trace_id": "8e6f22e6169545cc963255d0f29cb76b" + }, + { + "duration_ms": 0, + "event_id": "72fcea47d44a444fb132f8d462eeb0b4", + "exclusive_time_ms": 0.006, + "is_segment": false, + "parent_span_id": "93f0e87ad9cc709e", + "profile_id": "7ce060d7ea62432b8355bc9e612676e4", + "project_id": 1, + "received": 1706734067.029479, + "retention_days": 90, + "segment_id": "ace31e54d65652aa", + "sentry_tags": { + "environment": "development", + "op": "relay_fetch_org_options", + "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", + "transaction": "/api/0/relays/projectconfigs/", + "transaction.method": "POST", + "transaction.op": "http.server", + "user": "ip:127.0.0.1" + }, + "span_id": "95acbe6d30a66717", + "start_timestamp_ms": 1706734066840, + "trace_id": "8e6f22e6169545cc963255d0f29cb76b" + } +] diff --git a/schemas/buffered-segment.v1.schema.json b/schemas/buffered-segment.v1.schema.json new file mode 100644 index 00000000..6d9ccf25 --- /dev/null +++ b/schemas/buffered-segment.v1.schema.json @@ -0,0 +1,233 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "buffered_segment_message", + "$ref": "#/definitions/BufferedSpans", + "definitions": { + "BufferedSpans": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/SpanEvent" + } + }, + "SpanEvent": { + "type": "object", + "title": "span_event", + "additionalProperties": true, + "properties": { + "event_id": { + "$ref": "#/definitions/UUID" + }, + "organization_id": { + "$ref": "#/definitions/UInt" + }, + "project_id": { + "$ref": "#/definitions/UInt" + }, + "trace_id": { + "$ref": "#/definitions/UUID", + "description": "The trace ID is a unique identifier for a trace. It is a 16 byte hexadecimal string." + }, + "span_id": { + "type": "string", + "description": "The span ID is a unique identifier for a span within a trace. It is an 8 byte hexadecimal string." + }, + "parent_span_id": { + "type": "string", + "description": "The parent span ID is the ID of the span that caused this span. It is an 8 byte hexadecimal string." + }, + "segment_id": { + "type": "string", + "description": "The segment ID is a unique identifier for a segment within a trace. It is an 8 byte hexadecimal string." + }, + "profile_id": { + "$ref": "#/definitions/UUID", + "description": "The profile ID. It is an 16 byte hexadecimal string." + }, + "is_segment": { + "type": "boolean", + "description": "Whether this span is a segment or not." + }, + "start_timestamp_ms": { + "$ref": "#/definitions/UInt", + "description": "The start timestamp of the span in milliseconds since epoch." + }, + "duration_ms": { + "$ref": "#/definitions/UInt32", + "description": "The duration of the span in milliseconds." + }, + "exclusive_time_ms": { + "$ref": "#/definitions/PositiveFloat", + "description": "The exclusive time of the span in milliseconds." + }, + "retention_days": { + "$ref": "#/definitions/UInt16" + }, + "received": { + "$ref": "#/definitions/PositiveFloat", + "description": "Unix timestamp when the span was received by Sentry." + }, + "description": { + "type": "string" + }, + "tags": { + "description": " Manual key/value tag pairs.", + "anyOf": [ + { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/TagValue" + } + }, + { + "type": "null" + } + ] + }, + "sentry_tags": { + "$ref": "#/definitions/SentryExtractedTags" + }, + "measurements": { + "$ref": "#/definitions/Measurements" + }, + "_metrics_summary": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MetricsSummary" + } + } + }, + "required": [ + "duration_ms", + "exclusive_time_ms", + "is_segment", + "project_id", + "received", + "retention_days", + "span_id", + "start_timestamp_ms", + "trace_id" + ] + }, + "SentryExtractedTags": { + "description": "Tags extracted by sentry. These are kept separate from customer tags", + "anyOf": [ + { + "type": "object", + "properties": { + "http.method": { + "type": "string" + }, + "action": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "module": { + "type": "string" + }, + "group": { + "type": "string" + }, + "system": { + "type": "string" + }, + "status": { + "type": "string" + }, + "status_code": { + "type": "string" + }, + "transaction": { + "type": "string" + }, + "transaction.op": { + "type": "string" + }, + "op": { + "type": "string" + }, + "transaction.method": { + "type": "string" + } + }, + "additionalProperties": true + } + ] + }, + "TagValue": { + "type": "string" + }, + "UUID": { + "type": "string", + "minLength": 32, + "maxLength": 36 + }, + "UInt16": { + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "UInt32": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + "UInt": { + "type": "integer", + "minimum": 0 + }, + "PositiveFloat": { + "type": "number", + "minimum": 0 + }, + "Measurements": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MeasurementValue" + } + }, + "MeasurementValue": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "unit": { + "type": "string" + } + }, + "required": ["value"] + }, + "MetricsSummary": { + "type": "array", + "items": { + "$ref": "#/definitions/MetricSummaryValue" + } + }, + "MetricSummaryValue": { + "type": "object", + "properties": { + "min": { + "type": "number" + }, + "max": { + "type": "number" + }, + "sum": { + "type": "number" + }, + "count": { + "type": "number" + }, + "tags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } +} diff --git a/topics/buffered-segment.yaml b/topics/buffered-segment.yaml index 39d79323..9eb60337 100644 --- a/topics/buffered-segment.yaml +++ b/topics/buffered-segment.yaml @@ -9,6 +9,6 @@ schemas: - version: 1 compatibility_mode: none type: json - resource: any.json + resource: buffered-segment.v1.schema.json examples: - - any/ + - buffered-segment/1/ From 491422c3efcc1487a4fe303835198c56909d3992 Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Wed, 13 Mar 2024 17:00:14 -0400 Subject: [PATCH 03/14] reuse snuba span schema --- schemas/buffered-segment.v1.schema.json | 233 ------------------------ schemas/snuba-spans.v1.schema.json | 12 +- topics/buffered-segment.yaml | 2 +- 3 files changed, 12 insertions(+), 235 deletions(-) delete mode 100644 schemas/buffered-segment.v1.schema.json diff --git a/schemas/buffered-segment.v1.schema.json b/schemas/buffered-segment.v1.schema.json deleted file mode 100644 index 6d9ccf25..00000000 --- a/schemas/buffered-segment.v1.schema.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "buffered_segment_message", - "$ref": "#/definitions/BufferedSpans", - "definitions": { - "BufferedSpans": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/SpanEvent" - } - }, - "SpanEvent": { - "type": "object", - "title": "span_event", - "additionalProperties": true, - "properties": { - "event_id": { - "$ref": "#/definitions/UUID" - }, - "organization_id": { - "$ref": "#/definitions/UInt" - }, - "project_id": { - "$ref": "#/definitions/UInt" - }, - "trace_id": { - "$ref": "#/definitions/UUID", - "description": "The trace ID is a unique identifier for a trace. It is a 16 byte hexadecimal string." - }, - "span_id": { - "type": "string", - "description": "The span ID is a unique identifier for a span within a trace. It is an 8 byte hexadecimal string." - }, - "parent_span_id": { - "type": "string", - "description": "The parent span ID is the ID of the span that caused this span. It is an 8 byte hexadecimal string." - }, - "segment_id": { - "type": "string", - "description": "The segment ID is a unique identifier for a segment within a trace. It is an 8 byte hexadecimal string." - }, - "profile_id": { - "$ref": "#/definitions/UUID", - "description": "The profile ID. It is an 16 byte hexadecimal string." - }, - "is_segment": { - "type": "boolean", - "description": "Whether this span is a segment or not." - }, - "start_timestamp_ms": { - "$ref": "#/definitions/UInt", - "description": "The start timestamp of the span in milliseconds since epoch." - }, - "duration_ms": { - "$ref": "#/definitions/UInt32", - "description": "The duration of the span in milliseconds." - }, - "exclusive_time_ms": { - "$ref": "#/definitions/PositiveFloat", - "description": "The exclusive time of the span in milliseconds." - }, - "retention_days": { - "$ref": "#/definitions/UInt16" - }, - "received": { - "$ref": "#/definitions/PositiveFloat", - "description": "Unix timestamp when the span was received by Sentry." - }, - "description": { - "type": "string" - }, - "tags": { - "description": " Manual key/value tag pairs.", - "anyOf": [ - { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/TagValue" - } - }, - { - "type": "null" - } - ] - }, - "sentry_tags": { - "$ref": "#/definitions/SentryExtractedTags" - }, - "measurements": { - "$ref": "#/definitions/Measurements" - }, - "_metrics_summary": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/MetricsSummary" - } - } - }, - "required": [ - "duration_ms", - "exclusive_time_ms", - "is_segment", - "project_id", - "received", - "retention_days", - "span_id", - "start_timestamp_ms", - "trace_id" - ] - }, - "SentryExtractedTags": { - "description": "Tags extracted by sentry. These are kept separate from customer tags", - "anyOf": [ - { - "type": "object", - "properties": { - "http.method": { - "type": "string" - }, - "action": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "module": { - "type": "string" - }, - "group": { - "type": "string" - }, - "system": { - "type": "string" - }, - "status": { - "type": "string" - }, - "status_code": { - "type": "string" - }, - "transaction": { - "type": "string" - }, - "transaction.op": { - "type": "string" - }, - "op": { - "type": "string" - }, - "transaction.method": { - "type": "string" - } - }, - "additionalProperties": true - } - ] - }, - "TagValue": { - "type": "string" - }, - "UUID": { - "type": "string", - "minLength": 32, - "maxLength": 36 - }, - "UInt16": { - "type": "integer", - "minimum": 0, - "maximum": 65535 - }, - "UInt32": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295 - }, - "UInt": { - "type": "integer", - "minimum": 0 - }, - "PositiveFloat": { - "type": "number", - "minimum": 0 - }, - "Measurements": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/MeasurementValue" - } - }, - "MeasurementValue": { - "type": "object", - "properties": { - "value": { - "type": "number" - }, - "unit": { - "type": "string" - } - }, - "required": ["value"] - }, - "MetricsSummary": { - "type": "array", - "items": { - "$ref": "#/definitions/MetricSummaryValue" - } - }, - "MetricSummaryValue": { - "type": "object", - "properties": { - "min": { - "type": "number" - }, - "max": { - "type": "number" - }, - "sum": { - "type": "number" - }, - "count": { - "type": "number" - }, - "tags": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - } -} diff --git a/schemas/snuba-spans.v1.schema.json b/schemas/snuba-spans.v1.schema.json index 38e1d8b0..8517aba4 100644 --- a/schemas/snuba-spans.v1.schema.json +++ b/schemas/snuba-spans.v1.schema.json @@ -1,8 +1,18 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "spans_stream_message", - "$ref": "#/definitions/SpanEvent", + "anyOf": [ + { "$ref": "#/definitions/SpanEvent" }, + { "$ref": "#/definitions/Spans" } + ], "definitions": { + "Spans": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/SpanEvent" + } + }, "SpanEvent": { "type": "object", "title": "span_event", diff --git a/topics/buffered-segment.yaml b/topics/buffered-segment.yaml index 9eb60337..ac7ecf22 100644 --- a/topics/buffered-segment.yaml +++ b/topics/buffered-segment.yaml @@ -9,6 +9,6 @@ schemas: - version: 1 compatibility_mode: none type: json - resource: buffered-segment.v1.schema.json + resource: snuba-spans.v1.schema.json examples: - buffered-segment/1/ From 0e4fa5dee99837169e553bc3f4244efa6b4393ca Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 21:01:54 +0000 Subject: [PATCH 04/14] style(lint): Auto commit lint changes --- .../1/basic_buffered_segment.json | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/examples/buffered-segment/1/basic_buffered_segment.json b/examples/buffered-segment/1/basic_buffered_segment.json index 3a69ac1b..935cffb2 100644 --- a/examples/buffered-segment/1/basic_buffered_segment.json +++ b/examples/buffered-segment/1/basic_buffered_segment.json @@ -1,50 +1,50 @@ [ - { - "duration_ms": 0, - "event_id": "72fcea47d44a444fb132f8d462eeb0b4", - "exclusive_time_ms": 0.006, - "is_segment": true, - "parent_span_id": "93f0e87ad9cc709e", - "profile_id": "7ce060d7ea62432b8355bc9e612676e4", - "project_id": 1, - "received": 1706734067.029479, - "retention_days": 90, - "segment_id": "ace31e54d65652aa", - "sentry_tags": { - "environment": "development", - "op": "relay_fetch_org_options", - "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", - "transaction": "/api/0/relays/projectconfigs/", - "transaction.method": "POST", - "transaction.op": "http.server", - "user": "ip:127.0.0.1" - }, - "span_id": "95acbe6d30a66717", - "start_timestamp_ms": 1706734066840, - "trace_id": "8e6f22e6169545cc963255d0f29cb76b" + { + "duration_ms": 0, + "event_id": "72fcea47d44a444fb132f8d462eeb0b4", + "exclusive_time_ms": 0.006, + "is_segment": true, + "parent_span_id": "93f0e87ad9cc709e", + "profile_id": "7ce060d7ea62432b8355bc9e612676e4", + "project_id": 1, + "received": 1706734067.029479, + "retention_days": 90, + "segment_id": "ace31e54d65652aa", + "sentry_tags": { + "environment": "development", + "op": "relay_fetch_org_options", + "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", + "transaction": "/api/0/relays/projectconfigs/", + "transaction.method": "POST", + "transaction.op": "http.server", + "user": "ip:127.0.0.1" }, - { - "duration_ms": 0, - "event_id": "72fcea47d44a444fb132f8d462eeb0b4", - "exclusive_time_ms": 0.006, - "is_segment": false, - "parent_span_id": "93f0e87ad9cc709e", - "profile_id": "7ce060d7ea62432b8355bc9e612676e4", - "project_id": 1, - "received": 1706734067.029479, - "retention_days": 90, - "segment_id": "ace31e54d65652aa", - "sentry_tags": { - "environment": "development", - "op": "relay_fetch_org_options", - "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", - "transaction": "/api/0/relays/projectconfigs/", - "transaction.method": "POST", - "transaction.op": "http.server", - "user": "ip:127.0.0.1" - }, - "span_id": "95acbe6d30a66717", - "start_timestamp_ms": 1706734066840, - "trace_id": "8e6f22e6169545cc963255d0f29cb76b" - } + "span_id": "95acbe6d30a66717", + "start_timestamp_ms": 1706734066840, + "trace_id": "8e6f22e6169545cc963255d0f29cb76b" + }, + { + "duration_ms": 0, + "event_id": "72fcea47d44a444fb132f8d462eeb0b4", + "exclusive_time_ms": 0.006, + "is_segment": false, + "parent_span_id": "93f0e87ad9cc709e", + "profile_id": "7ce060d7ea62432b8355bc9e612676e4", + "project_id": 1, + "received": 1706734067.029479, + "retention_days": 90, + "segment_id": "ace31e54d65652aa", + "sentry_tags": { + "environment": "development", + "op": "relay_fetch_org_options", + "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", + "transaction": "/api/0/relays/projectconfigs/", + "transaction.method": "POST", + "transaction.op": "http.server", + "user": "ip:127.0.0.1" + }, + "span_id": "95acbe6d30a66717", + "start_timestamp_ms": 1706734066840, + "trace_id": "8e6f22e6169545cc963255d0f29cb76b" + } ] From e2ec92849f4e4e95451eaaafabea4b5c486c6633 Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Wed, 13 Mar 2024 17:12:58 -0400 Subject: [PATCH 05/14] compression --- topics/buffered-segment.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/topics/buffered-segment.yaml b/topics/buffered-segment.yaml index ac7ecf22..fe662bbc 100644 --- a/topics/buffered-segment.yaml +++ b/topics/buffered-segment.yaml @@ -12,3 +12,5 @@ schemas: resource: snuba-spans.v1.schema.json examples: - buffered-segment/1/ +topic_creation_config: + compression.type: lz4 From caa302238dd24de5c1ab5b9c897690e89a6d4e16 Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Wed, 13 Mar 2024 17:23:06 -0400 Subject: [PATCH 06/14] codeowners --- CODEOWNERS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CODEOWNERS b/CODEOWNERS index cd6dd994..a01cb108 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -25,6 +25,9 @@ /topics/snuba-spans.yaml @getsentry/owners-snuba @getsentry/profiling /topics/snuba-metrics-summaries.yaml @getsentry/owners-snuba @getsentry/profiling +# Topics produced by Sentry +/topics/buffered-segment.yaml @getsentry/owners-snuba @getsentry/team-starfish + # DLQs for Snuba topics /topics/snuba-dead-letter-metrics.yaml @getsentry/owners-snuba /topics/snuba-dead-letter-generic-metrics.yaml @getsentry/owners-snuba @@ -61,6 +64,7 @@ /examples/profile-functions/ @getsentry/owners-snuba @getsentry/profiling /examples/group-attributes/ @getsentry/owners-snuba @getsentry/issues /examples/snuba-spans/ @getsentry/owners-snuba @getsentry/profiling +/examples/buffered-segment/ @getsentry/owners-snuba @getsentry/team-starfish /examples/snuba-metrics-summaries/ @getsentry/owners-snuba @getsentry/profiling # Internal Snuba topics From 348c39174330378fad6b8521588a9ab30f17738c Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Thu, 14 Mar 2024 10:12:38 -0400 Subject: [PATCH 07/14] move buffered segment to it's own schema --- CODEOWNERS | 1 + .../1/basic_buffered_segment.json | 100 +++---- schemas/buffered-segment.v1.schema.json | 243 ++++++++++++++++++ schemas/snuba-spans.v1.schema.json | 12 +- topics/buffered-segment.yaml | 2 +- 5 files changed, 297 insertions(+), 61 deletions(-) create mode 100644 schemas/buffered-segment.v1.schema.json diff --git a/CODEOWNERS b/CODEOWNERS index a01cb108..ba42c093 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -53,6 +53,7 @@ /schemas/profile-functions.v1.schema.json @getsentry/owners-snuba @getsentry/profiling /schemas/group-attributes.v1.schema.json @getsentry/owners-snuba @getsentry/issues /schemas/snuba-spans.v1.schema.json @getsentry/owners-snuba @getsentry/profiling +/schemas/buffered-segment.v1.schema.json @getsentry/owners-snuba @getsentry/team-starfish /schemas/snuba-metrics-summaries.v1.schema.json @getsentry/owners-snuba @getsentry/profiling # Examples diff --git a/examples/buffered-segment/1/basic_buffered_segment.json b/examples/buffered-segment/1/basic_buffered_segment.json index 935cffb2..3168e596 100644 --- a/examples/buffered-segment/1/basic_buffered_segment.json +++ b/examples/buffered-segment/1/basic_buffered_segment.json @@ -1,50 +1,52 @@ -[ - { - "duration_ms": 0, - "event_id": "72fcea47d44a444fb132f8d462eeb0b4", - "exclusive_time_ms": 0.006, - "is_segment": true, - "parent_span_id": "93f0e87ad9cc709e", - "profile_id": "7ce060d7ea62432b8355bc9e612676e4", - "project_id": 1, - "received": 1706734067.029479, - "retention_days": 90, - "segment_id": "ace31e54d65652aa", - "sentry_tags": { - "environment": "development", - "op": "relay_fetch_org_options", - "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", - "transaction": "/api/0/relays/projectconfigs/", - "transaction.method": "POST", - "transaction.op": "http.server", - "user": "ip:127.0.0.1" +{ + "spans": [ + { + "duration_ms": 0, + "event_id": "72fcea47d44a444fb132f8d462eeb0b4", + "exclusive_time_ms": 0.006, + "is_segment": true, + "parent_span_id": "93f0e87ad9cc709e", + "profile_id": "7ce060d7ea62432b8355bc9e612676e4", + "project_id": 1, + "received": 1706734067.029479, + "retention_days": 90, + "segment_id": "ace31e54d65652aa", + "sentry_tags": { + "environment": "development", + "op": "relay_fetch_org_options", + "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", + "transaction": "/api/0/relays/projectconfigs/", + "transaction.method": "POST", + "transaction.op": "http.server", + "user": "ip:127.0.0.1" + }, + "span_id": "95acbe6d30a66717", + "start_timestamp_ms": 1706734066840, + "trace_id": "8e6f22e6169545cc963255d0f29cb76b" }, - "span_id": "95acbe6d30a66717", - "start_timestamp_ms": 1706734066840, - "trace_id": "8e6f22e6169545cc963255d0f29cb76b" - }, - { - "duration_ms": 0, - "event_id": "72fcea47d44a444fb132f8d462eeb0b4", - "exclusive_time_ms": 0.006, - "is_segment": false, - "parent_span_id": "93f0e87ad9cc709e", - "profile_id": "7ce060d7ea62432b8355bc9e612676e4", - "project_id": 1, - "received": 1706734067.029479, - "retention_days": 90, - "segment_id": "ace31e54d65652aa", - "sentry_tags": { - "environment": "development", - "op": "relay_fetch_org_options", - "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", - "transaction": "/api/0/relays/projectconfigs/", - "transaction.method": "POST", - "transaction.op": "http.server", - "user": "ip:127.0.0.1" - }, - "span_id": "95acbe6d30a66717", - "start_timestamp_ms": 1706734066840, - "trace_id": "8e6f22e6169545cc963255d0f29cb76b" - } -] + { + "duration_ms": 0, + "event_id": "72fcea47d44a444fb132f8d462eeb0b4", + "exclusive_time_ms": 0.006, + "is_segment": false, + "parent_span_id": "93f0e87ad9cc709e", + "profile_id": "7ce060d7ea62432b8355bc9e612676e4", + "project_id": 1, + "received": 1706734067.029479, + "retention_days": 90, + "segment_id": "ace31e54d65652aa", + "sentry_tags": { + "environment": "development", + "op": "relay_fetch_org_options", + "release": "backend@24.2.0.dev0+df7615f2ff7dc3c8802f806477f920bb934bd198", + "transaction": "/api/0/relays/projectconfigs/", + "transaction.method": "POST", + "transaction.op": "http.server", + "user": "ip:127.0.0.1" + }, + "span_id": "95acbe6d30a66717", + "start_timestamp_ms": 1706734066840, + "trace_id": "8e6f22e6169545cc963255d0f29cb76b" + } + ] +} diff --git a/schemas/buffered-segment.v1.schema.json b/schemas/buffered-segment.v1.schema.json new file mode 100644 index 00000000..667291d7 --- /dev/null +++ b/schemas/buffered-segment.v1.schema.json @@ -0,0 +1,243 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "buffered_segment_message", + "$ref": "#/definitions/Segment", + "definitions": { + "Segment": { + "type": "object", + "title": "buffered_segment", + "additionalProperties": true, + "properties": { + "spans": { + "$ref": "#/definitions/Spans" + } + } + }, + "Spans": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/SpanEvent" + } + }, + "SpanEvent": { + "type": "object", + "title": "span_event", + "additionalProperties": true, + "properties": { + "event_id": { + "$ref": "#/definitions/UUID" + }, + "organization_id": { + "$ref": "#/definitions/UInt" + }, + "project_id": { + "$ref": "#/definitions/UInt" + }, + "trace_id": { + "$ref": "#/definitions/UUID", + "description": "The trace ID is a unique identifier for a trace. It is a 16 byte hexadecimal string." + }, + "span_id": { + "type": "string", + "description": "The span ID is a unique identifier for a span within a trace. It is an 8 byte hexadecimal string." + }, + "parent_span_id": { + "type": "string", + "description": "The parent span ID is the ID of the span that caused this span. It is an 8 byte hexadecimal string." + }, + "segment_id": { + "type": "string", + "description": "The segment ID is a unique identifier for a segment within a trace. It is an 8 byte hexadecimal string." + }, + "profile_id": { + "$ref": "#/definitions/UUID", + "description": "The profile ID. It is an 16 byte hexadecimal string." + }, + "is_segment": { + "type": "boolean", + "description": "Whether this span is a segment or not." + }, + "start_timestamp_ms": { + "$ref": "#/definitions/UInt", + "description": "The start timestamp of the span in milliseconds since epoch." + }, + "duration_ms": { + "$ref": "#/definitions/UInt32", + "description": "The duration of the span in milliseconds." + }, + "exclusive_time_ms": { + "$ref": "#/definitions/PositiveFloat", + "description": "The exclusive time of the span in milliseconds." + }, + "retention_days": { + "$ref": "#/definitions/UInt16" + }, + "received": { + "$ref": "#/definitions/PositiveFloat", + "description": "Unix timestamp when the span was received by Sentry." + }, + "description": { + "type": "string" + }, + "tags": { + "description": " Manual key/value tag pairs.", + "anyOf": [ + { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/TagValue" + } + }, + { + "type": "null" + } + ] + }, + "sentry_tags": { + "$ref": "#/definitions/SentryExtractedTags" + }, + "measurements": { + "$ref": "#/definitions/Measurements" + }, + "_metrics_summary": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MetricsSummary" + } + } + }, + "required": [ + "duration_ms", + "exclusive_time_ms", + "is_segment", + "project_id", + "received", + "retention_days", + "span_id", + "start_timestamp_ms", + "trace_id" + ] + }, + "SentryExtractedTags": { + "description": "Tags extracted by sentry. These are kept separate from customer tags", + "anyOf": [ + { + "type": "object", + "properties": { + "http.method": { + "type": "string" + }, + "action": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "module": { + "type": "string" + }, + "group": { + "type": "string" + }, + "system": { + "type": "string" + }, + "status": { + "type": "string" + }, + "status_code": { + "type": "string" + }, + "transaction": { + "type": "string" + }, + "transaction.op": { + "type": "string" + }, + "op": { + "type": "string" + }, + "transaction.method": { + "type": "string" + } + }, + "additionalProperties": true + } + ] + }, + "TagValue": { + "type": "string" + }, + "UUID": { + "type": "string", + "minLength": 32, + "maxLength": 36 + }, + "UInt16": { + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "UInt32": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + "UInt": { + "type": "integer", + "minimum": 0 + }, + "PositiveFloat": { + "type": "number", + "minimum": 0 + }, + "Measurements": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MeasurementValue" + } + }, + "MeasurementValue": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "unit": { + "type": "string" + } + }, + "required": ["value"] + }, + "MetricsSummary": { + "type": "array", + "items": { + "$ref": "#/definitions/MetricSummaryValue" + } + }, + "MetricSummaryValue": { + "type": "object", + "properties": { + "min": { + "type": "number" + }, + "max": { + "type": "number" + }, + "sum": { + "type": "number" + }, + "count": { + "type": "number" + }, + "tags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } +} diff --git a/schemas/snuba-spans.v1.schema.json b/schemas/snuba-spans.v1.schema.json index 8517aba4..38e1d8b0 100644 --- a/schemas/snuba-spans.v1.schema.json +++ b/schemas/snuba-spans.v1.schema.json @@ -1,18 +1,8 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "spans_stream_message", - "anyOf": [ - { "$ref": "#/definitions/SpanEvent" }, - { "$ref": "#/definitions/Spans" } - ], + "$ref": "#/definitions/SpanEvent", "definitions": { - "Spans": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/SpanEvent" - } - }, "SpanEvent": { "type": "object", "title": "span_event", diff --git a/topics/buffered-segment.yaml b/topics/buffered-segment.yaml index fe662bbc..2f58f8d4 100644 --- a/topics/buffered-segment.yaml +++ b/topics/buffered-segment.yaml @@ -9,7 +9,7 @@ schemas: - version: 1 compatibility_mode: none type: json - resource: snuba-spans.v1.schema.json + resource: buffered-segment.v1.schema.json examples: - buffered-segment/1/ topic_creation_config: From 9cdfe1bf4b03eb2566661c0379acf28ce3aeaece Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Thu, 14 Mar 2024 10:16:01 -0400 Subject: [PATCH 08/14] make spans array required --- schemas/buffered-segment.v1.schema.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/schemas/buffered-segment.v1.schema.json b/schemas/buffered-segment.v1.schema.json index 667291d7..53295f78 100644 --- a/schemas/buffered-segment.v1.schema.json +++ b/schemas/buffered-segment.v1.schema.json @@ -11,7 +11,8 @@ "spans": { "$ref": "#/definitions/Spans" } - } + }, + "required": ["spans"] }, "Spans": { "type": "array", From ca67a0d75fce7fce73905bc3409765e4f59dd04d Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Thu, 14 Mar 2024 10:40:16 -0400 Subject: [PATCH 09/14] move segment to top level schema, rename span event --- schemas/buffered-segment.v1.schema.json | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/schemas/buffered-segment.v1.schema.json b/schemas/buffered-segment.v1.schema.json index 53295f78..95210fd9 100644 --- a/schemas/buffered-segment.v1.schema.json +++ b/schemas/buffered-segment.v1.schema.json @@ -1,29 +1,27 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "buffered_segment_message", - "$ref": "#/definitions/Segment", + "type": "object", + "additionalProperties": true, + "properties": { + "spans": { + "$ref": "#/definitions/Spans" + } + }, + "required": [ + "spans" + ], "definitions": { - "Segment": { - "type": "object", - "title": "buffered_segment", - "additionalProperties": true, - "properties": { - "spans": { - "$ref": "#/definitions/Spans" - } - }, - "required": ["spans"] - }, "Spans": { "type": "array", "minItems": 1, "items": { - "$ref": "#/definitions/SpanEvent" + "$ref": "#/definitions/Span" } }, - "SpanEvent": { + "Span": { "type": "object", - "title": "span_event", + "title": "span", "additionalProperties": true, "properties": { "event_id": { @@ -209,7 +207,9 @@ "type": "string" } }, - "required": ["value"] + "required": [ + "value" + ] }, "MetricsSummary": { "type": "array", From 01f188a32cf9e2b11599ebdf792027e0ee4eb260 Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Thu, 14 Mar 2024 14:41:09 +0000 Subject: [PATCH 10/14] style(lint): Auto commit lint changes --- schemas/buffered-segment.v1.schema.json | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/schemas/buffered-segment.v1.schema.json b/schemas/buffered-segment.v1.schema.json index 95210fd9..50369db9 100644 --- a/schemas/buffered-segment.v1.schema.json +++ b/schemas/buffered-segment.v1.schema.json @@ -8,9 +8,7 @@ "$ref": "#/definitions/Spans" } }, - "required": [ - "spans" - ], + "required": ["spans"], "definitions": { "Spans": { "type": "array", @@ -207,9 +205,7 @@ "type": "string" } }, - "required": [ - "value" - ] + "required": ["value"] }, "MetricsSummary": { "type": "array", From fc225f26e774bf7cd7442788fae4999dcc3eab56 Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Thu, 14 Mar 2024 10:44:03 -0400 Subject: [PATCH 11/14] remove span title --- schemas/buffered-segment.v1.schema.json | 1 - 1 file changed, 1 deletion(-) diff --git a/schemas/buffered-segment.v1.schema.json b/schemas/buffered-segment.v1.schema.json index 50369db9..a70094b5 100644 --- a/schemas/buffered-segment.v1.schema.json +++ b/schemas/buffered-segment.v1.schema.json @@ -19,7 +19,6 @@ }, "Span": { "type": "object", - "title": "span", "additionalProperties": true, "properties": { "event_id": { From 4afd6aa3d34e09cdbc8aa3883f78942901078ed6 Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Thu, 14 Mar 2024 10:56:32 -0400 Subject: [PATCH 12/14] plularize topic name, update filenames --- CODEOWNERS | 6 +++--- .../1/basic_buffered_segment.json | 0 ...ment.v1.schema.json => buffered-segments.v1.schema.json} | 2 +- topics/{buffered-segment.yaml => buffered-segments.yaml} | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) rename examples/{buffered-segment => buffered-segments}/1/basic_buffered_segment.json (100%) rename schemas/{buffered-segment.v1.schema.json => buffered-segments.v1.schema.json} (99%) rename topics/{buffered-segment.yaml => buffered-segments.yaml} (72%) diff --git a/CODEOWNERS b/CODEOWNERS index ba42c093..c5cfde98 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -26,7 +26,7 @@ /topics/snuba-metrics-summaries.yaml @getsentry/owners-snuba @getsentry/profiling # Topics produced by Sentry -/topics/buffered-segment.yaml @getsentry/owners-snuba @getsentry/team-starfish +/topics/buffered-segments.yaml @getsentry/owners-snuba @getsentry/team-starfish # DLQs for Snuba topics /topics/snuba-dead-letter-metrics.yaml @getsentry/owners-snuba @@ -53,7 +53,7 @@ /schemas/profile-functions.v1.schema.json @getsentry/owners-snuba @getsentry/profiling /schemas/group-attributes.v1.schema.json @getsentry/owners-snuba @getsentry/issues /schemas/snuba-spans.v1.schema.json @getsentry/owners-snuba @getsentry/profiling -/schemas/buffered-segment.v1.schema.json @getsentry/owners-snuba @getsentry/team-starfish +/schemas/buffered-segments.v1.schema.json @getsentry/owners-snuba @getsentry/team-starfish /schemas/snuba-metrics-summaries.v1.schema.json @getsentry/owners-snuba @getsentry/profiling # Examples @@ -65,7 +65,7 @@ /examples/profile-functions/ @getsentry/owners-snuba @getsentry/profiling /examples/group-attributes/ @getsentry/owners-snuba @getsentry/issues /examples/snuba-spans/ @getsentry/owners-snuba @getsentry/profiling -/examples/buffered-segment/ @getsentry/owners-snuba @getsentry/team-starfish +/examples/buffered-segments/ @getsentry/owners-snuba @getsentry/team-starfish /examples/snuba-metrics-summaries/ @getsentry/owners-snuba @getsentry/profiling # Internal Snuba topics diff --git a/examples/buffered-segment/1/basic_buffered_segment.json b/examples/buffered-segments/1/basic_buffered_segment.json similarity index 100% rename from examples/buffered-segment/1/basic_buffered_segment.json rename to examples/buffered-segments/1/basic_buffered_segment.json diff --git a/schemas/buffered-segment.v1.schema.json b/schemas/buffered-segments.v1.schema.json similarity index 99% rename from schemas/buffered-segment.v1.schema.json rename to schemas/buffered-segments.v1.schema.json index a70094b5..135a4ef6 100644 --- a/schemas/buffered-segment.v1.schema.json +++ b/schemas/buffered-segments.v1.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "buffered_segment_message", + "title": "buffered_segment", "type": "object", "additionalProperties": true, "properties": { diff --git a/topics/buffered-segment.yaml b/topics/buffered-segments.yaml similarity index 72% rename from topics/buffered-segment.yaml rename to topics/buffered-segments.yaml index 2f58f8d4..ef466c2e 100644 --- a/topics/buffered-segment.yaml +++ b/topics/buffered-segments.yaml @@ -1,4 +1,4 @@ -topic: buffered-segment +topic: buffered-segments description: List of buffered spans for a segment services: producers: @@ -9,8 +9,8 @@ schemas: - version: 1 compatibility_mode: none type: json - resource: buffered-segment.v1.schema.json + resource: buffered-segments.v1.schema.json examples: - - buffered-segment/1/ + - buffered-segments/1/ topic_creation_config: compression.type: lz4 From ceb94f2c688edf0d83c1852fb7535031e36c3c2d Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Fri, 15 Mar 2024 17:46:06 -0400 Subject: [PATCH 13/14] update codeowners to visibility --- CODEOWNERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index c5cfde98..e2582e2f 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -26,7 +26,7 @@ /topics/snuba-metrics-summaries.yaml @getsentry/owners-snuba @getsentry/profiling # Topics produced by Sentry -/topics/buffered-segments.yaml @getsentry/owners-snuba @getsentry/team-starfish +/topics/buffered-segments.yaml @getsentry/owners-snuba @getsentry/visibility # DLQs for Snuba topics /topics/snuba-dead-letter-metrics.yaml @getsentry/owners-snuba @@ -53,7 +53,7 @@ /schemas/profile-functions.v1.schema.json @getsentry/owners-snuba @getsentry/profiling /schemas/group-attributes.v1.schema.json @getsentry/owners-snuba @getsentry/issues /schemas/snuba-spans.v1.schema.json @getsentry/owners-snuba @getsentry/profiling -/schemas/buffered-segments.v1.schema.json @getsentry/owners-snuba @getsentry/team-starfish +/schemas/buffered-segments.v1.schema.json @getsentry/owners-snuba @getsentry/visibility /schemas/snuba-metrics-summaries.v1.schema.json @getsentry/owners-snuba @getsentry/profiling # Examples @@ -65,7 +65,7 @@ /examples/profile-functions/ @getsentry/owners-snuba @getsentry/profiling /examples/group-attributes/ @getsentry/owners-snuba @getsentry/issues /examples/snuba-spans/ @getsentry/owners-snuba @getsentry/profiling -/examples/buffered-segments/ @getsentry/owners-snuba @getsentry/team-starfish +/examples/buffered-segments/ @getsentry/owners-snuba @getsentry/visibility /examples/snuba-metrics-summaries/ @getsentry/owners-snuba @getsentry/profiling # Internal Snuba topics From 86dd84c167e2d299110ab50a566bc070a2348979 Mon Sep 17 00:00:00 2001 From: Shruthilaya Jaganathan Date: Fri, 15 Mar 2024 17:49:08 -0400 Subject: [PATCH 14/14] update codeowners to perf --- CODEOWNERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index e2582e2f..7935cf58 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -26,7 +26,7 @@ /topics/snuba-metrics-summaries.yaml @getsentry/owners-snuba @getsentry/profiling # Topics produced by Sentry -/topics/buffered-segments.yaml @getsentry/owners-snuba @getsentry/visibility +/topics/buffered-segments.yaml @getsentry/owners-snuba @getsentry/performance # DLQs for Snuba topics /topics/snuba-dead-letter-metrics.yaml @getsentry/owners-snuba @@ -53,7 +53,7 @@ /schemas/profile-functions.v1.schema.json @getsentry/owners-snuba @getsentry/profiling /schemas/group-attributes.v1.schema.json @getsentry/owners-snuba @getsentry/issues /schemas/snuba-spans.v1.schema.json @getsentry/owners-snuba @getsentry/profiling -/schemas/buffered-segments.v1.schema.json @getsentry/owners-snuba @getsentry/visibility +/schemas/buffered-segments.v1.schema.json @getsentry/owners-snuba @getsentry/performance /schemas/snuba-metrics-summaries.v1.schema.json @getsentry/owners-snuba @getsentry/profiling # Examples @@ -65,7 +65,7 @@ /examples/profile-functions/ @getsentry/owners-snuba @getsentry/profiling /examples/group-attributes/ @getsentry/owners-snuba @getsentry/issues /examples/snuba-spans/ @getsentry/owners-snuba @getsentry/profiling -/examples/buffered-segments/ @getsentry/owners-snuba @getsentry/visibility +/examples/buffered-segments/ @getsentry/owners-snuba @getsentry/performance /examples/snuba-metrics-summaries/ @getsentry/owners-snuba @getsentry/profiling # Internal Snuba topics