Skip to main content

Prometheus - Raspberry PI Node Exporter Install

This is to install the node exporter on a raspberry pi for Prometheus to scrap.

Step1: Download

Install the node exporter for Prometheus on your Raspberry Pi

You will need to look at here for the current version of the node exporter from github

https://github.com/prometheus/node_exporter/releases

Step2: Install

Log into your raspberry pi

Once you have the latest located from step 1 then right click on it to get the link copied in your clipboard, for this example we are using 1.91 version

wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-armv7.tar.gz

Now un-tar the release using this command.

tar -xvzf node_exporter-1.9.1.linux-armv7.tar.gz

This will un-tar the files into a sub-directory that looks like this.

node_exporter-1.9.1.linux-armv7/
node_exporter-1.9.1.linux-armv7/node_exporter
node_exporter-1.9.1.linux-armv7/NOTICE
node_exporter-1.9.1.linux-armv7/LICENSE

The only file we need out of the expanded tarball is the node_exporter binary. Copy that file to /usr/local/bin.

sudo cp node_exporter-1.9.1.linux-armv7/node_exporter /usr/local/bin

Use the chmod command to make the node_exporter binary executable.

sudo chmod +x /usr/local/bin/node_exporter

Step 3 – Setup systemd unit file

Next step, setting up the unit file. The unit file will allow us to control the service via the systemctl command. Additionally it will ensure node_exporter starts on boot.

Create a file called node_exporter.service in the /etc/sytemd/system directory. The full path to the file should be:

sudo nano /etc/systemd/system/node_exporter.service

Put the following contents into the file:

[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
#User=pi  # Or the user you want to run it as, or leave commented out for default
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

Now lets reload systemd, enable and start the service.

sudo systemctl daemon-reload 
sudo systemctl enable node_exporter.service
sudo systemctl start node_exporter.service
sudo systemctl status node_exporter

Step4: Test

You can test if the setup works this way as well

curl http://localhost:9100

Next steps on Prometheus

Now you should add the metrics endpoint as a target to your Prometheus server. You can do this by editing the prometheus configuration file on your prometheus server. For reference mine looks like this.

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
    - targets: ['localhost:9090']

  - job_name: 'raspberry_pi'
    scrape_interval: 5s
    static_configs:
    - targets: ['pi1.sflservicesllc.com::9100','pi2.sflservicesllc.com:9100']

This is the standard prometheus config file. However I added the following target at the end for my Raspberry Pi:

- job_name: 'pi1'
    scrape_interval: 5s
    static_configs:
    - targets: ['pi1.sflservicesllc.com::9100']

The IP address of my Raspberry Pi is 10.1.100.2. The Port 9100 corresponds is the port used by node_exporter.

Restart Prometheus server to start scrapping