Type to search.

Quickstart for Kubernetes on Elastic Cloud Hosted

ECH

Elastic Cloud Hosted lets you manage and configure one or more deployments of the versioned Elastic Stack, hosted on Elastic Cloud.

Availability

  • Generally available

    This functionality is generally available and ready for production usage.

Learn how to set up the Elastic Agent and EDOT SDKs in a Kubernetes environment with Elastic Cloud Hosted (ECH) to collect host metrics, logs, and application traces. This quickstart uses the Elastic Cloud Managed OTLP Endpoint, which is the recommended ingestion path for ECH.

  • An Elastic Cloud Hosted deployment running version 9.0 or later.
  • Helm version 3.9+ up to and including 4.3.0.

The fastest way to get started is the Add data screen in Elastic Observability. It generates install commands with your endpoint and API key already included.

  1. Open Elastic Observability.
  2. Go to Add data.
  3. Select what you want to monitor.
  4. Follow the instructions.

If you need to manage credentials manually, for example, to use them in automation or to configure multiple environments, follow the steps in the Manual installation section.

Follow these steps to deploy the Elastic Agent and EDOT SDKs in Kubernetes with ECH:

  1. Add the repository to Helm

    Run the following command to add the charts repository to Helm:

    Shell
    helm repo add open-telemetry "https://open-telemetry.github.io/opentelemetry-helm-charts" --force-update
    
  2. Find your endpoint and create an API key

    Find your endpoint

    The easiest way to get your endpoint and API key is from the Add data screen in Kibana:

    1. Go to Add data.
    2. In the Connect directly to the endpoint section, select the OpenTelemetry tab.
    3. Copy the Endpoint value.
    4. Click Create key to generate an API key with the required privileges.

    Alternatively, retrieve the endpoint from the Elastic Cloud Console and create an API key manually:

    1. Log in to the Elastic Cloud Console.
    2. Find your deployment in Hosted deployments, and select Manage.
    3. Under Application endpoints, cluster and component IDs, select Managed OTLP.
    4. Copy the Direct endpoint value from the flyout.

    Create an API key

    Note

    The Elastic Cloud Managed OTLP Endpoint validates API keys using APM application privileges. Index-level privilege scoping is not yet supported, meaning that API keys with custom index-level role descriptors return a PermissionDenied error.

    Using Kibana
    1. Go to Stack Management → API keys.

    2. Click Create API key, enter a name, and enable Control security privileges.

    3. In the role descriptors box, enter the following privileges:

      JSON
      {
        "otlp_writer": {
          "applications": [
            {
              "application": "apm",
              "resources": ["*"],
              "privileges": ["event:write"]
            }
          ]
        }
      }
      
    4. Click Create API key and copy the encoded value.

    Using the Elasticsearch API

    Use the Create API key API:

    JSON
    POST /_security/api_key
    {
      "name": "otlp-writer",
      "role_descriptors": {
        "otlp_writer": {
          "applications": [
            {
              "application": "apm",
              "resources": ["*"],
              "privileges": ["event:write"]
            }
          ]
        }
      }
    }

    The event:write privilege for the apm application is the minimum required to send data through the Elastic Cloud Managed OTLP Endpoint.

  3. Configure your credentials

    Replace <ELASTIC_OTLP_ENDPOINT> and <ELASTIC_API_KEY> in the following command to create a namespace and a secret with your credentials.

    Shell
    kubectl create namespace opentelemetry-operator-system
    kubectl create secret generic elastic-secret-otel \
    --namespace opentelemetry-operator-system \
    --from-literal=elastic_otlp_endpoint='<ELASTIC_OTLP_ENDPOINT>' \
    --from-literal=elastic_api_key='<ELASTIC_API_KEY>'
    
    Note

    On Windows PowerShell, replace backslashes (\) with backticks (`) for line continuation and single quotes (') with double quotes (").

  4. Install the Operator

    Install the OpenTelemetry Operator using the kube-stack Helm chart with the managed_otlp values file:

    Shell
    helm install opentelemetry-kube-stack open-telemetry/opentelemetry-kube-stack \
    --namespace opentelemetry-operator-system \
    --values 'https://raw.githubusercontent.com/elastic/elastic-agent/refs/tags/v9.5.6/deploy/helm/edot-collector/kube-stack/managed_otlp/values.yaml' \
    --version '0.16.0'
    

    The Operator provides a deployment of the Elastic Agent and configuration environment variables. This allows SDKs and instrumentation to send data to the Elastic Agent without further configuration.

    For details about the pipelines, refer to Managed OTLP Endpoint.

    Elastic Agent 9.5+

    Elastic Agent can run in OpenTelemetry mode to retrieve traces, metrics, and logs from your infrastructure and applications, and forward them to Elastic Observability.

    Availability

    • Generally available since 9.5

      This functionality is generally available and ready for production usage.

    This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes.

    On OpenShift, follow the manual installation instructions and use the following command to apply the OpenShift values file after the managed_otlp values file:

    Shell
    helm install opentelemetry-kube-stack open-telemetry/opentelemetry-kube-stack \
    --namespace opentelemetry-operator-system \
    --values 'https://raw.githubusercontent.com/elastic/elastic-agent/refs/tags/v9.5.6/deploy/helm/edot-collector/kube-stack/managed_otlp/values.yaml' \
    --values 'https://raw.githubusercontent.com/elastic/elastic-agent/refs/tags/v9.5.6/deploy/helm/edot-collector/kube-stack/openshift/values.yaml' \
    --version '0.16.0'
    

    The OpenShift values file configures the chart to run with least privilege, including a custom security context constraints (SCC) resource for the daemon collector. For details, refer to Deploy on OpenShift.

  5. Auto-instrument applications

    Add a language-specific annotation to your namespace by replacing <LANGUAGE> with one of the supported values (nodejs, java, python, dotnet, or go) in the following command.

    Shell
    kubectl annotate namespace YOUR_NAMESPACE instrumentation.opentelemetry.io/inject-<LANGUAGE>="opentelemetry-operator-system/elastic-instrumentation"
    

    The OpenTelemetry Operator automatically provides the OTLP endpoint configuration and authentication to the SDKs through environment variables. Restart your deployment to ensure the annotations and auto-instrumentations are applied.

    For languages where auto-instrumentation is not available, manually instrument your application. See the Setup section in the corresponding SDK.

  6. Install the content packs

    Install the Kubernetes OpenTelemetry Assets and System OpenTelemetry Assets integrations in Kibana.

  7. Explore your data

    Go to Kibana and select Dashboards to explore your newly collected data.

If you need to write telemetry directly to Elasticsearch (for example, for pipeline customizations not yet supported through Elastic Cloud Managed OTLP Endpoint), use the following configuration instead.

Create the secret with your Elasticsearch endpoint:

Shell
kubectl create namespace opentelemetry-operator-system
kubectl create secret generic elastic-secret-otel \
--namespace opentelemetry-operator-system \
--from-literal=elastic_endpoint='<ELASTICSEARCH_ENDPOINT>' \
--from-literal=elastic_api_key='<ELASTIC_API_KEY>'

Install the Operator using the standard values file:

Shell
helm install opentelemetry-kube-stack open-telemetry/opentelemetry-kube-stack \
--namespace opentelemetry-operator-system \
--values 'https://raw.githubusercontent.com/elastic/elastic-agent/refs/tags/v9.5.6/deploy/helm/edot-collector/kube-stack/values.yaml' \
--version '0.16.0'

Elastic Agent can run in OpenTelemetry mode to retrieve traces, metrics, and logs from your infrastructure and applications, and forward them to Elastic Observability. Availability Generally available since 9.5 This functionality is generally available and ready for production usage. This documentation corresponds to the latest patch available for each minor version. If you're not using the latest patch, check the release notes for changes. On OpenShift, add the OpenShift values file after the base values file. Refer to Deploy on OpenShift.

For details about the pipelines, refer to Direct ingestion into Elasticsearch.

The following issues might occur.

The following error is due to an improperly formatted API key, and typically occurs when credentials are configured manually:

Txt
Exporting failed. Dropping data.
{"kind": "exporter", "data_type": }
"Unauthenticated desc = ApiKey prefix not found"

For a Collector, format the header as "Authorization": "ApiKey <api-key>". For an SDK, format it as "Authorization=ApiKey <api-key>".

For additional troubleshooting, refer to Troubleshooting common issues with the Elastic Agent and Troubleshooting the EDOT SDKs.