Download and install Prometheus
Download 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
Each downloadable file comes with it's own checksum. Replace the actual checksum and URL of the download link in the code block above.
Make sure to choose the amd64 version. Right click on the linked text and select "copy link address" to get the URL of the download link to curl
.
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
Configure Prometheus
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:8009
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