Prometheus y Grafana

Tutorial Prometheus y Grafana – Guía de instalación y Configuración en Ubuntu 22.04

El monitoreo de sistemas y aplicaciones es esencial para mantener la estabilidad y el rendimiento de servidores y aplicaciones. Prometheus y Grafana son dos herramientas líderes en este campo que, cuando trabajan en conjunto, ofrecen una solución robusta y flexible para la recolección, almacenamiento y visualización de métricas en tiempo real. En esta guía te guiaremos paso a paso en la instalación y configuración de Prometheus y Grafana en un servidor Ubuntu 22.04 y mostraremos cómo recolectar métricas del sistema operativo como ilustración.

Prometheus es un sistema de monitoreo y alerta de código abierto que se caracteriza por su modelo de datos basado en una base de datos de series temporales (time-series database) y su capacidad para recolectar métricas a través de consultas HTTP. Por otro lado, Grafana permite la visualización y análisis desde una gran variedad de fuentes de datos, pero su integración con Prometheus es una de las más comunes. De esta forma, es posible realizar un monitoreo centralizado, crear alertas personalizadas y acceder a métricas que brindan una visión clara del sistema.

Requisitos Previos para utilizar Prometheus y Grafana

  • Disponer de un servidor Ubuntu 22.04 con un usuario que tenga acceso a sudo como explicamos en Configuración inicial de un servidor con Ubuntu 22.04. En nuestro caso este usuario llevará el nombre gabriel.
  • Verificar que exista una regla en el cortafuegos de Donweb que permita el tráfico entrante a los puertos 3000 y 9090 de TCP. Si necesitas asistencia, puedes consultar el artículo Firewall en la sección de ayuda.

Paso 1a: Instalación y Configuración de Prometheus

Debido a que Prometheus no está disponible en los repositorios predeterminados de Ubuntu, necesitarás descargarlo desde su repositorio oficial de GitHub. Al momento de escribir este artículo, la versión más reciente es la 2.54.1 pero para asegurarte, siempre puedes consultar la información disponible en el repositorio y adaptar los siguientes comandos con la versión que corresponda en el futuro. Para empezar, descarguemos el tarball de Prometheus utilizando curl en el directorio /tmp y extraigamos su contenido:

cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz
tar -xvf prometheus-2.54.1.linux-amd64.tar.gz

A continuación, mueve los archivos binarios de Prometheus a una ubicación adecuada (/usr/local/bin en este caso), crea el directorio /etc/prometheus donde guardaremos la configuración y genera un usuario específico para ejecutar el servicio. Por seguridad, esta cuenta no podrá emplearse para iniciar sesión en el sistema y tampoco contará con un directorio personal.

sudo mv prometheus-2.54.1.linux-amd64/prometheus /usr/local/bin/
sudo mv prometheus-2.54.1.linux-amd64/promtool /usr/local/bin/
sudo mkdir /etc/prometheus
sudo mkdir -p /var/lib/prometheus
sudo mv prometheus-2.54.1.linux-amd64/consoles /etc/prometheus
sudo mv prometheus-2.54.1.linux-amd64/console_libraries /etc/prometheus
sudo mv prometheus-2.54.1.linux-amd64/prometheus.yml /etc/prometheus
sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

A fin de que Prometheus corra como un servicio necesitarás crear el archivo de configuración para que systemd pueda administrarlo:

sudo nano /etc/systemd/system/prometheus.service

con el siguiente contenido:

[Unit]
Description=Prometheus
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/ \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target

Si deseas evitar la conexión a la interfaz web de Prometheus desde la red (incluyendo Internet), agrega la línea --web.listen-address=127.0.0.1:9090 \ en el ExecStart de arriba, reinicia el daemon de systemd y también el servicio con sudo systemctl daemon-reload && sudo systemctl restart prometheus.

Por último, recarga el daemon de systemd para que el servicio entre en efecto y luego habilita e inicia Prometheus:

sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus

El último comando debería indicar que el inicio fue exitoso:

instalar configurar prometheus grafana ubuntu 22.04 1
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

Prometheus estará disponible en el puerto 9090 por defecto, lo que puedes verificar utilizando un navegador web empleando la dirección IP pública de tu cloud server:

instalar configurar prometheus grafana ubuntu 22.04 2
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

Paso 1b: Instalación y Configuración de Node Exporter

Para que podamos hacer uso del servicio rápidamente, descargaremos Node Exporter, una herramienta que permite exportar métricas del hardware y del sistema operativo hacia Prometheus. También está disponible en un repositorio oficial y al escribir este artículo la versión más reciente es la 1.8.2:

wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar -xvf node_exporter-1.8.2.linux-amd64.tar.gz
sudo cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin

Como próximo paso, crearemos una cuenta para ejecutar Node Exporter:

sudo useradd --no-create-home --shell /bin/false node_exporter

y también un archivo de servicio para que corra en segundo plano:

