OpenTelemetry moves Python and Swift Tracing API / SDKs to version 1.0
OpenTelemetry has released version 1.0 of the Python and Swift Distributed Trace API and SDK. They both include support for the OpenTelemetry API, SDKs, exporters to common telemetry formats, and starter documents. The Python version is considered stable while the Swift version is still in beta.
APIs for each release include the Tracing API, Baggage API, Context API, and Propagators API. A trace represents a set of events, generated from a single operation (such as clicking a button on a website), grouped between the different components of the application. In OpenTelemetry, a piece of luggage represents a name / value pair. It is intended for indexing events in a service with details provided by a previous service in the same transaction. For example, a provider can include a context on the API user responsible for the request.
A context is an immutable mechanism for propagating values ââacross API boundaries. Processes that cross borders must access their data being processed using the same shared context object. The report is sent to the next process using a propagator. These are objects that use the context to read and write data for each cross-process problem, like traces and baggage.
The SDK includes controls for sampling, processing, and exporting. Supported trace exporters include Jaeger, Zipkin, DataDog, and OpenTelemetry Protocol (OTLP). Jaeger Exporter for Python supports sending traces using the compact Thrift protocol over UDP. For configurations where it is not possible to deploy the Jaeger agent alongside the application, the collector can instead be configured to use Thrift over HTTP. The Swift SDK also has metrics exporters for Prometheus, Datadog, and OpenTelemetry Collector.
OpenTelemetry Collector can be used as a vendor independent implementation to read and write telemetry data. It supports several open source observability data formats such as Jaeger, Prometheus, and Fluent Bit.
OpenTracing and OpenCensus should be replaced by OpenTelemetry. OpenTracing users will be able to use OpenTracing Shim to migrate once the specification is changed to stable. There is currently no shim for OpenCensus users.
The vision of the OpenTelemetry project is to create a consistent standard for the three pillars of observability: distributed tracing, metrics and logs. With these versions, Python and Swift support distributed tracing. The roadmap for the next few months includes the creation of API and SDK metrics and logs.
The Swift version is still considered to be in beta. According to Nacho Bonafonte, senior software engineer at Datadog, “Current APIs can be considered stable, but not all parts have been subjected to rigorous beta testing.”
There are a few Swift-only components in the build. These include URLSession instrumentation to capture network traffic, a ResourceExtension SDK to report system information, and experimental integration with SwiftMetrics.
SwiftMetricsShim integrates with native Swift Metrics API and redirects data to OpenTelemetry API functions:
let meter: Meter = // ... Your existing code to create a meter let metrics = OpenTelemetrySwiftMetrics(meter: meter) MetricsSystem.bootstrap(metrics)
More details can be found on the respective Python and Swift channels on the CNCF Slack instance. Both projects are also looking for support on GitHub.