Loading

Quickstart for Kubernetes on self-managed deployments

Elastic Stack Serverless Observability

Learn how to set up the EDOT Collector and EDOT SDKs in a Kubernetes environment to collect host metrics, logs and application traces.

Make sure the following requirements are present:

  • The Kubernetes OpenTelemetry Assets integration is installed in Kibana.
  • The System integration is installed in Kibana. Select Add integration only to skip the agent installation, as only the integration assets are required.

Use the Add data screen in Elastic Observability to generate install commands that are already configured with the values you need.

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

Follow these steps to deploy the EDOT Collector and EDOT OTel SDKs in Docker.

  1. Add the OpenTelemetry repository to Helm

    helm repo add open-telemetry 'https://open-telemetry.github.io/opentelemetry-helm-charts' --force-update
    
  2. Set up credentials

    Retrieve your Elasticsearch endpoint and API key and replace both in the following command to create a namespace and a secret with your credentials.

    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>'
    
  3. Install the operator

    Install the OpenTelemetry Operator using the kube-stack Helm chart with the pre-configured values.yaml file.

    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.0.2/deploy/helm/edot-collector/kube-stack/values.yaml' \
    --version '0.3.9'
    
  4. 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.

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

    Restart your deployment to ensure the annotations and auto-instrumentations are applied.

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