Cómo instalar la herramienta de monitorización del sistema Prometheus en Debian 11

Prometheus es una aplicación de monitorización gratuita, de código abierto y basada en la web, que recoge las métricas de tus servicios y las almacena en una base de datos de series temporales. La configuración por defecto de Prometheus sólo exporta métricas sobre sí mismo. Pero puedes ampliarla instalando exportadores y otros programas. Admite un modelo de datos multidimensional, múltiples modos de gráficos y cuadros de mando.

En este post, te mostraremos cómo instalar la monitorización de Prometheus en Debian 11.

Requisitos previos

  • Un servidor que ejecute Debian 11.
  • Una contraseña de root configurada en el servidor.

Instalar Prometheus

Antes de empezar, se recomienda crear un usuario y un grupo dedicados para Prometheus. Puedes crearlo con el siguiente comando:

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

A continuación, descarga la última versión de Prometheus ejecutando el siguiente comando:

curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest|grep browser_download_url|grep linux-amd64|cut -d '"' -f 4|wget -qi -

Una vez descargado Prometheus, puedes ver el archivo descargado utilizando el siguiente comando:

ls -l

Deberías ver la siguiente salida:

-rw-r--r-- 1 root root 72638078 Oct  5 16:46 prometheus-2.30.3.linux-amd64.tar.gz

A continuación, extrae el archivo descargado utilizando el siguiente comando:

tar -xvf prometheus*.tar.gz

A continuación, cambia el directorio por el extraído con el siguiente comando:

cd prometheus-2.30.3.linux-amd64

A continuación, crea algunos directorios necesarios utilizando el siguiente comando:

mkdir /etc/prometheus
mkdir /var/lib/prometheus

A continuación, copia los archivos de configuración y las herramientas necesarias con los siguientes comandos:

mv prometheus.yml /etc/prometheus/prometheus.yml
mv consoles/ console_libraries/ /etc/prometheus/
mv prometheus promtool /usr/local/bin/

Una vez que hayas terminado, puedes pasar al siguiente paso.

Crear un archivo de servicio Systemd para Prometheus

A continuación, tendrás que crear un archivo de servicio systemd para gestionar el servicio Prometheus. Puedes crearlo ejecutando el siguiente comando:

nano /etc/systemd/system/prometheus.service

Añade las siguientes líneas:

