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.