Quickstart for hosts and VMs on Elastic Cloud Hosted

Learn how to set up the Elastic Agent and EDOT SDKs on hosts and VMs 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.
  • The host or VM running a supported operating system (Linux, macOS, or Windows).

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 with ECH:

  1. Download the Elastic Agent

    Download the Elastic Agent for your operating system.

  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. In the Application endpoints, cluster and component IDs section, select Managed OTLP.
    4. Copy the public endpoint value.

    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.

  3. Configure the Elastic Agent

    Replace <ELASTIC_OTLP_ENDPOINT> and <ELASTIC_API_KEY> before applying the following commands.

    ELASTIC_OTLP_ENDPOINT=<ELASTIC_OTLP_ENDPOINT> && \
    ELASTIC_API_KEY=<ELASTIC_API_KEY> && \
    cp ./otel_samples/managed_otlp/logs_metrics_traces.yml ./otel.yml && \
    mkdir -p ./data/otelcol && \
    sed -i "s#\${env:STORAGE_DIR}#${PWD}/data/otelcol#g" ./otel.yml && \
    sed -i "s#\${env:ELASTIC_OTLP_ENDPOINT}#${ELASTIC_OTLP_ENDPOINT}#g" ./otel.yml && \
    sed -i "s#\${env:ELASTIC_API_KEY}#${ELASTIC_API_KEY}#g" ./otel.yml
    		
    ELASTIC_OTLP_ENDPOINT=<ELASTIC_OTLP_ENDPOINT> && \
    ELASTIC_API_KEY=<ELASTIC_API_KEY> && \
    cp ./otel_samples/managed_otlp/logs_metrics_traces.yml ./otel.yml && \
    mkdir -p ./data/otelcol && \
    sed -i '' "s#\${env:STORAGE_DIR}#${PWD}/data/otelcol#g" ./otel.yml && \
    sed -i '' "s#\${env:ELASTIC_OTLP_ENDPOINT}#${ELASTIC_OTLP_ENDPOINT}#g" ./otel.yml && \
    sed -i '' "s#\${env:ELASTIC_API_KEY}#${ELASTIC_API_KEY}#g" ./otel.yml
    		
    Remove-Item -Path .\otel.yml -ErrorAction SilentlyContinue
    Copy-Item .\otel_samples\managed_otlp\logs_metrics_traces.yml .\otel.yml
    New-Item -ItemType Directory -Force -Path .\data\otelcol | Out-Null
    
    $content = Get-Content .\otel.yml
    $content = $content -replace '\${env:STORAGE_DIR}', "$PWD\data\otelcol"
    $content = $content -replace '\${env:ELASTIC_OTLP_ENDPOINT}', "<ELASTIC_OTLP_ENDPOINT>"
    $content = $content -replace '\${env:ELASTIC_API_KEY}', "<ELASTIC_API_KEY>"
    $content | Set-Content .\otel.yml
    		

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

  4. Run the Elastic Agent

    Use the following command to start the Elastic Agent.

    sudo ./otelcol --config otel.yml
    		
    .\elastic-agent.exe otel --config otel.yml
    		
    Note

    By default, the Collector opens ports 4317 and 4318 to receive application data from locally running EDOT SDKs.

  5. (Optional) Instrument your applications

    To collect telemetry from applications and use the Elastic Agent as a gateway, instrument your target applications following the setup instructions:

    Configure your SDKs to send the data to the local Elastic Agent using OTLP/gRPC (http://localhost:4317) or OTLP/HTTP (http://localhost:4318).

  6. Explore your data

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

If you need to write telemetry directly to Elasticsearch using the elasticsearch exporter (for example, for pipeline customizations not yet supported through Elastic Cloud Managed OTLP Endpoint), follow these steps. For a full list of features and limitations that apply to each path, refer to Elastic features available with Elastic OpenTelemetry.

Retrieve your Elasticsearch URL and your API key:

  1. Retrieve the Elasticsearch URL for your Elastic Cloud deployment:

    1. Go to the Elastic Cloud console.
    2. Next to your deployment, select Manage.
    3. Under Applications next to Elasticsearch, select Copy endpoint.
  2. Create an API Key following these instructions.

Replace <ELASTICSEARCH_ENDPOINT> and <ELASTIC_API_KEY> before applying the following commands.

ELASTICSEARCH_ENDPOINT=<ELASTICSEARCH_ENDPOINT> && \
ELASTIC_API_KEY=<ELASTIC_API_KEY> && \
cp ./otel_samples/logs_metrics_traces.yml ./otel.yml && \
mkdir -p ./data/otelcol && \
sed -i "s#\${env:STORAGE_DIR}#${PWD}/data/otelcol#g" ./otel.yml && \
sed -i "s#\${env:ELASTIC_ENDPOINT}#${ELASTICSEARCH_ENDPOINT}#g" ./otel.yml && \
sed -i "s#\${env:ELASTIC_API_KEY}#${ELASTIC_API_KEY}#g" ./otel.yml
		
ELASTICSEARCH_ENDPOINT=<ELASTICSEARCH_ENDPOINT> && \
ELASTIC_API_KEY=<ELASTIC_API_KEY> && \
cp ./otel_samples/logs_metrics_traces.yml ./otel.yml && \
mkdir -p ./data/otelcol && \
sed -i '' "s#\${env:STORAGE_DIR}#${PWD}/data/otelcol#g" ./otel.yml && \
sed -i '' "s#\${env:ELASTIC_ENDPOINT}#${ELASTICSEARCH_ENDPOINT}#g" ./otel.yml && \
sed -i '' "s#\${env:ELASTIC_API_KEY}#${ELASTIC_API_KEY}#g" ./otel.yml
		
Remove-Item -Path .\otel.yml -ErrorAction SilentlyContinue
Copy-Item .\otel_samples\logs_metrics_traces.yml .\otel.yml
New-Item -ItemType Directory -Force -Path .\data\otelcol | Out-Null

$content = Get-Content .\otel.yml
$content = $content -replace '\${env:STORAGE_DIR}', "$PWD\data\otelcol"
$content = $content -replace '\${env:ELASTIC_ENDPOINT}', "<ELASTICSEARCH_ENDPOINT>"
$content = $content -replace '\${env:ELASTIC_API_KEY}', "<ELASTIC_API_KEY>"
$content | Set-Content .\otel.yml
		

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:

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.