Steve Flanders
OTel 2025: The Latest Milestones and What’s Next
Steve Flanders
Engineering Leader, Splunk
https://sflanders.net
Founding member of OpenCensus and OpenTelemetry projects
15+ years of monitoring and observability experience
Author of the book: Mastering OpenTelemetry and Observability!
What is OpenTelemetry?
DATA COLLECTION
Single binary multiple form factors�to receive, process, and export data
SPECIFICATION
API (conventions + definition), SDK (API + configuration), and�Data (data formats, protocols, and semantic conventions)
INSTRUMENTATION LIBRARIES
Single library per language
OpenTelemetry is an Observability framework and toolkit designed to create and manage telemetry data such as traces, metrics, and logs. OpenTelemetry is vendor- and tool-agnostic, meaning that it can be used with a broad variety of Observability platforms, including open source tools like Jaeger and Prometheus, as well as commercial offerings. - https://opentelemetry.io/docs/what-is-opentelemetry/
Latest Milestones
Latest Milestones
Semantic conventions normalize data.
HTTP: http.method, http.status_code
Database: db.instance, db.statement
Messaging: messaging.system
FaaS: faas.trigger
Resources capture environment metadata.
Application: Service, Telemetry
Compute Unit: Container, FaaS, Process
Compute Instance: Host
Environment: OS, Cloud, Deployment
Application
Database
Otel Library
https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/README.md�https://github.com/open-telemetry/opentelemetry-specification/tree/master/specification/resource/semantic_conventions
Specification = Data Portability
OTel Weaver
# Checking the Official OTel Registry
weaver registry check -r registry-path
# Generating Markdown documentation
weaver registry update-markdown -r registry-path --target=markdown
# Generating code for instrumentation helpers
weaver registry generate -r registry-path -t templates-root-dir go
# Tracking changes and schema evolution
weaver registry diff -r current-version-registry-path --baseline-registry previous-version-registry-path
# Live instrumentation checks and coverage
weaver registry live-check --registry registry-path
# Simulating telemetry
weaver registry emit --registry registry-path --endpoint http://localhost:4317
Learn more: https://www.youtube.com/watch?v=BJt6LyJEYD0
Semantic Conventions
Latest Milestones
What’s Next?
Latest Milestones
OTel Injector
# Supported languages today: Java, Node.JS, .NET
# System wide
echo /usr/lib/opentelemetry/libotelinject.so >> /etc/ld.so.preload
# Systemd services only
mkdir -p /usr/lib/systemd/system.conf.d/ && cp /usr/lib/opentelemetry/examples/systemd/00-otelinject-instrumentation.conf /usr/lib/systemd/system.conf.d/
Latest Milestones
OTelCol Extension Layer
receivers:
telemetryapi:
exporters:
otlphttp/external:
endpoint: 'external-collector:4318'
processors:
batch:
decouple:
service:
pipelines:
traces:
receivers: [telemetryapi]
processors: [batch, decouple]
exporters: [otlphttp/external]
logs:
receivers: [telemetryapi]
processors: [batch, decouple]
exporters: [otlphttp/external]
Latest Milestones
OTTL (Collector DSL)
OTel Transform Language (OTTL) is a domain-specific language (DSL) to define primarily processor configurations in the Collector. It’s an alternative to YAML and provides more flexibility.
Before
attributes:
include:
attributes:
- key: http.method
value: "POST"
actions:
- key: http.status_code
action: insert
value: 200
After
transform:
error_mode: ignore
metric_statements:
- context: metric
statements:
- set(attributes["http.status_code"], 200) where attributes["http.method"] == "POST"
OTTL now with context inference
Before
metric_statements:
- context: resource
statements:
- keep_keys(attributes, ["host.name"])
- context: metric
statements:
- set(description, "Sum") where type == "Sum"
- convert_sum_to_gauge() where name == "system.processes.count"
- context: datapoint
statements:
- limit(attributes, 100, ["host.name"])
After
metric_statements:
- keep_keys(resource.attributes, ["host.name"])
- set(metric.description, "Sum") where metric.type == "Sum"
- convert_sum_to_gauge() where metric.name == "system.processes.count"
- limit(datapoint.attributes, 100, ["host.name"])
Latest Milestones
OTel Protocol + Apache Arrow
Phase 1: Traffic reduction (done)
Phase 2: End-to-end OTAP pipeline
Latest Milestones
GoLang Auto-Instrumentation
https://opentelemetry.io/blog/2025/go-compile-time-instrumentation/
What’s Next?
Roadmap (https://opentelemetry.io/community/roadmap/)
�OTel is on the path to CNCF graduation! Be sure to show your support by commenting on the ticket and consider adding your company to the Adopters page.
Thank You!
See you at the OTel table
in the Solutions Showcase!