OpenTelemetry Metrics Release Candidates

OpenTelemetry’s metrics capabilities are now available as release candidates, starting with Java, .NET, and Python! This means that the specification, APIs, SDKs, and other components that author, capture, process, and otherwise interact with metrics now have the full set of OpenTelemetry metrics functionality and are ready for use. These release candidates will be promoted to general availability throughout the next few weeks.

The 1.0 metrics release includes the following:

  • Metrics functionality included in the OpenTelemetry language-specific APIs, which provide language-specific interfaces that can create and manipulate metrics, and associate metadata and attributes to each. These are useful for:
    • Developers of shared libraries that are distributed to end-users, so that these end users can natively use OpenTelemetry to capture metrics from these. For example, gRPC uses these APIs to produce latency, throughput, and error rate metrics for each RPC method on a given service.
    • Developers who create and maintain web services or client applications, so that they can produce custom metrics or interact with existing metrics. For example, an e-commerce company could use the API to track how many purchases are made over time.
  • Metrics functionality included in the OpenTelemetry SDKs for Java, .NET, Python, and JS (coming next week) SDKs, which capture metrics from the APIs and perform some amount of processing. Metrics support for other languages is still in development. These are useful for:
    • Developers of applications that are used by other organizations, like databases, message queues, etc., who will expose metrics over OTLP (or Prometheus) so that their own end users are able to monitor the performance of these apps. These applications could be open or closed source.
    • Developers of applications within a technology organization, who want to capture metrics generated by OpenTelemetry APIs within their applications, either by their own developers or from shared libraries that their applications depend on. These metrics can be exported through OTLP or exported through any other OpenTelemetry exporter.
  • Collector support for metrics includes the Collector’s capability to capture metrics from a rich variety of data sources like host metrics or pre-packaged applications. The Collector also provides the ability to receive metrics from data sources using multiple data protocols such as the native OpenTelemetry protocol (OTLP) and OpenMetrics compliant protocols such as Prometheus. Also supported is configuration-driven metric processing and native OTLP, Prometheus and custom exporters to send observability metrics to on-cloud and on-premises monitoring systems of your choice. This feature-set is useful for:
    • Anyone who wants to capture metrics from their hosts (Linux VMs, Windows, VMs, Kubernetes, etc.) or pre-packaged applications (databases, message queues, etc.).
    • Anyone who wants to capture metrics from existing sources like OTLP (from OpenTelemetry SDKs, pre-packaged applications, etc.), Prometheus, or others.
    • Anyone who wants to process / modify metrics and metric metadata captured from these sources.
    • Anyone who wants to convert metrics from one format to another. For example, the Collector can capture metrics from a mix of OTLP and Prometheus sources, and then send all of these to a single destination using OTLP (with the standard OpenTelemetry semantic conventions), Prometheus, or any other exporter.
  • Full OpenTelemetry Protocol (OTLP) support for efficiently serializing and transmitting metrics between systems.
  • A metrics section of the specification, which defines different types of metrics, their shapes, how to process them, and semantic conventions. This is primarily used by OpenTelemetry contributors but also provides guidance to OpenTelemetry users who are authoring metrics or metadata.

All of this functionality is additive to OpenTelemetry’s existing tracing support, and both signal types share the same metadata and semantic conventions. As of this announcement, the following languages have issued metrics release candidates:

  • Java
  • .NET
  • Python

The RC release for JS is planned for next week, and more languages will be issuing metrics release candidates throughout the coming months. Each of these releases will be followed by general availability after we receive feedback from users.

Getting Started

If you’re already using a mix of the OpenTelemetry APIs, SDKs, language agents, and Collector, then you can access the release candidate metrics functionality by updating your OpenTelemetry artifacts to their latest versions. We’re currently updating the official OpenTelemetry documentation for each artifact’s metrics capabilities. Examples and supplementary documentation are also being added to each artifact’s corresponding GitHub repository.

What’s Next for OpenTelemetry

Distributed traces and metrics were the two halves of OpenTelemetry’s core promise when we announced it at KubeCon EU in 2019. With the general availability of metrics, we have produced the capabilities that we originally set out to create, meaning that we can shift our focus to further investing into the robustness and ease of use of each component, the number of data sources that OpenTelemetry can capture telemetry from (either through the OpenTelemetry APIs, OTLP, or otherwise), and new capabilities and signal types.

Logging is the most visible release on the horizon, and we’re running full speed ahead on this effort. Expect to hear a lot more about our progress on logging throughout the year (logs already have a stable data model and OTLP support), and anyone interested in this area is welcome to join the weekly logging SIG calls. Beyond logging, major new projects include formalizing and implementing client instrumentation and investigations into eBPF. With metrics complete, we may also turn our attention to more signal types.