Día 24: La Trampa de los Volúmenes Fantasma



Querido diario:

Hoy es el vigésimo cuarto día en el frente digital. Tras semanas de fuego cruzado con bugs, escaramuzas contra cuellos de botella y operaciones encubiertas de monitoreo, creímos que habíamos encontrado una zona segura. Un campo calmo, libre de alertas... pero ya lo sabemos, diario: la calma en la guerra informática es solo una trampa del enemigo.

Los reclutas estaban dispersos, tomando notas bajo el sol, cuando el zapador veterano apareció entre las malezas, arrastrando una caja metálica destartalada: un contenedor Docker dañado. Sin dudarlo, lo lanzó a un hoyo cavado en el barro. Al tocar fondo, explotó en una nube de bits inservibles.

Se volvió hacia nosotros, y con la voz de quien ha visto morir a cientos de instancias, soltó:


"Eso es lo que le pasa a un Docker cuando no le creas un volumen y debes rearmarlo para agregarle una nueva característica."


Silencio. Solo se oía el eco lejano de los logs perdidos.

⚠️ La Misión: Migrar un Prometheus sin Pérdida de Datos

Un Prometheus mal desplegado es como un centinela con amnesia. Por defecto, guarda solo 15 días de registros, y cada vez que lo rearmas sin volumen... olvida todo lo que aprendió.

Hoy, nuestro objetivo es migrar los datos de un Prometheus existente a un volumen Docker, y luego reconstruirlo con parámetros de retención extendida. Vamos a darle memoria al vigía.

🛠️ Desarrollo Técnico: Migración y Recreación de Prometheus con Volumen

🔹 1. Crear el volumen nuevo

Primero, creamos el volumen que servirá de base sólida para nuestro nuevo Prometheus:

docker volume create prometheus-volume

🔹 2. Crear un contenedor temporal para la migración

Utilizamos una imagen Alpine para hacer una operación quirúrgica. Este contenedor se autodestruirá al terminar.

docker run --rm -it --volumes-from prometheus_viejo -v prometheus-volume:/prometheus_nuevo alpine sh

Esto nos dejará dentro de una consola en el contenedor temporal.

🔹 3. Copiar los datos

Dentro de ese contenedor, ejecutamos:

cp -r /prometheus/* /prometheus_nuevo/

Con esto, todos los datos de Prometheus serán transferidos al nuevo volumen.

🔹 4. Asignar los permisos correctos

Prometheus necesita los permisos apropiados para acceder a sus archivos. En muchos casos, el servicio corre como el usuario nobody (UID 65534):

chown -R 65534:65534 /prometheus_nuevo/

🔹 5. Salir del contenedor temporal

Una vez terminado, salimos con:

exit

El contenedor temporal se autodestruirá, dejando los datos a salvo en el volumen.

🔹 6. Recrear Prometheus con parámetros personalizados

Ahora sí, lanzamos un nuevo Prometheus, usando el volumen recién creado y parámetros que extienden la retención de datos a 180 días o 30 GB, lo que ocurra primero:

docker run -d --name prometheus \
  -p 9090:9090 \
  -v prometheus-volume:/prometheus \
  -v /root/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.retention.time=180d \
  --storage.tsdb.retention.size=30GB

🪖 Reflexión Final del Día 30

Reclutas, nunca subestimen la importancia de un buen volumen. En la guerra de la observabilidad, un Prometheus sin memoria es un vigía ciego. Hoy, hemos aprendido que los datos no deben ser rehenes del contenedor, sino soldados con base firme.

El enemigo puede borrar discos, puede colapsar servicios, pero mientras nuestros volúmenes sigan montados, la historia de la red seguirá viva.

Hasta la próxima operación, mantengan los logs calientes y las métricas vigiladas.

Comentarios