- Trace Metadata: Information that applies to the entire lifecycle of a request or a complete operation.
- Span Attributes: Information specific to a particular unit of work or step within a trace.
Trace Metadata
Trace metadata provides context for the entire trace. It’s ideal for information that remains constant throughout the execution of a traced operation, such as:- User identifiers (
user_id) - Session or conversation identifiers (
thread_id) - see Tracking Conversations - Application version (
app_version) - Environment (
env: "production") - A/B testing flags or variant names
- Labels for filtering and categorization
Setting Trace Metadata
Inside any function decorated with@langwatch.trace(), use langwatch.get_current_trace().update() to attach metadata:
.update() multiple times throughout your function as more context becomes available:
Adding Labels to Traces
Labels are a special type of trace metadata that allows you to organize, filter, and categorize your traces in the LangWatch dashboard:Span Attributes
Span attributes provide context for a specific operation or unit of work within a trace. They are useful for details that are relevant only to that particular step. Examples include:- For an LLM call span:
model_name,prompt_template_version,temperature - For a tool call span:
tool_name,api_endpoint, specific input parameters - For a RAG span:
retrieved_document_ids,chunk_count - Custom business logic flags or intermediate results specific to that span.
Setting Span Attributes
Uselangwatch.get_current_span().update() or the span context manager to set attributes on a specific span:
Key Differences: Trace Metadata vs. Span Attributes
| Feature | Trace Metadata | Span Attributes |
|---|---|---|
| Scope | Entire trace (e.g., a whole user request) | Specific span (e.g., one LLM call, one tool use) |
| Granularity | Coarse-grained, applies to the overall operation | Fine-grained, applies to a specific part of the operation |
| Purpose | General context for the entire operation | Specific details about a particular step or action |
| Examples | user_id, thread_id, app_version | model_name, tool_parameters, retrieved_chunk_id |
| SDK Access | langwatch.get_current_trace().update(metadata={...}) | span.update(key=value, ...) or span.set_attributes({...}) |
- Use Trace Metadata for information that you’d want to associate with every single span within that trace, or that defines the overarching context of the request (e.g., who initiated it, what version of the service is running).
- Use Span Attributes for details specific to the execution of that particular span. This helps in understanding the parameters, behavior, and outcome of individual components within your trace.
Viewing in LangWatch
All captured trace metadata and span attributes will be visible in the LangWatch UI.- Trace Metadata is typically displayed in the trace details view, providing an overview of the entire operation.
- Span Attributes are shown when you inspect individual spans within a trace.
- Filter and search for traces and spans based on specific metadata or attribute values.
- Analyze performance by correlating metrics with different metadata/attributes (e.g., comparing latencies for different
user_ids ormodel_names). - Debug issues by quickly understanding the context and parameters of a failed or slow operation.