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.

Collect Host Metrics with OpenTelemetry

Host metrics are fundamental performance indicators collected directly from a system's operating system. These metrics provide granular visibility into the physical or virtual server's resource utilization and health status.

The OpenTelemetry hostmetrics receiver collects metrics on CPU, memory, disk, network, paging, and system performance.

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

Prerequisites

  • An instance of SigNoz (either Cloud or Self-Hosted)

A VM is a virtual computer that runs on physical hardware. This includes:

  • Cloud VMs: AWS EC2, Google Compute Engine, Azure VMs, DigitalOcean Droplets
  • On-premise VMs: VMware, VirtualBox, Hyper-V, KVM
  • Bare metal servers: Physical servers running Linux/Unix directly

Use this section if you're deploying your application directly on a server or VM without containerization.

Step 1: Install OpenTelemetry Collector

Follow the OpenTelemetry Collector Installation Guide to install OpenTelemetry Collector.

Step 2: Configure the Collector

Configure the Hostmetrics Receiver

Open your OpenTelemetry Collector configuration file which is typically located at /etc/otelcol-contrib/config.yaml.

Add the hostmetrics receiver which scrapes metrics from the host system, add it to the receivers section:

config.yaml
receivers:
  hostmetrics:
    collection_interval: 60s
    scrapers:
      cpu: {}
      disk: {}
      load: {}
      filesystem: {}
      memory: {}
      network: {}
      nfs: {} # Linux only
      paging: {}
      process:
        mute_process_name_error: true
        mute_process_exe_error: true
        mute_process_io_error: true
      processes: {}
      system: {}

Configure the Processors

Add resourcedetection processor to the processors section to enrich metrics with resource attributes:

config.yaml
processors:
  batch:
  resourcedetection:
    detectors: [env, system]

The resourcedetection processor automatically adds resource attributes like hostname and OS information to your metrics.

Configure the Exporters

Add otlp exporter with SigNoz endpoint and ingestion key to the exporters section:

config.yaml
exporters:
  otlp:
    endpoint: 'ingest.<region>.signoz.cloud:443'
    tls:
      insecure: false
    headers:
      'signoz-ingestion-key': '<your-ingestion-key>'

Verify these values:

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

Configure the Service

Enable hostmetrics receiver, resourcedetection and batch processors in the service section:

config.yaml
service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [resourcedetection, batch]
      exporters: [otlp]
View Complete Configuration

Here is how the complete config.yaml file should look:

config.yaml
receivers:
  hostmetrics:
    collection_interval: 60s
    scrapers:
      cpu: {}
      disk: {}
      load: {}
      filesystem: {}
      memory: {}
      network: {}
      nfs: {} # Linux only
      paging: {}
      process:
        mute_process_name_error: true
        mute_process_exe_error: true
        mute_process_io_error: true
      processes: {}
      system: {}

processors:
  batch:
  resourcedetection:
    detectors: [env, system]

exporters:
  otlp:
    endpoint: "ingest.<region>.signoz.cloud:443"
    tls:
      insecure: false
    headers:
      "signoz-ingestion-key": "<your-ingestion-key>"

service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [resourcedetection, batch]
      exporters: [otlp]

Step 3: Run the Collector

After saving the configuration, restart the collector service to apply changes.

If you are using systemd to manage the collector service:

sudo systemctl restart otelcol-contrib
sudo systemctl status otelcol-contrib

If you are running the binary manually (e.g., for testing):

./otelcol-contrib --config config.yaml

This section explains how to run the collector as a Docker container to collect Host Metrics (like CPU/Memory of the underlying Node).

If you want to monitor the performance of your Docker containers themselves (e.g. CPU/Memory usage per container), please refer to the Docker Container Metrics documentation.

Step 1: Install OpenTelemetry Collector

Follow the OpenTelemetry Collector Installation Guide to install OpenTelemetry Collector.

Step 2: Configure the Collector

To collect host metrics from a Docker container, you must bind mount the host filesystem.

