node_exporter is a free, open source monitoring & observability project written in Go and released under Apache-2.0. It has 13,785 GitHub stars, 2,710 forks and 314 open issues, and was last pushed 15 days ago. On this registry it ranks #30 of 97 tracked projects in Monitoring & Observability, with 5 head-to-head comparisons available. It gained 4 stars over the last 3 tracked days.

What is node_exporter?

What it is

Node exporter is a Prometheus exporter for hardware and OS metrics exposed by *NIX kernels. It is written in Go and ships with pluggable metric collectors, so the set of measurements it gathers can be tuned per host rather than fixed at build time. The project lives in the Prometheus ecosystem, is published under the Apache-2.0 license, and has been developed for roughly thirteen years, with the repository showing 13,782 stars and 2,708 forks at the time of writing.

The concrete problem it solves is the gap between a running machine and a monitoring system that needs numbers about that machine. Prometheus scrapes HTTP endpoints, but kernels do not expose CPU, memory, filesystem, disk, and network state in a scrape-ready format. Node exporter bridges that gap by reading kernel and system interfaces and republishing them as Prometheus metrics on a single HTTP endpoint, listening on port 9100 by default. It is the standard way to bring host-level telemetry into a Prometheus deployment without writing custom collection code for each operating system.

Key capabilities

  • Exposes hardware and OS metrics from *NIX kernels over HTTP for Prometheus scraping.
  • Provides pluggable collectors, enabled with --collector. flags and disabled with --no-collector. flags.
  • Supports --collector.disable-defaults to start from an empty collector set and enable only what is needed.
  • Offers include and exclude flags on selected collectors, such as --collector.filesystem.mount-points-exclude, to filter by device or mount point pattern.
  • Covers collectors including arp, cpu, diskstats, ethtool, and filesystem, with support varying by operating system.
  • Runs as a single Go binary with no runtime dependency on an external database or message broker.

Who uses it and how

  • Operators monitoring bare-metal and virtual Linux hosts alongside a Prometheus server that scrapes port 9100.
  • Enterprise Linux and Fedora administrators installing the packaged build golang-github-prometheus-node-exporter from EPEL 7, 8, or 9.
  • Teams automating rollout with the Prometheus Community Ansible role.
  • Container-based deployments running quay.io/prometheus/node-exporter:latest with host networking, host PID, and a read-only bind mount of / to /host, passing --path.rootfs=/host so the exporter reads the host filesystem rather than the container's.
  • Hosts where the timex collector is required, which needs the additional --cap-add=SYS_TIME Docker flag for the underlying syscalls.

Getting started

Install from distribution packages, the Prometheus Community Ansible role, or the container image quay.io/prometheus/node-exporter:latest. Run the binary or container and point Prometheus at the default HTTP port 9100; the project links a step-by-step guide on prometheus.io for newcomers.

When to use

project readme (upstream, from github) — read inline

Node exporter

Build Status bsd workflow golangci-lint workflow [Docker Repository on Quay][quay] [Docker Pulls][hub] [Go Report Card][goreportcard]

Prometheus exporter for hardware and OS metrics exposed by *NIX kernels, written in Go with pluggable metric collectors.

The Windows exporter is recommended for Windows users. To expose NVIDIA GPU metrics, prometheus-dcgm can be used.

Installation and Usage

If you are new to Prometheus and node_exporter there is a simple step-by-step guide.

The node_exporter listens on HTTP port 9100 by default. See the --help output for more options.

Linux distribution packages

On Enterprise Linux (RHEL, CentOS Stream, Rocky Linux, AlmaLinux) and Fedora, node_exporter is packaged in EPEL as golang-github-prometheus-node-exporter (available for EPEL 7, 8 and 9):

Ansible

For automated installs with Ansible, there is the Prometheus Community role.

Docker

The node_exporter is designed to monitor the host system. Deploying in containers requires extra care in order to avoid monitoring the container itself.

For situations where containerized deployment is needed, some extra flags must be used to allow the node_exporter access to the host namespaces.

Be aware that any non-root mount points you want to monitor will need to be bind-mounted into the container.

If you start a container for host monitoring, specify the path.rootfs argument. This argument must match path in bind-mount of host root. The node_exporter will use path.rootfs as prefix to access host filesystem.

docker run -d \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host

For Docker compose, similar flag changes are needed.

---
version: '3.8'

services:
  node_exporter:
    image: quay.io/prometheus/node-exporter:latest
    container_name: node_exporter
    command:
      - '--path.rootfs=/host'
    network_mode: host
    pid: host
    restart: unless-stopped
    volumes:
      - '/:/host:ro,rslave'

On some systems, the timex collector requires an additional Docker flag, --cap-add=SYS_TIME, in order to access the required syscalls.

Collectors

There is varying support for collectors on each operating system. The tables below list all existing collectors and the supported systems.

Collectors are enabled by providing a --collector. flag. Collectors that are enabled by default can be disabled by providing a --no-collector. flag. To enable only some specific collector(s), use --collector.disable-defaults --collector. ....

Include & Exclude flags

A few collectors can be configured to include or exclude certain patterns using dedicated flags. The exclude flags are used to indicate "all except", while the include flags are used to say "none except". Note that these flags are mutually exclusive on collectors that support both.

Example:

--collector.filesystem.mount-points-exclude=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/.+)($|/)

List:

