Herramientas de usuario

Herramientas del sitio


proyectos:linuxservidor-log-prometheus

Diagrama

  • IP prometheus: 192.168.1.10
  • IP Cliente node_export: 192.168.1.101

Instalación de dependencias

Instalar los siguientes paquetes en los nodos

apt install curl sudo  net-tools

Instalación Prometheus

En el servidor de prometheus creamos el usuario

useradd --no-create-home --shell /bin/false prometheus

Creamos las carpetas de prometheus y definimos dueño y grupo

mkdir /etc/prometheus
mkdir /var/lib/prometheus
DOWNLOAD_URL=$(curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest \
        | grep browser_download_url \
        | grep linux-amd64 \
        | cut -d '"' -f 4)
curl -s -L --create-dirs -o /tmp/prometheus.tar.gz "$DOWNLOAD_URL"
tar --strip-components=1 -C /etc/prometheus -zxvf /tmp/prometheus.tar.gz 
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
ln -s /etc/prometheus/prometheus /usr/local/bin/prometheus
ln -s /etc/prometheus/promtool /usr/local/bin/promtool

Verificamos la configuración por defecto de prometheus y lo ejecutamos

cat /etc/prometheus/prometheus.yml
 
sudo -u prometheus /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

Ahora pueden ver prometheus desde http://192.168.1.10:9090/

Para salir del programa, presionar en la terminal CTRL+C para cancelar el comando.

Creamos el servicio systemd

nano /etc/systemd/system/prometheus.service

Le agregamos siguiente contenido

[Unit]
Description=Prometheus Service
After=network.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 \
    --web.listen-address="127.0.0.1:9090"
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

De esta manera prometheus quedara expuesta a la red a travez del reverse proxy de nginx

Reiniciamos el systemd e iniciamos el servicio.

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

Ahora pueden ver prometheus desde http://127.0.0.1:9090/

Nginx

Ahora creamos el reverse proxy en nginx

apt install nginx

Agregando configuración de Nginx Creando usuario y clave

htpasswd -c /etc/prometheus/.htpasswd promadmin
    location / {
      auth_basic "Prometheus";
      auth_basic_user_file "/etc/prometheus/.htpasswd";
      proxy_pass       http://127.0.0.1:9090;
    }
nginx -t
systemctl reload nginx

Ahora pueden ver prometheus desde http://192.168.1.10/ y veran algo como.  Pantalla inicial prometheus web

Instalación node_exporter

Creamos en el cliente el usuario de node_exporter

useradd -rs /bin/false node_exporter
mkdir /opt/node_exporter
DOWNLOAD_URL=$(curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest \
        | grep browser_download_url \
        | grep linux-amd64 \
        | cut -d '"' -f 4)
curl -s -L --create-dirs -o /tmp/node_exporter.tar.gz "$DOWNLOAD_URL"
tar --strip-components=1 -C /opt/node_exporter -zxvf /tmp/node_exporter.tar.gz 
chown -R node_exporter:node_exporter /opt/node_exporter
ln -s /opt/node_exporter/node_exporter /usr/local/bin/
nano /etc/systemd/system/node_exporter.service

Creamos el servicio de systemd

[Unit]
Description=Node Exporter Service
After=network.target
 
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter 
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start node_exporter
systemctl status node_exporter
systemctl enable node_exporter

Ahora probaremos en la terminal que podemos obtener las metricas del node_exporter con curl

curl http://127.0.0.1:9100/metrics 

Conectando Prometheus con node_exporter

Agregar a la configuracion del prometheus el nodo /etc/prometheus/prometheus.yml

scrape_configs:
.
.
.
  - job_name: 'node_exporter_metrics'
    scrape_interval: 5s
    static_configs:
      - targets: ['<IPDELNODO>:9100']
.
.
.
systemctl restart prometheus
systemctl status prometheus

Abrir el prometheus para ver el nodo y las graficas en http://192.168.1.10/

node_exporter con NAT

Cuando el servidor no tiene comunicación directa con el agente node_exporter, pero el node_exporter puede alcanzar el servidor prometheus, es necesario hacer un proxy. Se puede hacer con:

  1. SSH proxy

Para SSH proxy, se realiza:

Servidor Prometheus

adduser remoto

Cambiar a la configuración del prometheus el nodo /etc/prometheus/prometheus.yml

...
      - targets: ['<IPDELNODO>:10100']
...

Agente Node_Exporter

su -
ssh-keygen -t rsa -b 4096
ssh-copy-id ssh remoto@logs.prueba.com
ssh -R 1100:localhost:10100 remoto@logs.prueba.com

cat /etc/systemd/system/remote-tunnel@.service

[Unit]
Description=Setup a remote tunnel to %I
After=network.target
 
[Service]
EnvironmentFile=/etc/default/remote-tunnel@%i
ExecStart=/usr/bin/ssh -i ${PATH_TO_KEY} -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -nNT -R ${REMOTE_PORT}:${LOCAL_ADDR}:${LOCAL_PORT} ${REMOTE_USER}@${REMOTE_HOST}
RestartSec=15
Restart=always
KillMode=mixed
 
[Install]
WantedBy=multi-user.target

cat /etc/default/remote-tunnel@logs.prueba.com

PATH_TO_KEY=/root/.ssh/id_rsa
LOCAL_ADDR=localhost
LOCAL_PORT=10100
REMOTE_PORT=10100
REMOTE_USER=remoto
REMOTE_HOST=logs.prueba.com

Habilitar y reiniciar el servicio

systemctl enable --now remote-tunnel@logs.prueba.com
systemctl  status remote-tunnel@logs.prueba.com

Desde el servidor prometheus, verificar que funcionan las metricas

curl http://127.0.0.1:10100/metrics

Si funciona solo es de reiniciar el prometheus

Consideraciones

  1. No se ha tomado en cuenta la seguridad de nginx ni de los node_exporter
  2. No se ha considerado poner el prometheus en un subdirectorio para tenerlo con otros servicios

Referencias

proyectos/linuxservidor-log-prometheus.txt · Última modificación: por manuel.floresv