schema_url provides a versioned contract that helps producers and consumers evolve independently without breaking dashboards, alerts, or downstream tools.
Producers are the application SDKs that generate telemetry (traces, metrics, logs) and send it downstream. Telemetry items include attributes such as http.status_code and service.name defined by OTel semantic conventions. When telemetry is emitted without a schema reference (schema_url), it’s common — but it leaves no explicit, machine-readable way to indicate how many attributes exist, when an attribute name changes, or how attributes map across versions.
Over time attribute names and meanings can evolve. For example, http.status_code might be renamed to http.response.status_code to clarify that the value refers specifically to the response. Producers can include a schema_url so the data becomes self-describing and version-aware.
Here is a typical span payload that includes the newer attribute name and a schema reference at the resource level:

https://opentelemetry.io/schemas/1.1.0. Both the attribute name and the schema reference evolved, making the data self-describing and version-aware.
Producers and consumers evolve at different speeds: attribute names change, new attributes are added, and old ones are renamed. Without a declared contract, dashboards and alerts can break when they expect an attribute name that no longer exists. Schemas provide that contract — they declare names and meanings so producers can evolve independently while consumers continue to read and interpret the data.

http.status_code, it will not find that attribute and the visualization may appear broken (greyed out). To avoid a wholesale coordinated change across many producers and consumers, introduce a schema file that declares how names changed. For example, a 1.1.0 schema might express this rename:
Schemas decouple producers and consumers by providing a versioned contract for attribute names and meanings. This enables safe, incremental evolution of telemetry without breaking downstream systems.
If you do not adopt schemas or a mapping strategy, dashboards, alerts, and queries that rely on specific attribute names are at risk of breaking when those names change. Consider adding
schema_url to your producers and validating schema-aware mappings in pipelines.| Benefit | What it solves | Example |
|---|---|---|
| Versioned contract | Prevents breaking changes when attributes are renamed or restructured | Map http.response.status_code to http.status_code via schema |
| Automatic translation | Enables pipelines to transform attributes for legacy consumers | Pipeline maps new attribute names to old queries |
| Clear evolution history | Documents when and why changes occurred | versions section in schema YAML records renames and additions |
| Better interoperability | Helps multiple teams and tools read telemetry consistently | SDKs, observability tools, and dashboards align on semantics |
- Add
schema_urlto your producers (SDKs or instrumentation). - Publish or reference a schema file that records renames, additions, and breaking changes.
- Update pipelines (collectors, processors) to consult the schema and perform attribute mapping where necessary.
- Gradually update dashboards and consumers to use the newer attribute names; rely on schema mappings during the transition.
- OpenTelemetry Schemas: https://opentelemetry.io/docs/reference/specification/schemas/
- OpenTelemetry Semantic Conventions: https://opentelemetry.io/docs/reference/specs/semantic_conventions/
- OpenTelemetry Collector: https://opentelemetry.io/docs/collector/