Skip to main content
The OpenTelemetry integration enables the Kestrel Operator to receive and store OTLP metrics from your OpenTelemetry Collectors. These metrics are used during incident root cause analysis to correlate infrastructure and application performance data with Kubernetes events.

Prerequisites

  • Kestrel Operator deployed in your cluster (see Kubernetes)
  • OpenTelemetry Collector deployed in your cluster with the k8sattributes processor
The k8sattributes processor is required for metrics to include Kubernetes context (namespace, workload, pod names). Without it, the operator cannot map metrics to workloads and RCA agents cannot correlate metrics with Kubernetes resources.

Setup

1

Enable OpenTelemetry in the operator

During cluster onboarding, select OpenTelemetry as the Metrics Source in the Kestrel Dashboard.Alternatively, configure via Helm values:
operator:
  otel:
    enabled: true
    receiverPort: 4317
  metricsStore:
    retention: "30m"
    maxSeries: 100000
    ringSize: 60
2

Configure the k8sattributes processor

Ensure your OTEL Collector has the k8sattributes processor configured:
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
3

Point the collector at the Kestrel Operator

Add a Kestrel exporter to your OTEL Collector config:
exporters:
  otlp/kestrel:
    endpoint: kestrel-operator.kestrel-ai.svc.cluster.local:4317
    tls:
      insecure: true

service:
  pipelines:
    metrics:
      receivers: [otlp, prometheus]
      processors: [k8sattributes, batch]
      exporters: [otlp/kestrel]
The operator supports gzip compression. The OTEL Collector enables gzip by default. If using the Go SDK directly, enable it via OTEL_EXPORTER_OTLP_COMPRESSION=gzip.

How It’s Used

In Workflows

  • Action blocks: Query stored OTEL metrics as workflow steps to check thresholds, compare metric values, or enrich workflow context with performance data

In Incident Response

  • Metrics correlation — during root cause analysis, Kestrel queries stored OTEL metrics for CPU, memory, network, and application-level metrics around the incident timeframe
  • Workload-aware queries — thanks to k8sattributes, metrics are queryable by namespace, deployment, pod, and container

In Cloud AI Copilot

Ask questions that leverage your OpenTelemetry metrics:
  • What was the request latency for the API service in the last 30 minutes?
  • Show me CPU usage trends for the payments namespace
  • Are there any workloads with high error rates right now?

Configuration Reference

KeyTypeDefaultDescription
operator.otel.enabledbooleanfalseEnable OTLP gRPC receiver
operator.otel.receiverPortinteger4317OTLP gRPC receiver port
operator.metricsStore.retentionstring"30m"Rolling retention window
operator.metricsStore.maxSeriesinteger100000Max unique metric series
operator.metricsStore.ringSizeinteger60Data points per series