Download and install Prometheus
the latest version of Prometheus and run the checksum verification process to ensure that the downloaded file has not been tampered with.
Copy cd
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.55.0/prometheus-2.55.0.linux-amd64.tar.gz
echo "7a6b6d5ea003e8d59def294392c64e28338da627bf760cf268e788d6a8832a23 prometheus-2.55.0.linux-amd64.tar.gz" | sha256sum --check
Expected output: Verify output of the checksum verification
Copy prometheus-2.55.0.linux-amd64.tar.gz: OK
If checksum is verified, extract the files and move them into the /usr/local/bin
and /etc/prometheus
directories for neatness and best practice. Then, clean up the duplicated copies.
Copy tar xvf prometheus-2.55.0.linux-amd64.tar.gz
sudo cp prometheus-2.55.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.55.0.linux-amd64/promtool /usr/local/bin/
sudo cp -r prometheus-2.55.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.55.0.linux-amd64/console_libraries /etc/prometheus
sudo rm -r prometheus-2.55.0.linux-amd64 prometheus-2.55.0.linux-amd64.tar.gz
Create an account (prometheus
) without server access for Prometheus to run as a background service. This restricts potential attackers to only the Prometheus service in the unlikely event that they manage to infiltrate via a compromised client update.
Copy sudo useradd --no-create-home --shell /bin/false prometheus
Create a directory for Prometheus to store the monitoring data. Then set the owner of this and the /etc/prometheus
directory to prometheus
so that this user can read and write to the directories.
Copy sudo mkdir -p /var/lib/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus
Create a configuration file so that Prometheus knows where to pull data from.
Copy sudo nano /etc/prometheus/prometheus.yml
Paste the configuration parameters below into the file:
1) General + execution client parameters:
Nethermind Besu Geth Erigon Reth
Copy global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
- job_name: nethermind
static_configs:
- targets:
- localhost:6060
Copy global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
- job_name: 'besu'
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- localhost:9545
Copy global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
- job_name: 'geth'
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /debug/metrics/prometheus
scheme: http
static_configs:
- targets:
- localhost:6060
Copy global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
- job_name: 'erigon'
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /debug/metrics/prometheus
scheme: http
static_configs:
- targets:
- localhost:6060
Copy global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
- job_name: 'reth'
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: "/"
scheme: http
static_configs:
- targets:
- localhost:6060
2) Consensus client parameters:
According to your selected consensus client, append the following block to the general + execution client parameters above.
Teku Nimbus Lodestar Lighthouse Prysm
Copy - job_name: "teku_beacon" #for consensus client
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets: ["localhost:8009"]
- job_name: "teku_validator" #for validator client
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets: ["localhost:8108"]
Copy - job_name: 'Nimbus_beacon' #for consensus client
metrics_path: /metrics
static_configs:
- targets: ['localhost:8009']
- job_name: 'Nimbus_validator' #for validator client
metrics_path: /metrics
static_configs:
- targets: ['localhost:8108']
Copy - job_name: 'lodestar_beacon' #for consensus client
metrics_path: /metrics
static_configs:
- targets: ['localhost:8009']
- job_name: 'lodestar_validator' #for validator client
metrics_path: /metrics
static_configs:
- targets: ['localhost:5064']
Copy - job_name: 'lighthouse_beacon' #for consensus client
metrics_path: /metrics
static_configs:
- targets: ['localhost:8009']
- job_name: 'lighthouse_validator' #for validator client
metrics_path: /metrics
static_configs:
- targets: ['localhost:8108']
Copy - job_name: 'prysm_beacon' #for consensus client
metrics_path: /metrics
static_configs:
- targets: ['localhost:8009']
- job_name: 'prysm_validator' #for validator client
metrics_path: /metrics
static_configs:
- targets: ['localhost:8108']
Once you're done, save with Ctrl+O
and Enter
, then exit with Ctrl+X
.
Next, create a systemd configuration file for the Prometheus service to run in the background.
Copy sudo nano /etc/systemd/system/prometheus.service
Paste the configuration parameters below into the file:
Copy [Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
Once you're done, save with Ctrl+O
and Enter
, then exit with Ctrl+X
.
Start the Prometheus service
Reload the systemd daemon to register the changes made, start Prometheus, and check its status to make sure its running.
Copy sudo systemctl daemon-reload
sudo systemctl start prometheus.service
sudo systemctl status prometheus.service
Expected output: The output should say Prometheus is “active (running)”. Press CTRL-C to exit and Prometheus will continue to run.
Use the following command to check the logs for any warnings or errors:
Copy sudo journalctl -fu prometheus -o cat | ccze -A
Expected output:
Press CTRL-C
to exit.
If the Prometheus service is running smoothly, we can now enable it to fire up automatically when rebooting the system.
Copy sudo systemctl enable prometheus.service