SigNoz
Docs
PricingCustomers
Get Started - Free
Docs
IntroductionContributingMigrate from DatadogSigNoz API
OpenTelemetry
What is OpenTelemetryOpenTelemetry Collector GuideOpenTelemetry Demo
Community
Support
Slack
X
Launch Week
Changelog
Dashboard Templates
DevOps Wordle
Newsletter
KubeCon, Atlanta 2025
More
SigNoz vs DatadogSigNoz vs New RelicSigNoz vs GrafanaSigNoz vs Dynatrace
Careers
AboutTermsPrivacySecurity & Compliance
SigNoz Logo
SigNoz
All systems operational
HIPAASOC-2
SigNoz Cloud - This page applies to SigNoz Cloud editions.
Self-Host - This page applies to self-hosted SigNoz editions.

VM Collection Agent - Install

This guide walks you through installing the OpenTelemetry Collector contrib binary on your virtual machine. We use the contrib distribution and tailor the steps for sending data to SigNoz.

Prerequisites

  • SigNoz application up and running (SigNoz Cloud or self-hosted)
  • SigNoz ingestion endpoint accessible from the VM
  • Availability of ports: 4317, 4318, 8888, 1777, 13133

Most steps are identical. To adapt this guide, update the endpoint and remove the ingestion key header as shown in Cloud → Self-Hosted.

OpenTelemetry Collector Installation

The DEB package installs the Collector as a systemd service on Debian or Ubuntu. After installation, the default configuration is at /etc/otelcol-contrib/config.yaml.

Prerequisites

  • Debian or Ubuntu (or compatible) system with systemd
  • sudo or root access
  • Network access to download packages

Step 1: Update package list

sudo apt-get update

Step 2: Download the package

ARCH=$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g')
curl -sSL -O "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.139.0/otelcol-contrib_0.139.0_linux_${ARCH}.deb"

Step 3: Install the package

sudo dpkg -i otelcol-contrib_0.139.0_linux_${ARCH}.deb

Step 4: Create OpenTelemetry Collector Configuration

The following config is tailored for SigNoz usage (traces, metrics, logs). Copy the config to /etc/otelcol-contrib/config.yaml.

config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  hostmetrics:
    collection_interval: 60s
    scrapers:
      cpu: {}
      disk: {}
      load: {}
      filesystem: {}
      memory: {}
      network: {}
      paging: {}
      process:
        mute_process_name_error: true
        mute_process_exe_error: true
        mute_process_io_error: true
      processes: {}
processors:
  batch:
    send_batch_size: 1000
    timeout: 10s
  # Ref: https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/configuration/#resource-processor
  resourcedetection:
    detectors: [env, host, system, docker, k8snode]
exporters:
  otlphttp:
    endpoint: https://ingest.<region>.signoz.cloud:443
    headers:
      signoz-ingestion-key: <your-ingestion-key>
service:
  pipelines:
    metrics:
      receivers: [otlp, hostmetrics]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    traces:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    logs:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]

Verify the following values:

  • <region>: Your SigNoz Cloud region
  • <your-ingestion-key>: Your SigNoz Cloud ingestion key

The Collector service uses /etc/otelcol-contrib/config.yaml by default. To use a different config file, edit the OTELCOL_OPTIONS variable in /etc/otelcol-contrib/otelcol-contrib.conf and set --config=/path/to/your/config.yaml. You can also add other collector flags there (e.g. --set for feature gates). To see all options:

/usr/bin/otelcol-contrib --help

Step 5: Applying changes

After modifying the configuration or environment file, restart the service:

sudo systemctl restart otelcol-contrib

Step 6: Validate

Check that the collector is running:

sudo journalctl -u otelcol-contrib -f

You should see log lines indicating the receivers started successfully:

... Everything is ready. Begin running and processing data.

In SigNoz, navigate to Infrastructure Monitoring → Hosts and verify your host appears. If you have instrumented applications sending data, check Traces and Logs Explorer to confirm traces and logs are flowing.

The RPM package installs the Collector as a systemd service on Red Hat, CentOS, or Fedora. After installation, the default configuration is at /etc/otelcol-contrib/config.yaml.

Prerequisites

  • Red Hat, CentOS, Fedora, or compatible system with systemd
  • sudo or root access
  • Network access to download packages

Step 1: Update packages

sudo yum update

Step 2: Download the package

ARCH=$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g')
curl -sSL -O "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.139.0/otelcol-contrib_0.139.0_linux_${ARCH}.rpm"

Step 3: Install the package

sudo rpm -ivh otelcol-contrib_0.139.0_linux_${ARCH}.rpm

