Cloud Native 7 min read

How UTF‑8 Support Is Uniting Prometheus and OpenTelemetry for Seamless Cloud‑Native Observability

Prometheus and OpenTelemetry have resolved long‑standing compatibility gaps—especially with UTF‑8 support in Prometheus 3.0—enabling smoother metric, trace, and log integration on Kubernetes and paving the way for a unified, friction‑free observability stack.

DevOps Coach
DevOps Coach
DevOps Coach
How UTF‑8 Support Is Uniting Prometheus and OpenTelemetry for Seamless Cloud‑Native Observability

Background

Prometheus is the de‑facto standard for metric collection in Kubernetes. OpenTelemetry provides distributed tracing, logs and can export metrics. Historically the two projects used incompatible naming conventions and did not support Unicode characters, making it difficult to align OpenTelemetry semantic conventions with Prometheus.

Recent Compatibility Improvements

Discussions at FOSDEM 2026 and OTel Unplugged EU highlighted three major changes introduced in Prometheus 3.0 (released November 2024):

Full UTF‑8 support in metric names, label keys, label values and annotations, allowing dots, dashes and non‑alphanumeric symbols.

Native histogram implementation (Native Histograms) that matches the OpenTelemetry histogram data model.

Built‑in OTLP ingestion endpoint, so an OpenTelemetry Collector can push metrics directly to Prometheus without a side‑car exporter.

How to Use UTF‑8 and OTLP in Prometheus 3.0

After upgrading to Prometheus 3.0, the following configuration enables the new features:

# prometheus.yml
global:
  scrape_interval: 15s

# Enable the OTLP receiver (requires the otlp_remote_write flag)
remote_write:
  - url: "http://localhost:4318/v1/metrics"
    # optional: set the content type to protobuf
    write_relabel_configs:
      - source_labels: [__name__]
        regex: ".*"
        action: keep

Example of a metric with Unicode characters:

# HELP 请求总数_total Total number of requests (Unicode example)
# TYPE 请求总数_total counter
请求总数_total{服务="用户服务"} 42

OpenTelemetry Collector configuration to export to Prometheus:

# otel-collector-config.yaml
receivers:
  otlp:
    protocols:
      grpc:
      http:

exporters:
  prometheusremotewrite:
    endpoint: "http://localhost:9090/api/v1/write"

service:
  pipelines:
    metrics:
      receivers: [otlp]
      exporters: [prometheusremotewrite]

Integration Modes

With the OTLP receiver, users can choose a hybrid model:

Pull‑based : Prometheus continues to scrape existing /metrics endpoints.

Push‑based : The OpenTelemetry Collector pushes metrics to Prometheus via the OTLP remote‑write endpoint.

Both modes can be used simultaneously, allowing gradual migration of existing instrumentation.

Impact on Observability Stack

The alignment of naming conventions eliminates the need for ad‑hoc label translation scripts. Native histograms provide one‑to‑one mapping between OpenTelemetry histogram data points and Prometheus queries such as rate(metric_bucket[5m]). The combined stack now supports a single source of truth for metrics, traces and logs.

Community Outlook

Grafana Labs community director Richard “RichiH” Hartmann noted ongoing collaboration between the Prometheus and OpenTelemetry maintainers. Future work includes sharing exporters, adopting Prometheus‑validated semantic conventions inside OpenTelemetry, and further reducing configuration friction.

cloud-nativeobservabilityOpenTelemetryPrometheus
DevOps Coach
Written by

DevOps Coach

Master DevOps precisely and progressively.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.