profiling/v0

Usage

This interface can be used by an application able to ingest profiling data to expose the ingestion endpoint(s) to any application able to push into them.

The reference implementation of this interface (v0) can be found at this address.

Direction

This interface implements a provider/requirer pattern. As is customary, the provider is the server (the profiling data ingester) and the requirer is the profiling data source.

The interface is unidirectional: the provider doesn’t need any information from the requirer. The provider shares any and all supported ingestion endpoints.

        flowchart TD
    Provider -- ProfilingEndpoints --> Requirer
    

Behavior

Provider

  • Must publish all active ingestion endpoints.

  • Must accept data on those endpoints

  • If ingress is available, the provider must advertise its ingressed hostname, otherwise fall back to using its own cluster-internal fqdn.

  • Must pass insecure=True if the ingestion endpoints are running with insecure connection.

Relation Data

[Pydantic Schema]

Example

A yaml/json example of a valid databag state (for the whole relation), in absence of an ingress integration for the provider:

provider:
  app: {
         otlp_grpc_endpoint_url: "my.fqdn.cluster.local:1234",
         insecure: False,
  }
  unit: {}
requirer:
  app: {}
  unit: {}

If the provider is ingressed:

provider:
  app: {
         # `10.0.0.1` is the ingress hostname of the provider charm
         otlp_grpc_endpoint_url: "10.0.0.1:1234",
         insecure: False,
  }
  unit: {}
requirer:
  app: {}
  unit: {}