Backends

Mermin exports Flow Traces via the OpenTelemetry Protocol (OTLP), which means it works with any OTLP-enabled observability backend or collector.

What You Need

To receive Flow Traces from Mermin, you need one of:

  1. OTLP-Enabled Collector: OpenTelemetry Collector that receives OTLP and forwards to your backend(s)

  2. OTLP Data Platform: An observability platform with native OTLP ingestion

The OpenTelemetry Collector is the most flexible option:

  • Receives OTLP from Mermin via gRPC or HTTP

  • Processes, batches, and transforms telemetry data

  • Exports to multiple backends simultaneously

  • Provides buffering and retry logic

Example Configuration: See docs/deployment/examples/local_otel/ for a complete setup with OpenTelemetry Collector, including Mermin configuration and collector pipeline.

Basic Mermin Configuration

export "traces" {
  otlp = {
    endpoint = "http://otel-collector:4317"  # Collector's OTLP gRPC endpoint
    protocol = "grpc"
  }
}

OTLP-Compatible Data Platforms

Mermin Flow Traces work with any platform that supports OTLP trace ingestion:

Elastic Stack

Elasticsearch with APM Server or OpenTelemetry Collector can ingest OTLP traces.

Use Case: Full-text search, complex aggregations, APM integration, machine learning

How to Connect:

  • Point Mermin → OpenTelemetry Collector → Elasticsearch exporter

  • Or point Mermin → Elastic APM Server (OTLP endpoint)

Example: See docs/deployment/examples/netobserv_os_simple_svc/ for OpenSearch (Elastic-compatible) deployment

OpenSearch

Open-source alternative to Elasticsearch with native OTLP support via OpenTelemetry Collector.

Use Case: Open-source search and analytics, cost-effective storage

Examples:

Grafana Tempo

Distributed tracing backend with native OTLP support and TraceQL query language.

Use Case: Scalable trace storage, cost-effective long-term retention

How to Connect: Point Mermin directly to Tempo's OTLP endpoint (gRPC on port 4317)

export "traces" {
  otlp = {
    endpoint = "http://tempo:4317"
    protocol = "grpc"
  }
}

Example: Coming soon

Jaeger

Distributed tracing platform with native OTLP receiver.

Use Case: Service maps, trace visualization, root cause analysis

How to Connect: Point Mermin to Jaeger's OTLP collector endpoint

export "traces" {
  otlp = {
    endpoint = "http://jaeger-collector:4317"
    protocol = "grpc"
  }
}

Example: Coming soon

Grafana Cloud, Datadog, New Relic, Honeycomb, etc.

Most commercial observability platforms now support OTLP ingestion.

How to Connect:

  1. Obtain your platform's OTLP endpoint URL

  2. Configure authentication (usually API key or bearer token)

  3. Point Mermin to the endpoint with auth

export "traces" {
  otlp = {
    endpoint = "https://otlp.provider.com:4317"
    protocol = "grpc"
    headers = {
      "authorization" = "Bearer ${API_TOKEN}"
    }
  }
}

Examples: Coming soon

Flow Trace Data Model

Each Flow Trace is an OpenTelemetry span containing:

Span Attributes:

  • Network 5-tuple: source/dest IPs, ports, protocol

  • Bidirectional counters: bytes sent/received, packets sent/received

  • TCP state: flags (SYN, FIN, RST), connection state

  • Kubernetes metadata: pod, service, deployment, namespace, labels

  • Community ID for flow correlation

Resource Attributes:

  • Kubernetes cluster name

  • Node name

  • Mermin version

This standardized format allows querying Flow Traces using native backend query languages (TraceQL, KQL, Lucene, etc.).

Testing with Stdout

For local development and testing, you can output Flow Traces to stdout instead of OTLP:

export "traces" {
  stdout = "text_indent"  # Human-readable format
}

View traces in Mermin logs:

kubectl logs -f -l app.kubernetes.io/name=mermin

Next Steps

  1. Choose your backend from the options above

  2. Review example configurations in examples/

  3. Configure OTLP export in your Mermin deployment - see OTLP Exporter Configuration

  4. Set up authentication and TLS for production - see OTLP Exporter Configuration

  5. Create dashboards to visualize Flow Traces in your chosen platform

Last updated