Instalar los siguientes paquetes en los nodos
apt install curl sudo net-tools
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/
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.
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
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/
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:
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