Introduction
In this article I’m going to describe the process of monitoring your VMs (in my case hosted on ProxMox) with Prometheus.
Download Node Exporter
The first step is to set-up Node Exporter, which is a “Prometheus exporter for hardware and OS metrics exposed by *NIX kernels, written in Go with pluggable metric collectors”, on a VM we would like to monitor.
Get the latest version from the Prometheus downloads page, by copying the link address of the tarball you require
curl -LO <Link Address>
Then unpack the tarball
tar -xvf <file>
Move the binary to /usr/local/bin
sudo mv <unpacked directory>/node_exporter /usr/local/bin/
Create a Custom Node Exporter Service
Create a node_exporter
user to run the node exporter service
sudo useradd -rs /bin/false node_exporter
Create a node_exporter service file under systemd
sudo vi /etc/systemd/system/node_exporter.service
Add the following service file content to the service file and save it.
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Reload the system daemon and star the node exporter service.
sudo systemctl daemon-reload
sudo systemctl start node_exporter
Check the node exporter status to make sure it is running in the active state
sudo systemctl status node_exporter
Enable the node exporter service to the system startup
sudo systemctl enable node_exporter
Now, node exporter would be exporting metrics on port 9100. You can see all the server metrics by visiting your server URL on /metrics
.
Set-up Prometheus
On whichever host you want to host Prometheus, create a docker-compose.yml
file and add the following contents, substituting <path to directory>
to where you would like to keep your prometheus configuration file:
version: "3.3"
services:
prometheus:
image: prom/prometheus:v2.34.0
container_name: prometheus
networks:
- reporting
ports:
- 9090:9090
volumes:
- <path to directory>/prometheus.yml:/etc/prometheus/prometheus.yml
networks:
reporting:
Then create the prometheus.yml
in the location you have specified, and add the following:
global:
scrape_interval: 10s
scrape_configs:
- job_name: node
metrics_path: /metrics
static_configs:
- targets: [ '<vm-host>:9100' ]
Now start prometheus with docker-compose up -d
.
All being well, you should be able to navigate to http://<host ip>:9090/targets
and see a list of targets you have configured.
Setting up Grafana (Optional)
To use Grafana, add the following service to your docker-compose.yml
file
grafana:
image: grafana/grafana:8.4.4-ubuntu
container_name: grafana
networks:
- reporting
ports:
- 3000:3000
And start the container with docker-compose up -d
.
Configure Prometheus Data Source
Navigate to the Grafana UI at http://<host ip>:3000
and log in with the default username/password admin:admin
.
Then go to Configuration > Data sources > Add data source > Prometheus. Specify a name for the data source, the HTTP url of the Prometheus instance (http://prometheus:9090
if you’ve added everything as is detailed in this article) and click on Save & test
.
If you receive a “Data source is working” message, everything is working as intended.
Add a dashboard
Navigate to Create (+) > Import, add 13978
to Import via grafana.com
and click Load
. Select the Prometheus data source that you created before and clickImport
.
All being well, you should now have a good starting place to monitor your VMs.