Configure the Hostmetrics Receiver

Create a config.yaml file and add the following configuration. Note the root_path setting which is required for Docker.

config.yaml
receivers:
  hostmetrics:
    root_path: /hostfs  # Required: points to the host filesystem mounted inside the container
    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
        mute_process_user_error: true
      processes: {}
      system: {}

Configure the Processors

Add resource detection processor to enrich metrics:

config.yaml
processors:
  resourcedetection:
    detectors: [env, system]

Configure the Exporters

Add the exporter configuration:

config.yaml
exporters:
  otlp:
    endpoint: 'ingest.<region>.signoz.cloud:443'
    tls:
      insecure: false
    headers:
      'signoz-ingestion-key': '<your-ingestion-key>'

Verify these values:

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

Configure the Service

Set up the pipeline:

config.yaml
service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [resourcedetection, batch]
      exporters: [otlp]

The mute_process_*_error settings suppress common errors when the collector can't access certain process information due to permissions. This is normal in containerized or restricted environments.

View Complete Configuration

Here is how the complete config.yaml file should look:

config.yaml
receivers:
  hostmetrics:
    root_path: /hostfs
    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
        mute_process_user_error: true
      processes: {}
      system: {}

processors:
  batch:
  resourcedetection:
    detectors: [env, system]

exporters:
  otlp:
    endpoint: "ingest.<region>.signoz.cloud:443"
    tls:
      insecure: false
    headers:
      "signoz-ingestion-key": "<your-ingestion-key>"

service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [resourcedetection, batch]
      exporters: [otlp]

Step 3: Run the Collector

Run the collector container with the --volume flag to mount the host root directory to /hostfs.

docker run -d \
  --name otelcol-hostmetrics \
  --volume /:/hostfs:ro \
  --volume $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml \
  otel/opentelemetry-collector-contrib:latest \
  --config=/etc/otelcol-contrib/config.yaml

Step 1: Install OpenTelemetry Collector

Follow the OpenTelemetry Collector Installation Guide to install OpenTelemetry Collector.

Step 2: Configure the Collector

  1. Locate your config.yaml file.
    • Default: C:\Program Files\OpenTelemetry Collector\config.yaml

Configure the Hostmetrics Receiver

Add the following to your config.yaml:

config.yaml
receivers:
  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
        mute_process_user_error: true
      system: {}

Configure the Processors

Add the resource detection processor:

config.yaml
processors:
  resourcedetection:
    detectors: [env, system]

Configure the Exporters

Configure the OTLP exporter:

config.yaml
exporters:
  otlp:
    endpoint: 'ingest.<region>.signoz.cloud:443'
    tls:
      insecure: false
    headers:
      'signoz-ingestion-key': '<your-ingestion-key>'

Verify these values:

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

Configure the Service

Enable the pipeline:

config.yaml
service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [resourcedetection, batch]
      exporters: [otlp]

Step 3: Run the Collector

After saving the configuration, run the collector service to apply changes.

.\otelcol-contrib.exe --config config.yaml

Advanced Configuration

Configure Different Frequencies

You can configure different collection intervals for different metrics by defining multiple hostmetrics receivers. This is useful if you want frequently changing metrics (like CPU/Memory) to be collected more often than stable ones (like Filesystem).

config.yaml
receivers:
  # Receiver for high-frequency metrics (e.g., every 10s)
  hostmetrics/fast:
    collection_interval: 10s
    scrapers:
      cpu: {}
      memory: {}

  # Receiver for low-frequency metrics (e.g., every 1m)
  hostmetrics/slow:
    collection_interval: 60s
    scrapers:
      filesystem: {}
      disk: {}
      network: {}

service:
  pipelines:
    metrics:
      receivers: [hostmetrics/fast, hostmetrics/slow]
      # ... other processors and exporters

Verification

Once configured, verify that metrics are flowing to SigNoz.

  1. Go to the Infrastructure Monitoring section in SigNoz (Hosts tab).
  2. You should see your host listed with metrics like CPU and Memory usage.
