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.
Prerequisites
Section titled “Prerequisites”- 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 port —
4317(gRPC) or4318(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:
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.
Logs and traces
Section titled “Logs and traces”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.
Demands
Section titled “Demands”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:
host-metrics-node-exporter-otel-demand-essentialDashboard — Load average, Memory utilization, Filesystem utilization, and Network I/O.
Alerts (4)
| Alert | Severity | Fires when |
|---|---|---|
| Host down or unreachable | critical | scrape up = 0 for 5m |
| Host load high (critical) | critical | 5m load > 3× cores for 10m |
| Host memory usage high (critical) | critical | memory used > 90% for 5m |
| Host filesystem usage high (critical) | critical | any mount > 90% for 10m |
Well-rounded overview. 1 dashboard · 7 panels · 6 alerts — adds memory breakdown, disk I/O, and network errors, with paired warning/critical thresholds. The recommended default.
Import this variant from the catalog. Its demand slug:
host-metrics-node-exporter-otel-demand-standardDashboard — everything in Essential, plus Memory usage by state, Disk I/O, and Network errors.
Alerts (6)
| Alert | Severity | Fires when |
|---|---|---|
| Host down or unreachable | critical | scrape up = 0 for 5m |
| Host load high (critical) | critical | 5m load > 3× cores for 10m |
| Host load high (warning) | warning | 5m load > 1.5× cores for 15m |
| Host memory usage high (critical) | critical | memory used > 90% for 5m |
| Host filesystem usage high (critical) | critical | any mount > 90% for 10m |
| Host filesystem usage high (warning) | warning | any mount > 80% for 15m |
Deep host + hardware visibility. 2 dashboards · 18 panels · 14 alerts — every subsystem plus a dedicated hardware dashboard — temperatures, fans, power draw, and ECC errors. For bare metal you need to diagnose, not just watch.
Import this variant from the catalog. Its demand slug:
host-metrics-node-exporter-otel-demand-extendedDashboards (2) — everything in Standard, plus CPU utilization, CPU by mode, Swap usage, Inode utilization, Disk operations, Disk busy time, Network dropped packets, Temperatures (°C), Fan speeds (RPM), CPU package power (W), and ECC memory errors. Panels are split across Host overview (14) and Hardware health (4).
Alerts (14)
| Alert | Severity | Fires when |
|---|---|---|
| Host down or unreachable | critical | scrape up = 0 for 5m |
| Host load high (critical) | critical | 5m load > 3× cores for 10m |
| Host load high (warning) | warning | 5m load > 1.5× cores for 15m |
| Host memory usage high (critical) | critical | memory used > 90% for 5m |
| Host memory usage high (warning) | warning | memory used > 80% for 15m |
| Host filesystem usage high (critical) | critical | any mount > 90% for 10m |
| Host filesystem usage high (warning) | warning | any mount > 80% for 15m |
| Host filesystem inodes high | warning | inodes > 85% for 15m |
| Host swap usage high | warning | swap used > 50% for 15m |
| Host network errors high | warning | error rate > 10/s for 5m |
| Host temperature high (warning) | warning | any sensor > 85°C for 15m |
| Host temperature high (critical) | critical | any sensor > 95°C for 5m |
| Host ECC memory errors (correctable) | warning | any corrected errors in 1h |
| Host ECC memory errors (uncorrectable) | critical | any uncorrected errors in 1h |
Dashboards
Section titled “Dashboards”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.
Alerts
Section titled “Alerts”Thresholds are conservative starting points — tune them to your workload.
Next steps
Section titled “Next steps”- Demand-driven observability — why importing a demand also shapes what your agents collect.
- Agent configuration — the full agent config surface.
Thanks for your feedback!
Report sent — thank you!