Estructura de navegación
Tabla de contenidos
Visión de las métricas
Una vez que hemos configurado en nuestro dominio los exporters, si nos dirigimos a la interfaz web de Prometheus en el puerto 9090 y vamos a la opción de status > targets, veremos que ha detectado los DCs.

Si pulsamos sobre alguno de los endpoints nos redirigirá a la página creada por los exporters y podremos ver las métricas.

Como sólo hemos configurado la recolección de métricas de los servidores no detecta los clientes, por lo que a continuación crearemos un servicio de descubrimiento para prometheus.
Service discovery
Para crear la configuración de service discovery en Prometheus tenemos que indicarle como vamos a añadirla en el fichero prometheus.yml, en mi caso he decidido usar un file_sd_discovery, que consiste en añadir direcciones IP a un archivo en formato yaml que serán scrapeadas por Prometheus, para ello añadiremos la siguiente configuración en el fichero prometheus.yml
global:
scrape_interval: 90s
scrape_configs:
scrape_configs:
- job_name: 'Server 1'
scrape_interval: 60s
scrape_timeout: 5s
static_configs:
- targets: ['172.19.0.10:9182'] #El exporter que usaremos expone las métricas en el puerto 9182
labels: #Usamos esta opción para indicar que vamos a crear etiquetas para asociar una IP a un nombre concreto
hostname: 'DC-01' #Nombre asociado a la IP
type: 'server' #Esta etiqueta asigna el tipo "server" al servidor de destino.
- job_name: 'Server 2'
scrape_interval: 60s
scrape_timeout: 5s
static_configs:
- targets: ['172.19.0.11:9182']
labels:
hostname: 'DC-02'
type: 'server'
- job_name: 'Clientes'
file_sd_configs:
- files:
- clientes.yml
Para crear ese archivo vamos a crear un script en Python que se ejecute mediante una tarea cron en caso de que más adelante se añadan nuevos equipos, el script será el siguiente:
#!/usr/bin/python3
import subprocess
import concurrent.futures
def ping(ip):
command = f"ping -c 1 -W 1 -l 64 {ip}"
result = subprocess.run(command, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
return f"'{ip}:9182'" if result.returncode == 0 else None
def main():
ip_range = [f"172.19.0.{i}" for i in range(20, 250)]
results = []
with concurrent.futures.ThreadPoolExecutor() as executor:
future_to_ip = {executor.submit(ping, ip): ip for ip in ip_range}
for future in concurrent.futures.as_completed(future_to_ip):
ip = future_to_ip[future]
if future.result() is not None:
results.append(future.result())
output = "- targets: [" + ", ".join(results) + "]\n"
with open("/etc/prometheus/clientes.yml", "w") as output_file:
output_file.write(output)
if __name__ == "__main__":
main()
Por defecto prometheus escanea el archivo yml para añadir nuevos targets cada 300 segundos, por lo que crearemos un script para un servicio que se ejecute en bucle cada 300 segundos.
#!/bin/bash
while true;do
/usr/bin/python3 /etc/prometheus/targets.py
sleep 300
done
Y para ejecutarlo crearemos el servicio targets.service, con el siguiente contenido:
[Unit]
Description=Script para la actualización de targets
[Service]
ExecStart=/etc/prometheus/scripts/targets.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Una vez que comprobamos que el servicio funciona lo activamos para que se ejecute automáticamente con el inicio del sistema.

Si ahora miramos en la interfaz web de Prometheus veremos ahora esta obteniendo métricas también de los clientes.

Con todo esto ya estamos listos para empezar a crear nuestros Dashboards en Grafana.