Instalación y configuración de Prometheus + Grafana / CentOS8.

Ismael Aguilera
6 min readAug 5, 2021

--

Aprenderemos como instalar y configurar un servidor para monitoreo con Prometheus y grafana para visualización de métricas.

By Ismael Aguilera

Para poder iniciar con la guía de instalación me gustaría primeramente que comprendiéramos la diferencia entre Observabilidad y Monitoreo, hablemos brevemente sobre eso.

Básicamente la observabilidad es la capacidad de inferir las condiciones internas en función de las salidas externas de un sistema. En otras palabras, es la capacidad de saber qué está sucediendo a través de métricas, registros y seguimientos. En cambio el monitoreo describe la funcionalidad, bienestar y las características relacionada a las condiciones internas de nuestros sistemas. En otras palabras, la actividad de observar y evaluar su comportamiento.

Para lograr una mejor observabilidad de nuestros sistemas utilizaremos las herramientas de monitoreo Prometheus y Grafana que en mi experiencia, son una de las mejores combinaciones.

Arquitectura:

Arquitectura Prometheus

Como podemos observar en el gráfico, utilizaremos prometheus como base de datos, Grafana para la visualización de métricas y creación de dashboards.

1- Instalación y configuración Prometheus:

Como primer paso, procedemos a crear el usuario de servicio “Prometheus”:

useradd -m -s /bin/false prometheus

Creamos los directorios y asignamos los permisos:

mkdir /etc/prometheus
mkdir /var/lib/prometheus
chown -R prometheus:prometheus /var/lib/prometheus/

Ahora debemos de descargar el archivo .tar de Prometheus, podemos hacerlo desde la siguiente página: https://prometheus.io/download/

wget https://github.com/prometheus/prometheus/releases/download/v2.42.0/prometheus-2.42.0.linux-amd64.tar.gz

Descomprimimos el archivo y luego debemos de copiar dos binarios al /usr/local/bin, el “prometheus” y el “promtool”.

tar -zxpvf prometheus-2.42.0.linux-amd64.tar.gz
cd prometheus-2.42.0.linux-amd64/
cp promtool /usr/local/bin
cp prometheus /usr/local/bin

Creamos el archivo de configuración del Prometheus (prometheus.yml)

touch /etc/prometheus/prometheus.yml
chown -R prometheus:prometheus /etc/prometheus/prometheus.yml

Ahora debemos de agregar la siguiente configuración al prometheus.yml:

# Configuración Global.
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_timeout: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090'] #Solo realizara el monitoreo del servidor local.

Nota:

scrape_interval → Tiempo en el que el prometheus realizará la consulta y obtención de métricas..

evaluation_interval → Tiempo de evaluación de reglas.

scrape_timeout → Tiempo máximo que el prometheus aguardará una respuesta para la obtención de métricas.

scrape_configs → Especifica los trabajos con sus parámetros correspondientes.

Configuramos el firewall para permitir conexiones externas al servidor a través del puerto 9090:

firewall-cmd --add-port=9090/tcp --permanent
firewall-cmd --reload

Ahora procedemos a crear un servicio Systemd para Prometheus Server:

vi /etc/systemd/system/prometheus.service

Debemos de agregar la siguiente configuración:

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/ \
--storage.tsdb.retention.time=30d \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target

Procedemos a reiniciar los servicios para que tome la nueva configuración del systemd:

systemctl daemon-reload

Y luego a iniciar el servicio de Prometheus:

systemctl start prometheus
systemctl enable prometheus
systemctl status prometheus

También podemos verificar el estado del servicio con el siguiente comando:

netstat -ptnl |grep 9090

Ahora procederemos a ingresara la interfaz web del Prometheus desde nuestro navegador → http://192.168.56.112:9090

2- Instalación y configuración del Node_exporter:

Nota: El Node exporter es el agente que recopila y envía una gran cantidad de métricas de nuestro servidor Linux, como CPU, uso de memoria, sistemas de archivos y estadísticas de red.

Procedemos a crear el usuario de servicio “node_exporter”

useradd -m -s /bin/false node_exporter

Ahora debemos de descargar el archivo .tar del node_exporter, lo haremos también desde la siguiente página oficial: https://prometheus.io/download/

wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz

Debemos descomprimir el archivo y copiar el binario “nodeexporter” al directorio /usr/local/bin:

tar -zxpvf node_exporter-1.5.0.linux-amd64.tar.gz
cd node_exporter-1.5.0.linux-amd64
cp node_exporter /usr/local/bin/
chown -R node_exporter:node_exporter /usr/local/bin/node_exporter

El siguiente paso es crear el servicio node_exporter:

vi /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

Ahora debemos de reiniciar los servicios para que tome la nueva configuración del systemd y luego proceder a iniciar el servicio de node_exporter:

systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
systemctl status node_exporter

Verificamos que esté escuchando en el puerto 9100:

netstat -ptnl |grep 9100

Configuramos el firewall para permitir conexiones externas al servidor a través del puerto 9100:

firewall-cmd --add-port=9100/tcp --permanent
firewall-cmd --reload

Para finalizar con la configuración agregaremos un nuevo job “node_exporter” a nuestro prometheus.yml:

vi /etc/prometheus/prometheus.yml# Global config
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_timeout: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']

Procedemos a reiniciar el servicio “prometheus.service” y con esto ya podremos visualizar las métricas por la interfaz web:

systemctl restart prometheus.service
Métricas obtenidas mediante el exportador node_exporter

3- Instalación y configuración del Grafana:

Descargamos el archivo .rpm directamente de la página oficial del grafana (https://grafana.com/grafana/download) y procedemos a instalarlo:

wget https://dl.grafana.com/oss/release/grafana-9.3.6-1.x86_64.rpm
sudo yum install grafana-9.3.6-1.x86_64.rpm

Procedemos a habilitar y levantar el servicio:

systemctl start grafana-server
systemctl enable grafana-server
systemctl status grafana-server

Configuramos el firewall para permitir conexiones externas al servidor a través del puerto 3000:

firewall-cmd --add-port=3000/tcp --permanent
firewall-cmd --reload

Una vez finalizado los pasos mencionados ya podremos acceder al entorno web: http://ipserver:3000

Para acceder al Grafana usaremos las credenciales por defecto:

user: admin
pass: admin
Menú principal de Grafana

4- Agregar la base de datos Prometheus:

Llegamos al último paso de la configuración, ahora debemos de agregar nuestra base de datos Prometheus creada anteriormente. Para ello debemos de ir hasta la opción de “”Data sources” ubicada en el panel izquierdo y seleccionar “Prometheus”:

Ahora debemos de ingresar los datos de configuración:

Configuración BD Prometheus.

Listo, hemos finalizado con la configuración e instalación de Prometheus + Grafana. La comunidad ha colaborado en el desarrollo de una infinidad de dashboards disponibles en: https://grafana.com/grafana/dashboards/

Para finalizar con este tutorial me gustaría utilizar uno de ellos, en este caso el dashboard con ID 3662. Para agregarlo debemos de realizar unos últimos pasos:

https://grafana.com/grafana/dashboards/3662
https://grafana.com/grafana/dashboards/3662

--

--