Skip to main content

Overview

The Kestrel Operator can receive and store OTEL metrics locally for incident root cause analysis (RCA). When enabled, the Kestrel Operator exposes an OTLP gRPC receiver (default port 4317) that accepts metrics from your OpenTelemetry Collectors.

Configuration

Select OpenTelemetry as the Metrics Source when onboarding your cluster through the Kestrel Dashboard, or configure it directly via Helm values:
operator:
  otel:
    enabled: true
    receiverPort: 4317
  metricsStore:
    retention: "30m"      # Rolling retention window
    maxSeries: 100000     # Max unique metric series
    ringSize: 60          # Data points per series

OTEL Collector Requirements

For metrics to include Kubernetes context (namespace, workload, pod names), your OpenTelemetry Collector must have the k8sattributes processor configured.

Required k8sattributes Processor Configuration

processors:
  k8sattributes:
    auth_type: "serviceAccount"
    passthrough: false
    extract:
      metadata:
        - k8s.namespace.name
        - k8s.pod.name
        - k8s.pod.uid
        - k8s.deployment.name
        - k8s.statefulset.name
        - k8s.daemonset.name
        - k8s.replicaset.name
        - k8s.container.name
        - k8s.node.name
    pod_association:
      - sources:
          - from: resource_attribute
            name: k8s.pod.ip
          - from: resource_attribute
            name: ip
          - from: connection

Exporter Configuration

Configure your OTEL Collector to send metrics to the Kestrel Operator:
exporters:
  otlp/kestrel:
    endpoint: kestrel-operator.kestrel-ai.svc.cluster.local:4317
    tls:
      insecure: true  # In-cluster communication
    # compression: gzip  # Optional, enable for reduced bandwidth

service:
  pipelines:
    metrics:
      receivers: [otlp, prometheus]
      processors: [k8sattributes, batch]
      exporters: [otlp/kestrel]
The Kestrel Operator supports gzip compression. The OpenTelemetry Collector enables gzip by default, but if using the Go SDK directly, enable it via OTEL_EXPORTER_OTLP_COMPRESSION=gzip or the compression: gzip exporter option.

Why k8sattributes is Required

Without the k8sattributes processor:
  • Metrics will only have basic labels (no Kubernetes context)
  • The Kestrel Operator cannot map metrics to workloads
  • Queries by namespace/workload/pod will return no results
  • RCA agents cannot correlate metrics with Kubernetes resources