Step 4: Create OpenTelemetry Collector Configuration

The following config is tailored for SigNoz usage (traces, metrics, logs). Copy the config to /etc/otelcol-contrib/config.yaml.

config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  hostmetrics:
    collection_interval: 60s
    scrapers:
      cpu: {}
      disk: {}
      load: {}
      filesystem: {}
      memory: {}
      network: {}
      paging: {}
      process:
        mute_process_name_error: true
        mute_process_exe_error: true
        mute_process_io_error: true
      processes: {}
processors:
  batch:
    send_batch_size: 1000
    timeout: 10s
  # Ref: https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/configuration/#resource-processor
  resourcedetection:
    detectors: [env, host, system, docker, k8snode]
exporters:
  otlphttp:
    endpoint: https://ingest.<region>.signoz.cloud:443
    headers:
      signoz-ingestion-key: <your-ingestion-key>
service:
  pipelines:
    metrics:
      receivers: [otlp, hostmetrics]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    traces:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    logs:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]

Verify the following values:

  • <region>: Your SigNoz Cloud region
  • <your-ingestion-key>: Your SigNoz Cloud ingestion key

The Collector service uses /etc/otelcol-contrib/config.yaml by default. To use a different config file, edit the OTELCOL_OPTIONS variable in /etc/otelcol-contrib/otelcol-contrib.conf and set --config=/path/to/your/config.yaml. You can also add other collector flags there (e.g. --set for feature gates). To see all options:

/usr/bin/otelcol-contrib --help

Step 5: Applying changes

After modifying the configuration or environment file, restart the service:

sudo systemctl restart otelcol-contrib

Step 6: Validate

Check that the collector is running:

sudo journalctl -u otelcol-contrib -f

You should see log lines indicating the receivers started successfully:

... Everything is ready. Begin running and processing data.

In SigNoz, navigate to Infrastructure Monitoring → Hosts and verify your host appears. If you have instrumented applications sending data, check Traces and Logs Explorer to confirm traces and logs are flowing.

Download the Collector as a gzipped tarball and run the binary yourself. No package manager or service is used; you extract and run the binary and manage config and process yourself.

Prerequisites

  • Linux (amd64 or arm64)
  • curl and tar installed
  • Network access to download the tarball

Step 1: Download the tarball

ARCH=$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g')
curl -sSL -O "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.139.0/otelcol-contrib_0.139.0_linux_${ARCH}.tar.gz"

Step 2: Extract

tar -xvf otelcol-contrib_0.139.0_linux_${ARCH}.tar.gz

Step 3: Create OpenTelemetry Collector Configuration

The following config is tailored for SigNoz usage (traces, metrics, logs). Copy the config to config.yaml in the extracted directory.

config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  hostmetrics:
    collection_interval: 60s
    scrapers:
      cpu: {}
      disk: {}
      load: {}
      filesystem: {}
      memory: {}
      network: {}
      paging: {}
      process:
        mute_process_name_error: true
        mute_process_exe_error: true
        mute_process_io_error: true
      processes: {}
processors:
  batch:
    send_batch_size: 1000
    timeout: 10s
  # Ref: https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/configuration/#resource-processor
  resourcedetection:
    detectors: [env, host, system, docker, k8snode]
exporters:
  otlphttp:
    endpoint: https://ingest.<region>.signoz.cloud:443
    headers:
      signoz-ingestion-key: <your-ingestion-key>
service:
  pipelines:
    metrics:
      receivers: [otlp, hostmetrics]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    traces:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    logs:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]

Verify the following values:

  • <region>: Your SigNoz Cloud region
  • <your-ingestion-key>: Your SigNoz Cloud ingestion key

Step 4: Run the collector

./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid

Step 5: Validate

Check that the collector is running:

tail -f otelcol-output.log

You should see log lines indicating the receivers started successfully:

... Everything is ready. Begin running and processing data.

In SigNoz, navigate to Infrastructure Monitoring → Hosts and verify your host appears. If you have instrumented applications sending data, check Traces and Logs Explorer to confirm traces and logs are flowing.

Download the Collector as a gzipped tarball for macOS (Intel or Apple Silicon). You extract and run the binary; there is no system service.

Prerequisites

  • macOS (Intel or Apple Silicon)
  • Terminal and curl (included with macOS)
  • Network access to download the tarball

Step 1: Download the tarball

ARCH=$(uname -m | sed 's/x86_64/amd64/g')
curl -sSL -O "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.139.0/otelcol-contrib_0.139.0_darwin_${ARCH}.tar.gz"

Step 2: Extract

