Skip to content

Fuente efectiva de configuración Prometheus tras la migración

20 de octubre de 2026. Investigación selectiva sólo lectura en CT217, revalidado como LXC ejecutándose en proxmox2. No se ha escrito configuración, recargado, reiniciado o recreado un contenedor, ni consultado productos por HTTP. Los YAML se compararon en memoria; no se imprimieron ni persistieron completos, ni se mostraron autenticación, credenciales o valores de targets.

Hallazgo

La diferencia entre el fichero del home y el fichero visto dentro del contenedor no demuestra un bind mount obsoleto. Son dos fuentes distintas. El montaje real de /etc/prometheus/prometheus.yml usa /opt/observa/conf/prometheus.yml; esa fuente y el fichero del contenedor tienen el mismo hash, inode, tamaño y mtime. El fichero del home no es la fuente montada actualmente.

Fichero SHA256 Inode Tamaño mtime UTC
CT217 /home/monxas/appdata/prometheus/prometheus.yml <REDACTED> 1029711 6109 B 2026-09-25 17:18:53
CT217 /opt/observa/conf/prometheus.yml <REDACTED> 1107915 6060 B 2026-10-19 11:09:17
Contenedor /etc/prometheus/prometheus.yml <REDACTED> 1107915 6060 B 2026-10-19 11:09:17

Los mtimes acreditan la antigüedad registrada de esos ficheros; no demuestran quién realizó los cambios ni que se hayan mantenido sin modificación desde esa fecha. El hash efectivo coincide con el baseline registrado en el despliegue selectivo de alertas de las 00:54 CEST.

Docker declara ambos montajes como bind de sólo lectura, propagación rprivate:

Destino en Prometheus Fuente CT217
/etc/prometheus/prometheus.yml /opt/observa/conf/prometheus.yml
/etc/prometheus/alerts.yml /home/monxas/appdata/prometheus/alerts.yml

Las etiquetas selectivas de Compose identifican /opt/observa/compose.yaml y working directory /opt/observa. Ese Compose, SHA256 <REDACTED>, declara exactamente las dos fuentes anteriores. No se inspeccionaron entornos completos ni otras etiquetas del contenedor.

Diferencias semánticas acotadas

El fichero del home y el efectivo contienen los mismos 26 nombres de jobs. No hay diferencias semánticas en los demás bloques superiores. Cambian sólo static_configs de estos siete jobs:

  • node: targets y labels.
  • blackbox-http-internal: targets.
  • asus-router: targets y label instance.
  • openclaw-vm-node: targets y label instance.
  • openclaw-vm-process: targets y label instance.
  • rchat: targets.
  • jev-gateway: targets y label instance.

No se publican los valores de esos campos. Las diferencias son compatibles con la migración previa, sin atribuir su autoría ni fecha exacta por inferencia.

Estado de la fuente declarativa

En la lectura inicial, el template ansible/roles/observability_collector/templates/prometheus.yml.j2 tenía 23 jobs, frente a26 efectivos. Faltaban en esa versión blackbox-dns, blackbox-wallet y blackbox-wallet-local. Entre sus jobs comunes también difieren los static_configs de los siete jobs anteriores. Para comparar la estructura se sustituyó únicamente la variable de token HA por un placeholder local; no se resolvió SOPS ni se imprimieron valores de autenticación.

La play Prometheus config (VM 208) de ansible/playbook.yml:464 sigue dirigida a docker_hubs —inventario actual: media-208— y fija prometheus_dir: /home/monxas/appdata/prometheus. Mantiene un swap que reinicia Prometheus antes de validar su configuración efectiva. Por tanto, no describe el propietario CT217 ni su fuente de configuración actual y no se considera un procedimiento acreditado para aplicar cambios a este runtime migrado.

En homelab-stacks, infra/compose.migrado.yaml conserva el montaje antiguo del home. Su cabecera declara que queda fuera del glob activo y está destinado a la vuelta atrás de ADR-0027; infra/compose.yaml activo ya no contiene Prometheus. No se localizó en las fuentes inspeccionadas una definición versionada del Compose vivo de /opt/observa. ADR-0027, apartado de pendientes, ya identifica la codificación de /opt/observa en Ansible como trabajo pendiente.

Riesgo y siguiente cambio revisable

Recrear con el Compose vivo inspeccionado, sin cambiarlo, seguiría montando /opt/observa/conf/prometheus.yml; la discrepancia observada no requiere un recreate para resolverse. Utilizar el Compose archivado, reemplazar la fuente efectiva por el fichero antiguo del home o aplicar el template incompleto podría recuperar targets anteriores o perder tres jobs. No se ha realizado ninguna de esas acciones.

La siguiente fase debe versionar la declaración de CT217 y sus dos fuentes distintas, reconciliar los 26 jobs en memoria sin exponer secretos y añadir guardas de propietario, mounts y hashes antes de cualquier aplicación. La validación candidata debe preceder a la activación; no se necesita introducir un reinicio como respuesta a este hallazgo. Este informe no autoriza ni ejecuta esa reconciliación.

El coordinador informó por separado del despliegue de la regla número 87 en el fichero de alertas, preservando su inode y sin cambiar ninguna de las dos configuraciones aquí contrastadas. Esta investigación no valida de nuevo esa regla ni altera su evidencia de despliegue.

Barrera de fuente para el procedimiento legado

La play conserva tags:[never]: el ansible-pull ordinario no la ejecuta. Para impedir un despliegue manual con fuentes y propietario obsoletos, se añadió como primera tarea de prometheus_config_swap un fail explícito, antes del primer render/copy/restart de esa play. Remite a este informe y al procedimiento nuevo que aún debe prepararse; no contiene override. El tag de render conserva sólo candidatos/diff y no aplica configuración. Los comentarios ya identifican swap como bloqueado, en vez de ofrecerlo como procedimiento válido para CT217.

Revisión independiente: YAML válido; al retirar exactamente esa tarea del árbol parseado, las20plays completas coinciden con el baseline anterior. Tagsnever, render y demás tareas intactos. Sin ejecutar Ansible, resolverSOPS ni modificar runtime. Esto bloquea la operación antigua; no reconcilia los26jobs ni versiona por sí mismo el Compose efectivo de /opt/observa.

Reconciliación de fuentes posterior, sin aplicar runtime

La plantilla se reconcilió posteriormente con26jobs y los siete bloques static_configs, manteniendo una única variable HA/SOPS y los demás campos; ver paridad redactada. Esto no habilita el swap antiguo: propietario, rutas y mecanismo siguen obsoletos.

También se añadieron barreras iniciales a alertmanager_config y grafana_config: la primera play escribía/HUP en VM208 y la segunda llamaba su API3030 con operaciones de sobrescritura. Ambas conservan never; no se ejecutan por autopull ordinario. Los fails preceden copy/HUP/API, sin consultar productos ni resolver secretos. Se corrigió el comentario de Alertmanager que negaba el reload aunque la tarea sí enviabaHUP. No se ha aplicado ningún procedimiento de sustitución.