Span metrics allow you to extend the default metrics that are collected by tracing and track custom performance data and debugging information within your application's traces. There are two main approaches to instrumenting metrics:
Adding Metrics to Existing SpansYou can enhance existing spans with custom metrics by adding data. This is useful when you want to augment automatic instrumentation or add contextual data to spans you've already created.
Copied
span = sentry_sdk.get_current_span()
if span:
span.set_data("database.rows_affected", 42)
span.set_data("cache.hit_rate", 0.85)
span.set_data("memory.heap_used", 1024000)
span.set_data("queue.length", 15)
span.set_data("processing.duration_ms", 127)
Best Practices for Span Data
When adding metrics as span data:
category.metric_name
)For more detailed operations, tasks, or process tracking, you can create custom dedicated spans that focus on specific metrics or attributes that you want to track. This approach provides better discoverability and more precise span configurations, however it can also create more noise in your trace waterfall.
Copied
with sentry_sdk.start_span(
op="db.metrics",
name="Database Query Metrics"
) as span:
span.set_data("db.query_type", "SELECT")
span.set_data("db.table", "users")
span.set_data("db.execution_time_ms", 45)
span.set_data("db.rows_returned", 100)
span.set_data("db.connection_pool_size", 5)
pass
For detailed examples of how to implement span metrics in common scenarios, see our Span Metrics Examples guide.
Adding Metrics to All SpansTo consistently add metrics across all spans in your application, you can use the before_send_transaction
callback:
Copied
import sentry_sdk
from sentry_sdk.types import Event, Hint
def before_send_transaction(event: Event, hint: Hint) -> Event | None:
if "trace" in event.get("contexts", {}):
if "data" not in event["contexts"]["trace"]:
event["contexts"]["trace"]["data"] = {}
event["contexts"]["trace"]["data"].update({
"app.version": "1.2.3",
"environment.region": "us-west-2"
})
for span in event.get("spans", []):
if "data" not in span:
span["data"] = {}
span["data"].update({
"app.component_version": "2.0.0",
"app.deployment_stage": "production"
})
return event
sentry_sdk.init(
before_send_transaction=before_send_transaction
)
For detailed examples of how to implement span metrics in common scenarios, see our Span Metrics Examples guide.
Help improve this contentRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4