Collector Scope Include Flag Exclude Flag
arp device --collector.arp.device-include --collector.arp.device-exclude
cpu bugs --collector.cpu.info.bugs-include N/A
cpu flags --collector.cpu.info.flags-include N/A
diskstats device --collector.diskstats.device-include --collector.diskstats.device-exclude
ethtool device --collector.ethtool.device-include --collector.ethtool.device-exclude
ethtool metrics --collector.ethtool.metrics-include N/A
filesystem fs-types --collector.filesystem.fs-types-include --collector.filesystem.fs-types-exclude
filesystem mount-points --collector.filesystem.mount-points-include --collector.filesystem.mount-points-exclude
hwmon chip --collector.hwmon.chip-include --collector.hwmon.chip-exclude
hwmon sensor --collector.hwmon.sensor-include --collector.hwmon.sensor-exclude
infiniband device --collector.infiniband.device-include --collector.infiniband.device-exclude
interrupts name --collector.interrupts.name-include --collector.interrupts.name-exclude
netdev device --collector.netdev.device-include --collector.netdev.device-exclude
qdisc device --collector.qdisc.device-include --collector.qdisc.device-exclude
slabinfo slab-names --collector.slabinfo.slabs-include --collector.slabinfo.slabs-exclude
sysctl all --collector.sysctl.include N/A
systemd unit --collector.systemd.unit-include --collector.systemd.unit-exclude

Enabled by default

Name Description OS
arp Exposes ARP statistics from /proc/net/arp. Linux
bcache Exposes bcache statistics from /sys/fs/bcache/. Linux
bonding Exposes the number of configured and active slaves of Linux bonding interfaces. Linux
btrfs Exposes btrfs statistics Linux
boottime Exposes system boot time derived from the kern.boottime sysctl. Darwin, Dragonfly, FreeBSD, NetBSD, OpenBSD, Solaris
conntrack Shows conntrack statistics (does nothing if no /proc/sys/net/netfilter/ present). Linux
cpu Exposes CPU statistics Darwin, Dragonfly, FreeBSD, Linux, Solaris, OpenBSD
cpufreq Exposes CPU frequency statistics Linux, Solaris
diskstats Exposes disk I/O statistics. Darwin, Linux, OpenBSD
dmi Expose Desktop Management Interface (DMI) info from /sys/class/dmi/id/ Linux
dmmultipath Exposes DM-multipath device and path metrics from /sys/block/dm-*. Linux
edac Exposes error detection and correction statistics. Linux
entropy Exposes available entropy. Linux
exec Exposes execution statistics. Dragonfly, FreeBSD
fibrechannel Exposes fibre channel information and statistics from /sys/class/fc_host/. Linux
filefd Exposes file descriptor statistics from /proc/sys/fs/file-nr. Linux
filesystem Exposes filesystem statistics, such as disk space used. Darwin, Dragonfly, FreeBSD, Linux, OpenBSD
hwmon Expose hardware monitoring and sensor data from /sys/class/hwmon/. Linux
infiniband Exposes network statistics specific to InfiniBand and Intel OmniPath configurations. Linux
ipvs Exposes IPVS status from /proc/net/ip_vs and stats from /proc/net/ip_vs_stats. Linux
kernel_hung Exposes number of tasks that have been detected as hung from /proc/sys/kernel/hung_task_detect_count. Linux
loadavg Exposes load average. Darwin, Dragonfly, FreeBSD, Linux, NetBSD, OpenBSD, Solaris
mdadm Exposes statistics about devices in /proc/mdstat (does nothing if no /proc/mdstat present). Linux
meminfo Exposes memory statistics. Darwin, Dragonfly, FreeBSD, Linux, OpenBSD
netclass Exposes network interface info from /sys/class/net/ Linux
netdev Exposes network interface statistics such as bytes transferred. Darwin, Dragonfly, FreeBSD, Linux, OpenBSD
netisr Exposes netisr statistics FreeBSD
netstat Exposes network statistics from /proc/net/netstat. This is the same information as netstat -s. Linux
nfs Exposes NFS client statistics from /proc/net/rpc/nfs. This is the same information as nfsstat -c. Linux
nfsd Exposes NFS kernel server statistics from /proc/net/rpc/nfsd. This is the same information as nfsstat -s. Linux
nvme Exposes NVMe info from /sys/class/nvme/ Linux
os Expose OS release info from /etc/os-release or /usr/lib/os-release any
powersupplyclass Exposes Power Supply statistics from /sys/class/power_supply Linux
pressure Exposes pressure stall statistics from /proc/pressure/. Linux (kernel 4.20+ and/or CONFIG_PSI)
rapl Exposes various statistics from /sys/class/powercap. Linux
schedstat Exposes task scheduler statistics from /proc/schedstat. Linux
selinux Exposes SELinux statistics. Linux
sockstat Exposes various statistics from /proc/net/sockstat. Linux
softnet Exposes statistics from /proc/net/softnet_stat. Linux
stat Exposes various statistics from /proc/stat. This includes boot time, forks and interrupts. Linux
tapestats Exposes statis

readme truncated — read the full docs on github

Frequently asked questions

Is node_exporter free to use?

node_exporter is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does node_exporter do?

Exporter for machine metrics

What is node_exporter written in?

node_exporter is primarily written in Go. Its source is publicly available at https://github.com/prometheus/node_exporter, and it has 13,785 GitHub stars.