---
title: "Run the Alloy OpenTelemetry Engine with the OpenTelemetry Collector Helm chart | Grafana Alloy documentation"
description: "Learn how to run the Alloy OpenTelemetry Engine with the OpenTelemetry Collector Helm chart"
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

# Run the Alloy OpenTelemetry Engine with the OpenTelemetry Collector Helm chart

Use the upstream [OpenTelemetry Collector Helm chart](https://github.com/open-telemetry/opentelemetry-helm-charts/tree/main/charts/opentelemetry-collector) to run the OTel Engine on Kubernetes. The chart deploys the Alloy image with the standard upstream chart values, so you configure it the same way you configure any OpenTelemetry Collector deployment.

> **EXPERIMENTAL**: OTel Engine is an [experimental](/docs/release-life-cycle/) feature. Experimental features are subject to frequent breaking changes, and may be removed with no equivalent replacement.
> 
> To maintain full compatibility of the OTel Engine with the upstream OpenTelemetry Collector and expose a compatible command line interface, the OTel Engine isn’t hidden behind a stability [flag](/docs/alloy/latest/reference/cli/run/).
> 
> Make sure that you understand the risks involved before using an experimental feature in your production environments.

## Before you begin

Make sure you have the following:

- [Helm](https://helm.sh) installed on your computer
- A Kubernetes cluster that you can use for Alloy
- A local Kubernetes context that points at the cluster

## Run the OTel Engine

1. Add the OpenTelemetry Collector Helm chart repository:
   
   shell ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```shell
   helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
   helm repo update
   ```
2. Create a `values.yaml` file. The following example runs the configuration from [Send data to Grafana Cloud](../cli/#send-data-to-grafana-cloud) in a Kubernetes Deployment:
   
   YAML ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```yaml
   image:
     repository: grafana/alloy
     tag: <ALLOY_VERSION>
   
   command:
     name: "bin/otelcol"
   
   mode: deployment
   
   ports:
     metrics:
       enabled: true
   
   config:
     extensions:
       basicauth/my_auth:
         client_auth:
           username: "<USERNAME>"
           password: "<PASSWORD>"
   
     receivers:
       otlp:
         protocols:
           grpc: {}
           http: {}
       jaeger: null
       zipkin: null
       prometheus: null
   
     processors:
       batch:
         timeout: 1s
         send_batch_size: 512
   
     exporters:
       debug: null
       otlp_http/my_backend:
         endpoint: <URL>
         auth:
           authenticator: basicauth/my_auth
   
     service:
       telemetry:
         metrics:
           readers:
             - pull:
                 exporter:
                   prometheus:
                     host: 0.0.0.0
                     port: 8888
       extensions: [basicauth/my_auth, health_check]
       pipelines:
         logs: null
         metrics: null
         traces:
           receivers: [otlp]
           processors: [batch]
           exporters: [otlp_http/my_backend]
   ```
   
   Replace the following:
   
   - *`<ALLOY_VERSION>`* : The Alloy release you want to run, for example v1.20.1.
   - *`<USERNAME>`* : Your Grafana Cloud instance ID.
   - *`<PASSWORD>`* : Your Grafana Cloud API token.
   - *`<URL>`* : Your Grafana Cloud OTLP endpoint URL.
   
   For more information about where to find the Grafana Cloud values, refer to [Send data using OpenTelemetry Protocol](/docs/grafana-cloud/send-data/otlp/send-data-otlp/).
   
   The chart runs `/<COMMAND_NAME>` as the container command, so `bin/otelcol` resolves to `/bin/otelcol`. This path is a compatibility entrypoint in the Alloy image that runs `alloy otel`. Without this setting, the chart runs the image’s default entrypoint, which starts the Default Engine.
   
   The example sets the chart defaults it doesn’t need to `null` and uses the chart’s own `health_check` extension without redefining it. Refer to the [Helm chart documentation](https://opentelemetry.io/docs/platforms/kubernetes/helm/collector/#configuration) for how `config` combines with the chart’s defaults.
   
   The example also sets the metrics endpoint host to `0.0.0.0` so it listens on all interfaces inside the Pod. The chart’s default binds the Pod IP, which other Pods in the cluster can already reach. Set `0.0.0.0` when you also want to reach the endpoint on `127.0.0.1` inside the Pod, for example from a sidecar container. Set `ports.metrics.enabled` to `true` to expose port `8888` on the Pod and the Service.
3. Install the chart:
   
   shell ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```shell
   helm install <RELEASE_NAME> open-telemetry/opentelemetry-collector --values values.yaml
   ```
   
   Replace *`<RELEASE_NAME>`* with a name for your Helm release.
4. Verify that the Pod runs:
   
   shell ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy
   
   ```shell
   kubectl get pods
   ```
   
   The Pod reaches `Running` status once the OTel Engine starts.

## Configuration options

Configure the OTel Engine through the chart’s `config` field, as the preceding example does. The [Helm chart documentation](https://opentelemetry.io/docs/platforms/kubernetes/helm/collector/#configuration) describes this field and how your values combine with the chart’s defaults.

The chart also provides `alternateConfig`, which replaces the chart’s default configuration instead of combining with it. Upstream provides that field for use as a subchart and doesn’t recommend it when you install the chart directly.

Refer to the [upstream documentation](https://opentelemetry.io/docs/platforms/kubernetes/helm/collector/) for more information about configuring the Helm chart for your use case.