List of Hosts in SigNoz Infrastructure Tab
List of Hosts in SigNoz Infrastructure Tab
Detailed View of a Host
Detailed View of a Host

Troubleshooting

No metrics appearing in SigNoz

Symptoms: Host not visible in Infrastructure Monitoring > Hosts tab.

Resolution:

  1. Check collector logs for errors.

    Linux (Systemd):

    journalctl -u otelcol-contrib -f
    

    Docker:

    docker logs otelcol-hostmetrics -f
    

    Windows (PowerShell):

    Get-Content "C:\Program Files\OpenTelemetry Collector\otelcol.log" -Wait
    
  2. Verify the hostmetrics receiver is enabled in your config.

  3. Ensure the collector can reach the SigNoz endpoint (port 443 for Cloud, 4317 for Self-Hosted).

Host Name is blank/empty

Symptoms: Host name appears blank or empty in Infrastructure Monitoring > Hosts tab.

Cause: Metrics are missing the host.name resource attribute (metadata the collector attaches to every metric to identify which host it came from). This typically happens when:

  • The resourcedetection processor is not added to the processors section of your collector config, or
  • The processor is defined but not enabled in your metrics pipeline (the processors list under service > pipelines > metrics).

Resolution:

  1. Verify that the resourcedetection processor is in your processors section:
config.yaml
processors:
  resourcedetection:
    detectors: [env, system, docker]
  batch:
  1. Verify that resourcedetection is listed in your metrics pipeline before batch:
config.yaml
service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [resourcedetection, batch]
      exporters: [otlp]
  1. Restart the collector to apply changes and check logs for errors (see Run the Collector).

The resourcedetection processor automatically detects resource attributes like host.name and OS information from the host environment. For the full list of supported detectors, see the resourcedetection processor documentation.

Verification: After restarting, go to Infrastructure Monitoring > Hosts. Your host should now appear with its hostname populated.

Connection Refused

Symptoms: Logs show connection refused errors.

Resolution:

  • Ensure the OTLP endpoint is reachable.
  • Verify the correct port is being used.
  • Check firewall settings.

Invalid Key (Cloud)

Symptoms: HTTP 401 Unauthorized errors in logs.

Resolution:

  • Double-check your ingestion key in config.yaml.
  • Ensure it matches the key in SigNoz (Settings > Ingestion Settings).

Next Steps

  • Visualize Host Metrics using Dashboard Templates
  • Set up Alerts for Host Metrics
  • Learn more about Infrastructure Monitoring

Get Help

If you need help with the steps in this topic, please reach out to us on SigNoz Community Slack.

If you are a SigNoz Cloud user, please use in product chat support located at the bottom right corner of your SigNoz instance or contact us at cloud-support@signoz.io.

Last updated: May 18, 2026

Edit on GitHub

Was this page helpful?

Your response helps us improve this page.

Prev
Cert-Manager
Next
Kubernetes Metrics
On this page
Prerequisites
Step 1: Install OpenTelemetry Collector
Step 2: Configure the Collector
Configure the Hostmetrics Receiver
Configure the Processors
Configure the Exporters
Configure the Service
Step 3: Run the Collector
Step 1: Install OpenTelemetry Collector
Step 2: Configure the Collector
Configure the Hostmetrics Receiver
Configure the Processors
Configure the Exporters
Configure the Service
Step 3: Run the Collector
Step 1: Install OpenTelemetry Collector
Step 2: Configure the Collector
Configure the Hostmetrics Receiver
Configure the Processors
Configure the Exporters
Configure the Service
Step 3: Run the Collector
Advanced Configuration
Configure Different Frequencies
Verification
Troubleshooting
No metrics appearing in SigNoz
Host Name is blank/empty
Connection Refused
Invalid Key (Cloud)
Next Steps
Get Help

Is this page helpful?

Your response helps us improve this page.