sudo nano /etc/systemd/system/node_exporter.service

E incluiremos el siguiente contenido:

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=default.target

Finalmente, agregaremos a Node exporter en la lista de los scrape targets (fuentes desde las cuales recogeremos datos) en el archivo de configuración:

sudo nano /etc/prometheus/prometheus.yml

mediante las últimas 3 líneas que se muestran abajo. Es importante tener en cuenta que, al tratarse de un archivo YAML, debemos respetar los niveles de indentación.

# 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"]
  - job_name: "node_exporter"
    static_configs:
      - targets: ["localhost:9100"]

y habilitaremos el servicio de la misma forma en que lo hicimos anteriormente:

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

Una vez completado este paso, podemos ahora continuar con Grafana.

Paso 2: Instalación y Configuración de Grafana

Como Grafana proporciona su propio repositorio de paquetes, con estos comandos podremos añadirlo e instalar la herramienta:

sudo apt install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt update
sudo apt install -y grafana

A esta altura, Grafana no está en ejecución todavía. Por ese motivo, será preciso habilitarlo e iniciarlo manualmente:

sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
sudo systemctl status grafana-server
instalar configurar prometheus grafana ubuntu 22.04 3
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

Una vez que el servicio está en ejecución, podrás acceder a la interfaz web de Grafana en el puerto 3000 a través del navegador web. Por defecto, tanto el usuario y contraseña de Grafana es admin. Te recomendamos cambiar la contraseña tan pronto como inicies sesión desde el menú que indica la imagen de abajo:

prometheus y grafana
Tutorial Prometheus y Grafana en Ubuntu 22.04

En el próximo paso veremos cómo integrar Prometheus con Grafana, así como algunas consideraciones de seguridad relacionadas.

Paso 3: Integración de Prometheus y Graphana

Para agregar a Prometheus como fuente de datos, ve a Connections –> Data sources –> Add data source:

instalar configurar prometheus grafana ubuntu 22.04 5
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

y elige Prometheus de la lista:

instalar configurar prometheus grafana ubuntu 22.04 6
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

Luego de ingresar la URL de Prometheus (en nuestro caso será http://localhost:9090 ya que ambos servicios residen en el mismo host), haz clic en el botón Save & test que aparece en la parte inferior de la página. Si la conexión se realizó correctamente, verás el mensaje de confirmación que aparece en la imagen siguiente:

instalar configurar prometheus grafana ubuntu 22.04 7
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

Grafana provee muchos paneles predeterminados para las integraciones más comunes. Al escribir node en el campo de búsqueda, haremos clic en Node Exporter Full y luego en uno de los botones Copy ID to clipboard o en Download JSON.

instalar configurar prometheus grafana ubuntu 22.04 8
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

Esto nos permitirá acceder al identificador del panel o descargar el archivo con la plantilla que luego importaremos en Grafana. Si copiamos el ID, lo ingresaremos donde lo indica la imagen de abajo y presionaremos Load. En caso de que hayamos descargado el archivo JSON, podremos importarlo con el botón Upload dashboard JSON file.

instalar configurar prometheus grafana ubuntu 22.04 9
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

En cualquiera de los dos casos, finalizaremos haciendo clic en Import:

instalar configurar prometheus grafana ubuntu 22.04 10
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

Después de algunos minutos, deberías comenzar a visualizar los indicadores de las métricas en el panel:

instalar configurar prometheus grafana ubuntu 22.04 11
Tutorial Prometheus y Grafana - Guía de instalación y Configuración en Ubuntu 22.04

En la imagen de arriba, podemos observar que el panel agrupa las medidas en categorías para nuestra conveniencia. Esto nos permitirá monitorear el cloud server y tomar decisiones informadas en datos recolectados en tiempo real.

Conclusión

En esta guía hemos desarrollado el proceso paso a paso para instalar, configurar e integrar Prometheus y Grafana en Ubuntu 22.04. Ya sea que estés monitoreando servidores y aplicaciones en producción o sistemas de prueba, la combinación de Prometheus y Grafana te permitirá estar siempre al tanto del rendimiento y la estabilidad y así evitar problemas o minimizar su impacto.

Gabriel Cánepa
Gabriel Cánepa

Gabriel trabaja actualmente como desarrollador full-stack en Scalar, una firma que se dedica a hacer valuaciones de empresas. Es Administrador de Sistemas certificado por la Fundación Linux y previamente ha escrito un gran número de artículos y contenidos técnicos sobre el tema para: DigitalOcean, Linode, Carrera Linux Argentina y Tecmint.

Tiene una certificación en programación de la Universidad de Brigham Young-Idaho, y está completando las carreras de programador y analista de sistemas en la Universidad Nacional de Villa Mercedes (UNViMe).

En su tiempo libre, Gabriel disfruta leyendo libros de Stephen R. Covey, tocando piano y guitarra, y enseñando conocimientos de programación a su dos hijas.