Skip to content

Host Metrics (node_exporter)

Collect host metrics — CPU, memory, disk, filesystem, network — plus the hardware sensors: temperatures, fan speeds, CPU package power draw, and ECC memory errors, from every host in your fleet, with curated dashboards and alerts you import in one step.

Metrics are produced by Prometheus node_exporter running on each host. An OpenTelemetry Collector scrapes every host’s :9100/metrics endpoint with the Prometheus receiver and forwards OTLP to your LeanSignal agent gateway (one per cluster or environment). The gateway keeps full fidelity locally and forwards only the demanded subset to your central dataplane. Metric names pass through natively (node_cpu_seconds_total, node_hwmon_temp_celsius, …) — no OTLP renaming — so existing node_exporter knowledge and PromQL transfer directly.

The hardware sensors are read from /sys (hwmon, thermal zones, RAPL powercap, EDAC), which only physical machines populate — on VMs and containers the Hardware panels and alerts simply stay empty. That is expected, not a misconfiguration; the host-level panels work everywhere.

  • A LeanSignal agent gateway deployed and connected — one per cluster or environment. If you haven’t deployed it yet, follow Install the agent (source: LeanSignal/leansignal-agent). It should show as Connected under Agents in the LeanSignal app.
  • Network reachability to the gateway’s OTLP port4317 (gRPC) or 4318 (HTTP). See Agent configuration.
  • node_exporter running on each host you want to observe — it exposes Prometheus metrics at :9100/metrics — plus an OpenTelemetry Collector that scrapes every host and forwards OTLP to the gateway, configured in Setup.
  • Editor or admin role in the LeanSignal app (importing a demand creates dashboards and alert rules).

On each host, run node_exporter (most distros package it as prometheus-node-exporter; a systemd unit or the official binary both work). No flags are needed — the collectors this integration queries (cpu, meminfo, filesystem, diskstats, netdev, and the hardware ones: hwmon, thermal_zone, rapl, edac) are enabled by default on Linux. Confirm a host is exposing metrics:

Terminal window
curl -s http://<host>:9100/metrics | grep -E '^node_(load1|hwmon_temp_celsius)'

Then point an OpenTelemetry Collector at every host’s :9100 endpoint and forward OTLP to your LeanSignal agent gateway (not a SaaS endpoint):

receivers:
prometheus:
config:
scrape_configs:
- job_name: node # keep this name — the "host down" alert matches on it
scrape_interval: 15s
static_configs:
- targets: # every host running node_exporter
- host-a:9100
- host-b:9100
- host-c:9100
processors:
batch: {}
exporters:
otlp:
endpoint: leansignal-agent:4317 # per-cluster gateway (use :4318 for HTTP)
tls:
insecure: true # in-cluster plaintext; provide ca_file for TLS
service:
pipelines:
metrics:
receivers: [prometheus]
processors: [batch]
exporters: [otlp]

List every host under targets (or use file_sd_configs / kubernetes_sd_configs to discover them); each scrape target becomes one value in the dashboard’s Instance filter. One collector can scrape the whole fleet — node_exporter exposes an HTTP endpoint, so nothing else runs per host.

Round out host observability with host logs: run a collector with the filelog/journald receivers next to node_exporter (or on the gateway, if it runs on the host) and forward OTLP — or repoint an existing Promtail/Alloy shipper at the gateway’s Loki push endpoint (:3500). Traces are an application concern, not a host one — instrument the workloads running on the host via the runtime integrations.

Host Metrics (node_exporter) ships as a ready-made demand in three variants. You don’t copy any JSON — in the LeanSignal app go to Demands, press the ˅ arrow on the Add Demand button (the arrow opens the import menu), choose Import from catalog…, and pick the variant. Each variant below lists the slug that identifies its published bundle. See Integrations for the full import flow.

The variants are nested — Standard is a superset of Essential, Extended a superset of Standard. Pick whichever is closest to what you need and treat it as a starting point: after import everything is a normal, editable copy, so retune thresholds, add or drop panels, and adjust queries for your environment — your edits reshape the demand automatically. Start small and re-import a larger variant later if you outgrow it.

The golden signals. 1 dashboard · 4 panels · 4 alerts — load, memory, filesystem, and network, plus a host-down alert.

Import this variant from the catalog. Its demand slug:

Demand slug
host-metrics-node-exporter-otel-demand-essential

Dashboard — Load average, Memory utilization, Filesystem utilization, and Network I/O.

Alerts (4)

AlertSeverityFires when
Host down or unreachablecriticalscrape up = 0 for 5m
Host load high (critical)critical5m load > 3× cores for 10m
Host memory usage high (critical)criticalmemory used > 90% for 5m
Host filesystem usage high (critical)criticalany mount > 90% for 10m

Review the bundle JSON →

Each variant imports its panels grouped into collapsible sections; in the larger variants they split into separate dashboards (Host overview and Hardware health) so each answers one set of questions. Every dashboard carries an Instance filter (on the instance label), so one import covers the whole fleet — view every instance at once, or focus on one. Legends are sortable tables showing last/mean/max per series, so the outlier instance stands out. Dashboards are demand-driven: importing one tells your agents to forward exactly the timeseries its panels query, and nothing else. Panels are ordinary Perses panels — edit queries, add panels, or retune them after import, and your changes reshape the demand automatically.

Thresholds are conservative starting points — tune them to your workload.

Was this page helpful?