How to Install Grafana and Prometheus on Ubuntu 24.04
This guide provides a secure and efficient method for deploying a monitoring stack on Ubuntu 24.04. You will install Prometheus to collect metrics, Node Exporter to expose system metrics, Grafana to visualize the data, and Nginx as a secure reverse proxy for Grafana.
Part 1 — Install Grafana and Nginx Reverse Proxy
First, we will install Grafana from its official repository and configure Nginx to manage access to it.
- Install Dependencies and Grafana’s GPG Key:
sudo apt update
sudo apt install -y apt-transport-https software-properties-common wget gpg
wget -q -O - https://packages.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/grafana.gpg > /dev/null
- Add the Grafana Repository:
echo "deb [signed-by=/etc/apt/trusted.gpg.d/grafana.gpg] https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
- Install and Start Grafana:
sudo apt update
sudo apt install -y grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
- Install and Configure Nginx: Install Nginx, which will act as a reverse proxy.
sudo apt install -y nginx
- Create a new Nginx configuration file for Grafana
.
sudo nano /etc/nginx/sites-available/grafana
- Paste the following configuration. Replace
your_domain.com
with your server’s actual domain name or IP address.
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- Enable the new site by creating a symbolic link and restart Nginx.
sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/
sudo nginx -t # Test the configuration
sudo systemctl restart nginx
- You should now be able to access the Grafana login page at
http://your_domain.com
. Log in with the default credentialsadmin
/admin
and change the password immediately.

Part 2 — Install and Configure Prometheus
Next, we will manually install and configure Prometheus.
- Create Prometheus User and Directories:
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
sudo mkdir -p /etc/prometheus /var/lib/prometheus
- Download and Install Prometheus: Navigate to the official Prometheus downloads page and copy the link for the latest
linux-amd64
binary.
# Replace the URL with the link you copied
PROMETHEUS_URL="https://github.com/prometheus/prometheus/releases/download/v2.53.1/prometheus-2.53.1.linux-amd64.tar.gz"
cd /tmp
wget ${PROMETHEUS_URL}
tar xvf prometheus-*.linux-amd64.tar.gz
cd prometheus-*.linux-amd64/
sudo mv prometheus promtool /usr/local/bin/
sudo mv prometheus.yml /etc/prometheus/prometheus.yml
- Set Ownership and Permissions:
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo chmod -R 755 /etc/prometheus /var/lib/prometheus
- Create the Prometheus Systemd Service:
sudo nano /etc/systemd/system/prometheus.service
- Paste in the following service definition.
[Unit]
Description=Prometheus Time Series Collection and Processing Server
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.listen-address=0.0.0.0:9090
[Install]
WantedBy=multi-user.target
Now start and enable the prometheus service
systemctl start prometheus.service
systemctl enable prometheus.service

Part 3 — Install and Configure Node Exporter
Node Exporter exposes hardware and OS metrics from your server.
- Create Node Exporter User:
sudo useradd -s /sbin/nologin --system node_exporter
- Download and Install Node Exporter: Get the latest
linux-amd64
download link from the Prometheus downloads page
# Replace the URL with the link you copied
NODE_EXPORTER_URL="https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz"
cd /tmp
wget ${NODE_EXPORTER_URL}
tar xvf node_exporter-*.linux-amd64.tar.gz
cd node_exporter-*.linux-amd64/
sudo mv node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
- Create the Node Exporter Systemd Service:
sudo nano /etc/systemd/system/node_exporter.service
[Unit]
Description=Prometheus Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
- Start and enable the service.
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

Part 4 — Connect Node Exporter and Grafana
Finally, tell Prometheus to scrape metrics from Node Exporter, and then add Prometheus as a data source in Grafana.

- Add Node Exporter to Prometheus Scrape Config: Edit the Prometheus configuration file.
sudo nano /etc/prometheus/prometheus.yml
- At the end of the
scrape_configs:
section, add the following job. Uselocalhost
as the target since it’s running on the same machine.YAML
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node_exporter"
static_configs:
- targets: ["localhost:9100"]
- Restart Prometheus to apply the new configuration.
sudo systemctl restart prometheus
- You can visit
http://your_domain.com:9090
and check the “Status” -> “Targets” page to confirm both targets are UP. - Add Prometheus as a Grafana Data Source:
- Log in to your Grafana instance (
http://your_domain.com
). - Navigate to Connections > Data sources.
- Click Add new data source and select Prometheus.
- In the Prometheus server URL field, enter
http://localhost:9090
. - Click Save & test. You should see a “Data source is working” message.
- Log in to your Grafana instance (
You can now navigate to “Dashboards” and import a pre-built dashboard, such as the “Node Exporter Full” dashboard (ID: 1860
), to instantly visualize your server’s metrics.
Recent Comments