How to install Node Exporter for Prometheus on Ubuntu Server


In our previous post, we installed a Prometheus server on Ubuntu. Now let's talk about how Prometheus actually gathers data — and why we need Node Exporter to do it.

Prometheus uses a pull model. It does not wait for systems to send data. Instead, it reaches out to a configured list of targets at a fixed interval and scrapes an HTTP endpoint that exposes metrics. That endpoint must speak the Prometheus text-based exposition format. This is where Node Exporter comes in.


What Is Node Exporter?

Node Exporter is an official Prometheus exporter maintained by the Prometheus project. It runs as a process on the machine we want to monitor. It reads data from the Linux kernel — CPU usage, memory, disk I/O, network traffic, filesystem stats, and more — and exposes that data at a local HTTP endpoint on port 9100.

When Prometheus scrapes http://<host>:9100/metrics, it gets a snapshot of the machine's health at that moment.


Why Is Node Exporter Necessary? Is it required for Mule?

Prometheus has no built-in way to read host-level metrics from Linux. It monitors itself and knows how to scrape other Prometheus-compatible endpoints, but it cannot talk directly to the kernel. Node Exporter fills that gap.

In a Mule-based observability stack using Prometheus, a Node Exporter will be necessary for Standalone or Runtime Fabric deployments. The Node Exporter will be installed on the Standalone node or the K8s worker nodes that host Runtime Fabric. That allows us to monitor the health of the infrastructure supporting our Mule runtimes and answer questions like:
  • CPU — is the host saturated?
  • Disk — are logs or persistence layers filling up?
  • Network — is there packet loss or saturation on the host?
Node Exporter feeds all of this into Prometheus. Combined with Mule's own application metrics, we get full-stack visibility.


Node Exporter Installation on Ubuntu

Now that we know how Node Exporter can help us in our Observability stack, let’s see the installation steps for a Node Exporter on Ubuntu. This post is for getting Node Exporter running quickly on a single Ubuntu machine. We will install it, run it as a foreground process, confirm it exposes metrics, and add it as a scrape target in Prometheus.
Note: This is a development or testing setup. Do not use it in production. In our next post we will cover the production-grade approach.


Prerequisites

  • Ubuntu 20.04 or 22.04 server
  • A running Prometheus server (see the post How to Install Prometheus on Ubuntu Server)
  • A user with sudo privileges
  • Internet access on the target machine


Step 1 — Create a Dedicated System User

We never run exporters as root. Let's create a system user with no login shell and no home directory.

sudo useradd --no-create-home --shell /bin/false node_exporter

This user will own only the Node Exporter binary. It cannot log in. It cannot write files outside its scope.


Step 2 — Download Node Exporter

Go to the official Prometheus downloads page and copy the link for the latest Linux AMD64 release. At the time of writing, the current stable version is 1.10.2


Open a terminal to your Ubuntu server and run:

cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz

Verify the download with the checksum published on the releases page:

sha256sum node_exporter-1.10.2.linux-amd64.tar.gz

Compare the output against the .sha256 file on GitHub. They must match before we proceed.


Step 3 — Extract and Install the Binary

tar xvfz node_exporter-1.10.2.linux-amd64.tar.gz

This creates a directory named 
node_exporter-1.10.2.linux-amd64. Inside it, the only file we need is the node_exporter binary.

Copy it to /usr/local/bin:

sudo cp node_exporter-1.10.2.linux-amd64/node_exporter /usr/local/bin/

Set the correct ownership:

sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

Clean up the download files:

rm -rf /tmp/node_exporter-1.10.2.linux-amd64*


Step 4 — Run Node Exporter

Switch to the node_exporter user and start the process:

sudo -u node_exporter /usr/local/bin/node_exporter

The terminal will show output like this:



Node Exporter is now running and listening on port 9100. Leave this terminal open.


Step 5 — Test the Metrics Endpoint

Open a second terminal session on the same machine and run:

curl http://localhost:9100/metrics

We will see a large block of text that looks like this:


Each line that does not start with # is a metric. The # HELP lines describe the metric. The # TYPE lines declare its type (counter, gauge, histogram, summary). This is the Prometheus exposition format.


Step 6 — Open Port 9100 in the Firewall

Our Prometheus server needs to reach port 9100 on this machine. Before doing any test from the Prometheus server makes sure this port is open for the Prometheus server to access the Node Exporter endpoint.


Step 7 — Add the Node Exporter as a Scrape Target in Prometheus

On the Prometheus server machine, open the Prometheus configuration file:

sudo nano /etc/prometheus/prometheus.yml

Find the 
scrape_configs section. Add a new job entry for Node Exporter:

scrape_configs:

- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']

- job_name: 'node_exporter'
static_configs:
- targets: ['<NODE_EXPORTER_HOST_IP>:9100']

Replace 
<NODE_EXPORTER_HOST_IP> with the actual IP address or DNS name of the machine running Node Exporter.
Save and close the file.


Step 8 — Reload Prometheus

Prometheus supports a hot reload without a full restart. Send it a SIGHUP signal:

sudo systemctl reload prometheus

If Prometheus is not running as a systemd service yet, use:

kill -HUP $(pgrep prometheus)


Step 9 — Verify the Target in Prometheus UI

Open a browser and go to:

http://<PROMETHEUS_SERVER_IP>:9090/targets

We will see two targets listed. The 
node_exporter job should show state UP with a green badge. If it shows DOWN, double-check the IP address in prometheus.yml, confirm port 9100 is open, and make sure Node Exporter is still running.


Step 10 — Run a Test Query

In the Prometheus UI, go to the Graph tab and enter this query in the expression bar:

node_cpu_seconds_total

Click 
Execute. Prometheus will return current CPU counters from the Node Exporter target. We now have a working scrape pipeline from Prometheus to a Linux host.


Summary

We installed Node Exporter, ran it as a foreground process, tested the metrics endpoint, and connected it to our Prometheus server. We can now query host-level metrics from any machine running Node Exporter.

However, this setup has a critical limitation: if the terminal closes, Node Exporter stops. A production system cannot depend on a foreground process. In the next post, we set up Node Exporter the right way — as a managed systemd service.

Previous Post Next Post