tar -xvf otelcol-contrib_0.139.0_darwin_${ARCH}.tar.gz

Step 3: Create OpenTelemetry Collector Configuration

The following config is tailored for SigNoz usage (traces, metrics, logs). Copy the config to config.yaml in the same directory.

config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  hostmetrics:
    collection_interval: 60s
    scrapers:
      cpu: {}
      disk: {}
      load: {}
      filesystem: {}
      memory: {}
      network: {}
      paging: {}
      process:
        mute_process_name_error: true
        mute_process_exe_error: true
        mute_process_io_error: true
      processes: {}
processors:
  batch:
    send_batch_size: 1000
    timeout: 10s
  # Ref: https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/configuration/#resource-processor
  resourcedetection:
    detectors: [env, host, system, docker, k8snode]
exporters:
  otlphttp:
    endpoint: https://ingest.<region>.signoz.cloud:443
    headers:
      signoz-ingestion-key: <your-ingestion-key>
service:
  pipelines:
    metrics:
      receivers: [otlp, hostmetrics]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    traces:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    logs:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]

Verify the following values:

  • <region>: Your SigNoz Cloud region
  • <your-ingestion-key>: Your SigNoz Cloud ingestion key

Step 4: Run the collector

./otelcol-contrib --config ./config.yaml &> otelcol-output.log & echo "$!" > otel-pid

Step 5: Validate

Check that the collector is running:

tail -f otelcol-output.log

You should see log lines indicating the receivers started successfully:

... Everything is ready. Begin running and processing data.

In SigNoz, navigate to Infrastructure Monitoring → Hosts and verify your host appears. If you have instrumented applications sending data, check Traces and Logs Explorer to confirm traces and logs are flowing.

The MSI installs the Collector as a Windows service (display name "OpenTelemetry Collector") and registers an Application Event Log source.

Prerequisites

  • Windows (amd64)
  • Administrator rights to install the service
  • Network access to download the MSI

Step 1: Create OpenTelemetry Collector Configuration

The following config is tailored for SigNoz usage (traces, metrics, logs). Copy the config to the config.yaml file.

config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  hostmetrics:
    collection_interval: 60s
    scrapers:
      cpu: {}
      disk: {}
      load: {}
      filesystem: {}
      memory: {}
      network: {}
      paging: {}
      process:
        mute_process_name_error: true
        mute_process_exe_error: true
        mute_process_io_error: true
      processes: {}
processors:
  batch:
    send_batch_size: 1000
    timeout: 10s
  # Ref: https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/configuration/#resource-processor
  resourcedetection:
    detectors: [env, host, system, docker, k8snode]
exporters:
  otlphttp:
    endpoint: https://ingest.<region>.signoz.cloud:443
    headers:
      signoz-ingestion-key: <your-ingestion-key>
service:
  pipelines:
    metrics:
      receivers: [otlp, hostmetrics]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    traces:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    logs:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]

Verify the following values:

  • <region>: Your SigNoz Cloud region
  • <your-ingestion-key>: Your SigNoz Cloud ingestion key

Step 2: Run the Collector

Start-Process msiexec -ArgumentList "/i", "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.139.0/otelcol-contrib_0.139.0_windows_amd64.msi", "CONFIG=config.yaml" -Wait

Step 3: Validate

Check that the collector is running:

Get-EventLog -LogName Application -Source "OpenTelemetry Collector" -Newest 20

You should see log lines indicating the receivers started successfully:

... Everything is ready. Begin running and processing data.

In SigNoz, navigate to Infrastructure Monitoring → Hosts and verify your host appears. If you have instrumented applications sending data, check Traces and Logs Explorer to confirm traces and logs are flowing.

Download the Collector as a gzipped tarball and run the executable yourself. No MSI or Windows service is used; you extract and run otelcol-contrib.exe and manage config and process yourself. Run the commands in PowerShell.

Prerequisites

  • Windows (amd64), PowerShell
  • curl (included in Windows 10+) and tar (Windows 10+)
  • Network access to download the tarball

Step 1: Download the tarball

curl -sSL -o "otelcol-contrib_0.139.0_windows_amd64.tar.gz" "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.139.0/otelcol-contrib_0.139.0_windows_amd64.tar.gz"

Step 2: Extract

tar -xvzf otelcol-contrib_0.139.0_windows_amd64.tar.gz

Step 3: Create OpenTelemetry Collector Configuration

The following config is tailored for SigNoz usage (traces, metrics, logs). Copy the config to config.yaml in the same folder.

