---
title: Charmhub | tracing interface
description: Interfaces describe the relation between two charms. This interface shows
  opinionated, standardized interface specifications for charm relations.
url: https://charmhub.io/integrations/tracing
---

# tracing

Version 2, published

## Usage

This relation interface describes the expected behavior of any charm claiming to be able to provide or consume a tempo-compliant tracing server.

## Direction

Tracing is done in a push-based fashion.
The receiving endpoint of the tracing backend, also referred to as a *receiver*, can support a number of different protocols, such as [otlp-grpc](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md

## Behavior

### Requirer

* Is expected to publish a list of one or more protocols it wishes to use to send traces.
* Is expected to await receiving from the provider a list of endpoints.
* Is expected to push traces to one or more of the provided endpoints using the corresponding encoding/protocol.
* Is expected to handle cases where none of the requested protocols is supported.

### Provider

* Is expected to publish the url at which the server is reachable. (This will happen in any case and doubles down as an acknowledgement of receipt)
* Is expected to comply as good as possible with the requested protocols, activating the corresponding receivers.
* Is expected to run a server accepting trace submissions on **all** the supported **and** requested tracing protocols.
* Is expected to publish, for each protocol it accepts, the port at which the server is listening along with the name of the supported protocol.

## Relation Data

### Requirer

The requirer publishes a list of protocols it needs.
For examples, see below.

[[Pydantic model]](https://github.com/canonical/charmlibs/blob/main/interfaces/tracing/interface/vv2/schema.py)

#### Example

### Provider

The provider exposes via its application databag a list of `receivers`.
A `receiver` consists of a `url`, a `protocol` object that consists of `name`, which is the telemetry protocol that the `url` accepts, and the `type` of the protocol used, such as `http` or `grpc`.
The full list of supported trace protocols can change. For a full list see https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver

[[Pydantic model]](https://github.com/canonical/charmlibs/blob/main/interfaces/tracing/interface/vv2/schema.py)

#### Example

## Charms implementing this interface

### Providers

* [tempo-coordinator-k8s](https://charmhub.io/tempo-coordinator-k8s)

### Requirers

* [pyroscope-coordinator-k8s](https://charmhub.io/pyroscope-coordinator-k8s)

## Other charms using this interface

### Providers

* [grafana-agent-k8s](https://charmhub.io/grafana-agent-k8s)
* [tempo-coordinator-k8s](https://charmhub.io/tempo-coordinator-k8s)
* [opentelemetry-collector-k8s](https://charmhub.io/opentelemetry-collector-k8s)
* [opentelemetry-collector](https://charmhub.io/opentelemetry-collector)

### Requirers

* [kafka](https://charmhub.io/kafka)
* [kafka-k8s](https://charmhub.io/kafka-k8s)
* [mysql](https://charmhub.io/mysql)
* [traefik-k8s](https://charmhub.io/traefik-k8s)
* [mysql-k8s](https://charmhub.io/mysql-k8s)
* [vault-k8s](https://charmhub.io/vault-k8s)
* [parca-k8s](https://charmhub.io/parca-k8s)
* [mysql-router-k8s](https://charmhub.io/mysql-router-k8s)
* [postgresql](https://charmhub.io/postgresql)
* [pgbouncer](https://charmhub.io/pgbouncer)
* [prometheus-k8s](https://charmhub.io/prometheus-k8s)
* [pgbouncer-k8s](https://charmhub.io/pgbouncer-k8s)
* [grafana-k8s](https://charmhub.io/grafana-k8s)
* [postgresql-k8s](https://charmhub.io/postgresql-k8s)
* [loki-k8s](https://charmhub.io/loki-k8s)
* [alertmanager-k8s](https://charmhub.io/alertmanager-k8s)
* [openfga-k8s](https://charmhub.io/openfga-k8s)
* [anbox-cloud-dashboard](https://charmhub.io/anbox-cloud-dashboard)
* [kratos](https://charmhub.io/kratos)
* [anbox-stream-gateway](https://charmhub.io/anbox-stream-gateway)
* [ams](https://charmhub.io/ams)
* [aar](https://charmhub.io/aar)
* [ams-lxd](https://charmhub.io/ams-lxd)
* [istio-k8s](https://charmhub.io/istio-k8s)
* [istio-ingress-k8s](https://charmhub.io/istio-ingress-k8s)
* [hydra](https://charmhub.io/hydra)
* [grafana-agent-k8s](https://charmhub.io/grafana-agent-k8s)
* [anbox-stream-agent](https://charmhub.io/anbox-stream-agent)
* [identity-platform-login-ui-operator](https://charmhub.io/identity-platform-login-ui-operator)
* [mimir-coordinator-k8s](https://charmhub.io/mimir-coordinator-k8s)
* [blackbox-exporter-k8s](https://charmhub.io/blackbox-exporter-k8s)
* [tempo-coordinator-k8s](https://charmhub.io/tempo-coordinator-k8s)
* [istio-beacon-k8s](https://charmhub.io/istio-beacon-k8s)
* [bingo](https://charmhub.io/bingo)
* [loki-coordinator-k8s](https://charmhub.io/loki-coordinator-k8s)
* [canonical-livepatch-server-k8s](https://charmhub.io/canonical-livepatch-server-k8s)
* [self-signed-certificates](https://charmhub.io/self-signed-certificates)
* [catalogue-k8s](https://charmhub.io/catalogue-k8s)
* [manual-tls-certificates](https://charmhub.io/manual-tls-certificates)
* [cos-configuration-k8s](https://charmhub.io/cos-configuration-k8s)
* [opentelemetry-collector-k8s](https://charmhub.io/opentelemetry-collector-k8s)
* [opentelemetry-collector](https://charmhub.io/opentelemetry-collector)
