Saltar a contenido

SAFE-POINT-044 - La Directa redirect-aware probe design

Fecha: 2026-06-17

Metadata

  • active_repo: C:\APV\openclawai
  • related_repo: C:\APV\vps-woocommerce-ladirecta
  • safe_point_base: cdfe967dbddef68e6060ac4cd3b06603e30ddf33
  • openclaw_vps_touched: false
  • woo_vps_touched: false
  • runtime_deploy_executed: false
  • docker_runtime_executed: false
  • grafana_runtime_reloaded: false
  • prometheus_runtime_reloaded: false
  • alertmanager_runtime_reloaded: false

Objetivo

Disenar y preparar un candidato no desplegado para validar ladirecta.ar como redirect publico esperado hacia https://ladirecta.com.ar/, sin tocar runtime O4 ni WooCommerce.

SAFE POINT inicial

  • Repo local: C:\APV\openclawai
  • git status -sb: ## main...origin/main
  • git rev-parse HEAD: cdfe967dbddef68e6060ac4cd3b06603e30ddf33

Lectura base

  • docs/runbooks/SAFE-POINT-043-ladirecta-fase-1-dashboards-alerts-candidates.md
  • infra/observability/prometheus/targets/blackbox-http-targets.json
  • infra/observability/blackbox/blackbox.yml
  • infra/observability/prometheus/prometheus.yml
  • infra/observability/prometheus/candidates/ladirecta-phase1-alerts.candidate.yml
  • docs/tenants/ladirecta/observability/ALERTS-PLAN.md
  • docs/tenants/ladirecta/observability/METRICS-CATALOG.md
  • docs/governance/operations/O4-ALERTS-CATALOG.md
  • infra/observability/docker-compose.yml

Comportamiento observado el 2026-06-17

Validacion solo lectura con curl.exe -fsS -I:

Target Resultado observado Nota
https://ladirecta.ar/ 301 Moved Permanently Location: https://ladirecta.com.ar/
http://ladirecta.ar/ 301 Moved Permanently Location: https://ladirecta.com.ar/
http://ladirecta.com.ar/ 301 Moved Permanently Location: https://ladirecta.com.ar/
https://ladirecta.com.ar/ 200 OK storefront final sano

Observacion:

  • el comportamiento http -> https de ladirecta.com.ar y .ar es coherente con una politica publica de canonicalizacion
  • no se asumio que http y https debian responder igual; se documento lo observado

Estado del patron actual

  • blackbox-http usa el modulo runtime http_2xx
  • ese modulo no declara follow_redirects: false
  • por default el exporter sigue redirects y el resultado termina en 200
  • por eso hoy probe_success{job="blackbox-http",instance="https://ladirecta.ar/"} puede ser sano aun cuando la senal operativa real sea un 301

Resultado de la investigacion Blackbox

Stack versionado relevante:

  • blackbox-exporter: quay.io/prometheus/blackbox-exporter:v0.28.0

Capacidades confirmadas contra documentacion oficial del exporter:

Pregunta Resultado Decision
modulo con no_follow_redirects no como nombre literal usar follow_redirects: false
aceptar 301/302/308 si usar valid_status_codes
exponer status inicial suficiente si probe_http_status_code con follow_redirects: false debe reflejar el 301 inicial
validar Location exacto si, dentro del modulo usar fail_if_header_not_matches con regex exacta
exponer Location exacto como metrica para PromQL no el valor exacto queda validado dentro del modulo y Prometheus consume solo probe_success + probe_http_status_code

Limitacion importante:

  • Prometheus no obtiene un label o metrica dedicada con el valor del Location
  • la validacion exacta del header queda encapsulada en el modulo Blackbox
  • por lo tanto, la alerta candidata exacta es viable, pero depende de promover el modulo correcto; no puede evaluarse solo con PromQL sobre el job actual

Diseno candidato no desplegado

Modulo Blackbox candidato

Archivo:

  • infra/observability/blackbox/candidates/ladirecta-redirect-aware-modules.candidate.yml

Diseno:

  • modulo: http_redirect_3xx_ladirecta_ar_no_follow
  • follow_redirects: false
  • valid_status_codes: [301, 302, 308]
  • fail_if_header_not_matches sobre Location
  • regex exacta esperada: ^https://ladirecta\.com\.ar/$

Target file candidato

Archivo:

  • infra/observability/prometheus/candidates/blackbox-http-redirect-aware-targets.candidate.json

Alcance:

  • solo https://ladirecta.ar/
  • labels tenant/service alineados con el patron actual

Job Prometheus candidato

Archivo:

  • infra/observability/prometheus/candidates/blackbox-http-redirect-aware-job.candidate.yml

Diseno:

  • job: blackbox-http-redirect-aware
  • modulo: http_redirect_3xx_ladirecta_ar_no_follow
  • target file dedicado, separado del job blackbox-http

Regla candidata ajustada

Archivo:

  • infra/observability/prometheus/candidates/ladirecta-phase1-alerts.candidate.yml

Diseno:

  • EcommerceLaDirectaArRedirectBroken queda atada a job="blackbox-http-redirect-aware"
  • la regla depende de probe_success == 0
  • la semantica exacta del redirect esperado vive dentro del modulo y no en la expresion PromQL

Por que se separa en job dedicado

  • evita mezclar probes 2xx normales con probes 3xx esperados
  • preserva claridad operativa en dashboards y alertas
  • permite agregar futuros redirects esperados sin contaminar el job general
  • reduce riesgo de interpretar un 301 esperado como caida o como 200 final

Archivos creados o actualizados

  • docs/runbooks/SAFE-POINT-044-ladirecta-redirect-aware-probe-design.md
  • infra/observability/blackbox/candidates/ladirecta-redirect-aware-modules.candidate.yml
  • infra/observability/prometheus/candidates/blackbox-http-redirect-aware-targets.candidate.json
  • infra/observability/prometheus/candidates/blackbox-http-redirect-aware-job.candidate.yml
  • infra/observability/prometheus/candidates/ladirecta-phase1-alerts.candidate.yml

Lo que no se hizo

  • no se modifico infra/observability/blackbox/blackbox.yml runtime
  • no se modifico infra/observability/prometheus/prometheus.yml runtime
  • no se modificaron targets/*.json runtime
  • no se hizo deploy ni reload de Prometheus, Grafana, Alertmanager o Blackbox
  • no se toco WooCommerce, WordPress, DNS, Cloudflare, firewall, secretos ni repo relacionado

Pendiente para runtime futuro

  1. copiar el modulo candidato al blackbox.yml activo
  2. agregar el target file dedicado en la ruta runtime de Prometheus
  3. insertar el job blackbox-http-redirect-aware en prometheus.yml
  4. recargar blackbox-exporter y Prometheus en un SAFE POINT separado
  5. validar en runtime:
  6. probe_success{job="blackbox-http-redirect-aware",instance="https://ladirecta.ar/"} = 1
  7. probe_http_status_code{job="blackbox-http-redirect-aware",instance="https://ladirecta.ar/"} = 301
  8. solo despues promover la alerta EcommerceLaDirectaArRedirectBroken

Resultado final

  • diseno redirect-aware preparado en Git
  • patron candidate / not deployed respetado
  • alerta .ar ya tiene camino tecnico claro
  • runtime O4 preservado sin cambios