Deploying a Prometheus and node exporter monitoring stack gives a Linux host its first host-metric scrape path without adding Grafana or Alertmanager. Node exporter serves CPU, memory, filesystem, network, and kernel metrics on port 9100, and Prometheus stores those samples so they can be queried from the local monitoring server.
Ubuntu and Debian packages provide managed prometheus and prometheus-node-exporter services. The package-managed layout keeps both daemons under systemd and uses /etc/prometheus/prometheus.yml as the active configuration file.
A single-host layout is enough for a first monitoring baseline or lab stack. Keep 9100 reachable only from Prometheus or a trusted monitoring network, then confirm success by querying up{job=“node”} and a node_ metric from Prometheus.
Steps to deploy a Prometheus and node exporter monitoring stack:
- Open a terminal with sudo privileges.
- Refresh the package index.
$ sudo apt update
- Install Prometheus and node exporter.
$ sudo apt install prometheus prometheus-node-exporter
Ubuntu and Debian package node exporter as prometheus-node-exporter, with a service unit named prometheus-node-exporter.service.
- Enable and start both services.
$ sudo systemctl enable --now prometheus prometheus-node-exporter
- Check the Prometheus readiness endpoint.
$ curl --silent --show-error http://127.0.0.1:9090/-/ready Prometheus Server is Ready.
- Check the local node exporter metrics endpoint.
$ curl --silent --show-error http://127.0.0.1:9100/metrics # HELP node_load1 1m load average. # TYPE node_load1 gauge node_load1 1.45 # HELP node_load15 15m load average. # TYPE node_load15 gauge node_load15 1.04 node_uname_info{domainname="(none)",machine="x86_64",nodename="linux-host",release="6.12.76",sysname="Linux",version="#1 SMP Wed May 13 14:27:36 UTC 2026"} 1 ##### snipped #####A local response with node_ metrics confirms node exporter is ready for a Prometheus scrape job. Use the monitored host name or IP address instead of 127.0.0.1 when node exporter runs on another server.
- Open the active Prometheus configuration file.
$ sudo vi /etc/prometheus/prometheus.yml
Use the path from the running --config.file flag when Prometheus was installed outside the distro package layout.
- Add the node exporter scrape job under scrape_configs.
scrape_configs: - job_name: prometheus static_configs: - targets: - 127.0.0.1:9090 - job_name: node static_configs: - targets: - 127.0.0.1:9100
Keep existing scrape jobs in place. Write targets as host and port only, without http:// or https:// prefixes.
Related: How to add a Prometheus scrape config
Related: How to configure Prometheus to scrape node exporter
Tool: Prometheus Scrape Config Generator - Check the updated configuration with promtool.
$ promtool check config /etc/prometheus/prometheus.yml Checking /etc/prometheus/prometheus.yml SUCCESS: /etc/prometheus/prometheus.yml is valid prometheus config file syntax
Related: How to test Prometheus configuration
- Reload Prometheus with systemd.
$ sudo systemctl reload prometheus
The package service reloads by sending SIGHUP. Use the lifecycle endpoint only when Prometheus was started with --web.enable-lifecycle.
Related: How to reload Prometheus configuration
Related: How to manage the Prometheus service with systemctl - Check the node exporter target state from Prometheus.
$ promtool query instant http://127.0.0.1:9090 'up{job="node"}' up{instance="127.0.0.1:9100", job="node"} => 1 @[1781952016.36]Value 1 means the latest scrape succeeded. Value 0 means the job exists, but the latest scrape failed.
- Query a host metric from the new stack.
$ promtool query instant http://127.0.0.1:9090 'node_uname_info{job="node"}' node_uname_info{domainname="(none)", instance="127.0.0.1:9100", job="node", machine="x86_64", nodename="linux-host", release="6.12.76", sysname="Linux", version="#1 SMP Wed May 13 14:27:36 UTC 2026"} => 1 @[1781952016.374]A returned node_ metric proves Prometheus is not only listing the target, but also storing host metrics from node exporter.
Related: How to run a PromQL query in Prometheus
Mohd Shakir Zakaria is a cloud architect with deep roots in software development and open-source advocacy. Certified in AWS, Red Hat, VMware, ITIL, and Linux, he specializes in designing and managing robust cloud and on-premises infrastructures.