[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

Guarda y cierra el archivo y luego establece la propiedad y el permiso adecuados en el directorio de configuración de Prometheus:

chown -R prometheus:prometheus /etc/prometheus/
chmod -R 775 /etc/prometheus/
chown -R prometheus:prometheus /var/lib/prometheus/

A continuación, recarga el demonio systemd para aplicar los cambios:

systemctl daemon-reload

A continuación, inicia el servicio Prometheus y permite que se inicie al reiniciar el sistema mediante el siguiente comando:

systemctl start prometheus
systemctl enable prometheus

Puedes comprobar el estado de Prometheus con el siguiente comando:

systemctl status prometheus

Obtendrás la siguiente salida:

? prometheus.service - Prometheus
     Loaded: loaded (/etc/systemd/system/prometheus.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-10-16 14:06:39 UTC; 4s ago
       Docs: https://prometheus.io/docs/introduction/overview/
   Main PID: 18415 (prometheus)
      Tasks: 5 (limit: 2341)
     Memory: 19.6M
        CPU: 79ms
     CGroup: /system.slice/prometheus.service
             ??18415 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.cons>

Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.172Z caller=head.go:513 component=tsdb msg="On-disk memory mappa>
Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.172Z caller=head.go:519 component=tsdb msg="Replaying WAL, this >
Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.174Z caller=head.go:590 component=tsdb msg="WAL segment loaded" >
Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.174Z caller=head.go:596 component=tsdb msg="WAL replay completed>
Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.177Z caller=main.go:849 fs_type=EXT4_SUPER_MAGIC
Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.177Z caller=main.go:852 msg="TSDB started"
Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.178Z caller=main.go:979 msg="Loading configuration file" filenam>
Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.178Z caller=main.go:1016 msg="Completed loading of configuration>
Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.179Z caller=main.go:794 msg="Server is ready to receive web requ>
Oct 16 14:06:39 debian11 prometheus[18415]: level=info ts=2021-10-16T14:06:39.179Z caller=tls_config.go:191 component=web msg="TLS is disabled>

Por defecto, Prometheus escucha en el puerto 9090. Puedes comprobarlo utilizando el siguiente comando:

ss -antpl | grep 9090

Deberías ver la siguiente salida:

LISTEN 0      4096               *:9090            *:*    users:(("prometheus",pid=18415,fd=7))

Una vez que hayas terminado, puedes pasar al siguiente paso.

Configurar Nginx como proxy inverso para Prometheus

A continuación, se recomienda instalar y configurar Nginx como proxy inverso para Prometheus. En primer lugar, instala el paquete del servidor web Nginx con el siguiente comando:

apt-get install nginx -y

Una vez instalado Nginx, crea un archivo de configuración de host virtual Nginx con el siguiente comando:

nano /etc/nginx/conf.d/prometheus.conf

Añade las siguientes líneas:

server {
    listen 80;
    server_name prometheus.example.com;
    location / {
        proxy_pass http://localhost:9090;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

}

Guarda y cierra el archivo y luego verifica que Nginx no tenga ningún error de sintaxis con el siguiente comando:

nginx -t

Si todo está bien, obtendrás la siguiente salida:

nginx: configuration file /etc/nginx/nginx.conf test is successful

Por último, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

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

systemctl status nginx

Deberías obtener la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-10-16 14:08:15 UTC; 2s ago
       Docs: man:nginx(8)
    Process: 18792 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 18793 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 18794 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 2.5M
        CPU: 35ms
     CGroup: /system.slice/nginx.service
             ??18794 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??18795 nginx: worker process

Oct 16 14:08:15 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server...
Oct 16 14:08:15 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Oct 16 14:08:15 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.

En este punto, Nginx está instalado y configurado para servir al Prometheus. Ahora puedes pasar al siguiente paso.

Accede al panel de control de Prometheus

Ahora, abre tu navegador web y accede al panel de control de Prometheus utilizando la URL http://prometheus.example.com. Deberías ver la siguiente página:

GUI de Prometheus

Instalar y configurar node_exporter

node_exporter es un exportador que monitorizará y obtendrá la métrica del servidor Prometheus. En primer lugar, descarga la última versión de node_exporter mediante el siguiente comando:

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

Una vez completada la descarga, extrae el archivo descargado con el siguiente comando:

tar -xvzf node_exporter-1.2.2.linux-amd64.tar.gz

A continuación, mueve el directorio extraído al directorio /etc/prometheus/:

mv node_exporter-1.2.2.linux-amd64 /etc/prometheus/node_exporter

A continuación, establece la propiedad adecuada con el siguiente comando:

chown -R prometheus:prometheus /etc/prometheus/node_exporter

A continuación, crea un archivo de servicio systemd para gestionar el servicio node_exporter:

nano /etc/systemd/system/node_exporter.service

Añade las siguientes líneas:

[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
ExecStart=/etc/prometheus/node_exporter/node_exporter

[Install]
WantedBy=default.target

Guarda y cierra el archivo y vuelve a cargar el demonio systemd para aplicar los cambios:

systemctl daemon-reload

A continuación, inicia el servicio node_exporter y habilítalo para que se inicie al reiniciar el sistema:

systemctl start node_exporter
systemctl enable node_exporter

Puedes comprobar el estado del node_exporter con el siguiente comando:

systemctl status node_exporter

Obtendrás la siguiente salida:

? node_exporter.service - Node Exporter
     Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-10-17 05:38:20 UTC; 4s ago
   Main PID: 513 (node_exporter)
      Tasks: 4 (limit: 2341)
     Memory: 4.7M
        CPU: 11ms
     CGroup: /system.slice/node_exporter.service
             ??513 /etc/prometheus/node_exporter/node_exporter

Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.382Z caller=node_exporter.go:115 collector=thermal_zone
Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.382Z caller=node_exporter.go:115 collector=time
Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.382Z caller=node_exporter.go:115 collector=timex
Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.382Z caller=node_exporter.go:115 collector=udp_queues
Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.382Z caller=node_exporter.go:115 collector=uname
Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.382Z caller=node_exporter.go:115 collector=vmstat
Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.382Z caller=node_exporter.go:115 collector=xfs
Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.382Z caller=node_exporter.go:115 collector=zfs
Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.383Z caller=node_exporter.go:199 msg="Listening on" address=:91>
Oct 17 05:38:20 debian11 node_exporter[513]: level=info ts=2021-10-17T05:38:20.383Z caller=tls_config.go:191 msg="TLS is disabled." http2=false

Por defecto, node_exporter escucha en el puerto 9100. Puedes comprobarlo con el siguiente comando:

ss -antpl | grep 9100

Deberías obtener la siguiente salida:

LISTEN 0      4096               *:9100            *:*    users:(("node_exporter",pid=513,fd=3))

Añade node_exporter al servidor Prometheus

A continuación, tendrás que añadir el node_exporter al archivo de configuración de Prometheus. Puedes hacerlo editando el archivo de configuración por defecto de Prometheus:

nano /etc/prometheus/prometheus.yml

En la línea‘scrape_config‘, añade el nuevo job_name node_exporter añadiendo las siguientes líneas.

  - job_name: 'node_exporter'
    static_configs:
    - targets: ['localhost:9100']

Guarda y cierra el archivo y luego reinicia el servicio de Prometheus para aplicar los cambios:

systemctl restart prometheus

Verifica Prometheus y node_exporter

Ahora, ve al panel de control de Prometheus y haz clic en Estado => Objetivo. Deberías ver tu node_exporter en la siguiente pantalla:

Ahora, vuelve a la página de inicio de Prometheus y escribe node_memory_MemAvailable_bytes en el campo de consulta y haz clic en el botón«Ejecutar«. Obtendrás el siguiente resultado:

Memoria del nodo disponible

También puedes obtener los datos de las métricas de node_exporter utilizando la URL http://your-server-ip:9100/metrics como se muestra a continuación:

métricas del exportador de nodos

Conclusión

Enhorabuena! has instalado con éxito Prometheus con node_exporter en Debian 11. No dudes en preguntarme si tienes alguna duda. Para más información, visita la documentación oficialde Prometheus.

También te podría gustar...