config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  hostmetrics:
    collection_interval: 60s
    scrapers:
      cpu: {}
      disk: {}
      load: {}
      filesystem: {}
      memory: {}
      network: {}
      paging: {}
      process:
        mute_process_name_error: true
        mute_process_exe_error: true
        mute_process_io_error: true
      processes: {}
processors:
  batch:
    send_batch_size: 1000
    timeout: 10s
  # Ref: https://signoz.io/docs/opentelemetry-collection-agents/opentelemetry-collector/configuration/#resource-processor
  resourcedetection:
    detectors: [env, host, system, docker, k8snode]
exporters:
  otlphttp:
    endpoint: https://ingest.<region>.signoz.cloud:443
    headers:
      signoz-ingestion-key: <your-ingestion-key>
service:
  pipelines:
    metrics:
      receivers: [otlp, hostmetrics]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    traces:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]
    logs:
      receivers: [otlp]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]

Verify the following values:

  • <region>: Your SigNoz Cloud region
  • <your-ingestion-key>: Your SigNoz Cloud ingestion key

Step 4: Run the collector

Start-Process -FilePath ".\otelcol-contrib.exe" -ArgumentList "--config", ".\config.yaml" -RedirectStandardOutput "otelcol-output.log" -RedirectStandardError "otelcol-error.log" -NoNewWindow

Step 5: Validate

Check that the collector is running:

Get-Content otelcol-output.log -Wait -Tail 50

You should see log lines indicating the receivers started successfully:

... Everything is ready. Begin running and processing data.

In SigNoz, navigate to Infrastructure Monitoring → Hosts and verify your host appears. If you have instrumented applications sending data, check Traces and Logs Explorer to confirm traces and logs are flowing.

Video Walkthrough

If you are someone who understands things better through video implementation, here is a video to help you. Check it out:

OpenTelemetry VM Setup Guide: SigNoz Collection Agents Explained

Troubleshooting

No data appears in SigNoz after installation

Symptoms: Host does not appear in Infrastructure Monitoring → Hosts, or traces, metrics, or logs do not show in SigNoz despite the Collector running.

Likely causes: Collector not receiving data; incorrect SigNoz endpoint or ingestion key; network or firewall blocking egress.

Resolution: Add a debug exporter to verify whether the Collector receives telemetry. Append the snippet below to your existing config—do not replace your full config.

Add the debug exporter to your exporters section:

/etc/otelcol-contrib/config.yaml
exporters:
  debug:
    verbosity: detailed

Then add debug to each pipeline's exporters list (before otlphttp):

/etc/otelcol-contrib/config.yaml
service:
  pipelines:
    metrics:
      exporters: [debug, otlphttp]
    traces:
      exporters: [debug, otlphttp]
    logs:
      exporters: [debug, otlphttp]

The verbosity: detailed setting logs full telemetry payloads to the Collector output.

Verification: Restart the Collector and tail logs (journalctl -u otelcol-contrib -f for DEB/RPM, or tail -f otelcol-output.log for manual runs). If spans, metrics, or logs appear in the debug output but not in SigNoz, the issue is with the SigNoz exporter (endpoint, ingestion key, or network). Remove the debug exporter after troubleshooting.

Next Steps

  • Configure the Collector
  • VM Collection Agent Overview
  • Collector Configuration Best Practices
  • Telemetry Data Requirements for Infrastructure Monitoring

Last updated: May 13, 2026

Edit on GitHub

Was this page helpful?

Your response helps us improve this page.

Prev
Overview
Next
Configure
On this page
Prerequisites
OpenTelemetry Collector Installation
Step 1: Update package list
Step 2: Download the package
Step 3: Install the package
Step 4: Create OpenTelemetry Collector Configuration
Step 5: Applying changes
Step 6: Validate
Step 1: Update packages
Step 2: Download the package
Step 3: Install the package
Step 4: Create OpenTelemetry Collector Configuration
Step 5: Applying changes
Step 6: Validate
Step 1: Download the tarball
Step 2: Extract
Step 3: Create OpenTelemetry Collector Configuration
Step 4: Run the collector
Step 5: Validate
Step 1: Download the tarball
Step 2: Extract
Step 3: Create OpenTelemetry Collector Configuration
Step 4: Run the collector
Step 5: Validate
Step 1: Create OpenTelemetry Collector Configuration
Step 2: Run the Collector
Step 3: Validate
Step 1: Download the tarball
Step 2: Extract
Step 3: Create OpenTelemetry Collector Configuration
Step 4: Run the collector
Step 5: Validate
Video Walkthrough
Troubleshooting
No data appears in SigNoz after installation
Next Steps

Is this page helpful?

Your response helps us improve this page.