Monitoreo de servicios con Prometheus y Grafana

Instalar Prometheus

Instalar Prometheus

Crearemos un usuario de sistema y un grupo dedicado para Prometheus. El parámetro –system se utiliza para este propósito.

# groupadd --system prometheus

Un grupo con ID < 1000 es un grupo de sistema. Una vez añadido al grupo de sistema, creamos el usuario del sistema Prometheus y asignamos el grupo creado. Como no necesita el shell /bin/bash, usamos -s /sbin/nologin

# useradd -s /sbin/nologin --system -g prometheus prometheus

Configuración y directorios de datos

Prometheus necesita un directorio para almacenar sus datos. Lo crearemos en /var/lib/prometheus.

# mkdir /var/lib/prometheus

El directorio principal de archivos de configuración de Prometheus es /etc/prometheus/. Tendrá algunos subdirectorios:

# for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done

Descarga e instalación

Descargamos la última versión de Prometheus. Podés comprobar las versiones en Github.

# mkdir -p /tmp/prometheus && cd /tmp/prometheus
# curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest \
 | grep browser_download_url \
 | grep linux-amd64 \
 | cut -d '"' -f 4 \
 | wget -qi -

Nota: El comando anterior no muestra progreso, uno puede sentirse tentado a abortar el proceso. Paciencia.
Extraemos los archivos.

# tar xvf prometheus*.tar.gz
# cd prometheus*/

Movemos los binarios a /usr/local/bin/.

# mv prometheus promtool /usr/local/bin/

Verificamos la versión instalada

# prometheus --version
prometheus, version 2.23.0 (branch: HEAD, revision: 26d89b4b0776fe4cd5a3656dfa520f119a375273)
 build user: root@37609b3a0a21
 build date: 20201126-10:56:17
 go version: go1.15.5
 platform: linux/amd64
# promtool --version
promtool, version 2.23.0 (branch: HEAD, revision: 26d89b4b0776fe4cd5a3656dfa520f119a375273)
 build user: root@37609b3a0a21
 build date: 20201126-10:56:17
 go version: go1.15.5
 platform: linux/amd64

Movemos la plantilla de configuración de prometheus al directorio /etc/prometheus.

# mv prometheus.yml /etc/prometheus/prometheus.yml

También movemos consoles y console_libraries al directorio /etc/prometheus:

# mv consoles/ console_libraries/ /etc/prometheus/
# cd ~/
# rm -rf /tmp/prometheus

Archivo de configuración

# nano /etc/prometheus/prometheus.yml

El archivo de configuración predeterminado es similar al siguiente.

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

Nota: La sección scrape_configs no puede arrancar en la columna 0.

Crear un archivo de unidad de servicio systemd para Prometheus

Para poder gestionar el servicio Prometheus con systemd, es necesario definir explícitamente este archivo.

tee /etc/systemd/system/prometheus.service<<EOF
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
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
EOF

Cambiamos la propiedad de los directorios y archivos al usuario y grupo de Prometheus.

# for i in rules rules.d files_sd; do chown -R prometheus:prometheus /etc/prometheus/${i}; done
# for i in rules rules.d files_sd; do chmod -R 775 /etc/prometheus/${i}; done
# chown -R prometheus:prometheus /var/lib/prometheus/

Recargamos el demonio de systemd e iniciamos el servicio.

# systemctl daemon-reload
# systemctl start prometheus
# systemctl enable prometheus

Verificamos que el servicio se está ejecutando.

# systemctl status prometheus
● prometheus.service - Prometheus
 Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor prese
 Active: active (running) since Wed 2020-12-23 10:24:58 -03; 4min 28s ago
 Docs: https://prometheus.io/docs/introduction/overview/
 Main PID: 30863 (prometheus)
 Tasks: 12 (limit: 4915)
 CGroup: /system.slice/prometheus.service
 └─30863 /usr/local/bin/prometheus --config.file=/etc/prometheus/prome
dic 23 10:24:59 hostprometheus prometheus[30863]: level=info ts=2020-12-23T13:24:59.44

Confirmamos que podemos conectarnos al puerto 9090 accediendo la interfaz web de Prometheus en http://[ip_host]:9090 desde algún navegador web.