2. Prometheus setup

2.1 Install Prometheus

2.1.1 Create group and user for Prometheus:

root@deploymentmachine:/home# id
uid=0(root) gid=0(root) groups=0(root)
root@deploymentmachine:/home# groupadd --system prometheus
root@deploymentmachine:/home# useradd -s /sbin/nologin --system -g prometheus prometheus

2.1.2 Create directories for Prometheus:

root@deploymentmachine:/home# id
uid=0(root) gid=0(root) groups=0(root)
root@deploymentmachine:/home#  mkdir -p /var/lib/prometheus
root@deploymentmachine:/home# mkdir -p /etc/prometheus/
root@deploymentmachine:/home# cd /etc/prometheus/
root@deploymentmachine:/etc/prometheus# mkdir {rules,rules.d}

2.1.3 Download the latest version from the official repository:

root@deploymentmachine:/home# curl -s https://github.com/prometheus/prometheus/releases | grep latest
<div class="release pt-2 pt-md-0 pb-3 pb-md-0 clearfix label-latest">
            <a class="border-0 Label--outline-green" href="/prometheus/prometheus/releases/latest">Latest release</a>
              <a class="border-0 Label--outline-green" href="/prometheus/prometheus/releases/latest">Latest release</a>
root@deploymentmachine:/home#

better use api.github.com endpoints...

root@deploymentmachine:/home# curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest |\
grep browser_download_url | \
grep linux-amd64.tar.gz | \
awk '{gsub(/"/, "", $2); print $2}' | wget -qi -
root@deploymentmachine:/home#
root@deploymentmachine:/home# ls -ltr prom*
-rw-r--r-- 1 root root 65509305 Jan 20 02:12 prometheus-2.24.1.linux-amd64.tar.gz

... and untar for extracting files:

root@deploymentmachine:/home# tar xvf prom*.tar.gz
root@deploymentmachine:/home# ls prom*
prometheus-2.24.1.linux-amd64.tar.gz

prometheus-2.24.1.linux-amd64:
LICENSE  NOTICE  console_libraries  consoles  prometheus  prometheus.yml  promtool
root@deploymentmachine:/home#

2.4 Move the following files under /usr/local/bin, respectively /etc/prometheus

root@deploymentmachine:/home# cd prom*/
root@deploymentmachine:/home/prometheus-2.24.1.linux-amd64# mv prometheus promtool /usr/local/bin/
root@deploymentmachine:/home/prometheus-2.24.1.linux-amd64# mv prometheus.yml  /etc/prometheus/prometheus.yml
root@deploymentmachine:/home/prometheus-2.24.1.linux-amd64# mv consoles/ console_libraries/ /etc/prometheus/

2.2. Configure Prometheus

2.2.1 Create a systemd file for Prometheus service, with following content:

root@deploymentmachine:/home# cat /etc/systemd/system/prometheus.service
[Unit]
 Description=Prometheus
 Documentation=https://prometheus.io/docs/introduction/overview/
 Wants=network-online.target
 After=network-online.target

 [Service]
 Type=simple
 Environment="GOMAXPROCS=1"
 User=prometheus
 Group=prometheus
 ExecReload=/bin/kill -HUP $MAINPID
 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 \
 --web.listen-address=0.0.0.0:9090 \
 --web.external-url=

 SyslogIdentifier=prometheus
 Restart=always

 [Install]
 WantedBy=multi-user.target

The configuration file prometheus.yml that has been moved under /etc/prometheus/prometheus.yaml should have the following content:

root@deploymentmachine:/home# more /etc/prometheus/prometheus.yml

******** prometheus: Not a text file ********

root@deploymentmachine:/home/tests/mydb/chew/prometheus-2.24.1.linux-amd64# more prometheus.yml
# 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

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# 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']

We will use this file for addition of targets and job_names for our MySQL services

2.2.2 Change ownership and permission of folder /etc/prometheus:

root@deploymentmachine:/home# chown -R prometheus:prometheus /etc/prometheus/
root@deploymentmachine:/home# chmod -R 775 /etc/prometheus/

2.2.3. Reload and start the Prometheus service:

root@deploymentmachine:/home# systemctl daemon-reload
root@deploymentmachine:/home# systemctl enable prometheus
root@deploymentmachine:/home# systemctl start prometheus

2.2.4 Perform checking

a) Check if the port 9090 is listening:

root@deploymentmachine:/home# lsof -i :9090
COMMAND     PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
prometheu 20617 prometheus    8u  IPv6 235347      0t0  TCP *:9090 (LISTEN)

b) Check the status of the service

root@deploymentmachine:/home# systemctl status prometheus.service  | grep active
     Active: active (running) since Tue 2021-02-02 15:38:57 UTC; 2h 20min ago

c) Open a browser of your choice, and see if you can reach Prometheus at Public IP of your Cloud instance, and port 9090:

Last updated