Instalación y configuración de Prometheus + Grafana / CentOS8.
Aprenderemos como instalar y configurar un servidor para monitoreo con Prometheus y grafana para visualización de métricas.
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:
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
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
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:
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: