Saltar a contenido

svc-observability-o1

A. Identidad

  • service_id: svc-observability-o1
  • nombre: Observabilidad O1
  • estado: activo al 2026-06-01
  • owner: Gabi
  • criticidad: media-alta
  • fecha de alta: 2026-06-01
  • ultima revision: 2026-06-01

B. Proposito

  • resumen funcional: stack privado de monitoreo base del VPS y de la disponibilidad publica de OpenClaw.
  • rol dentro del VPS: dar visibilidad de host, Docker, contenedores y probes HTTPS sin tocar OpenClaw ni NPM.
  • por que existe: habilita dashboards, targets y alertas minimas para operar con evidencia.

C. Ubicacion

  • path VPS: /opt/stacks/observability
  • path repo/docs: infra/observability/ y docs/governance/services/svc-observability-o1.md
  • compose file: /opt/stacks/observability/docker-compose.yml
  • .env real: opcional; el despliegue actual funciona con defaults
  • archivos criticos:
  • /opt/stacks/observability/docker-compose.yml
  • /opt/stacks/observability/prometheus/prometheus.yml
  • /opt/stacks/observability/prometheus/rules/o1-base.yml
  • /opt/stacks/observability/alertmanager/alertmanager.yml
  • /opt/stacks/observability/blackbox/blackbox.yml
  • /opt/stacks/observability/grafana/provisioning/
  • /opt/stacks/observability/grafana/dashboards/
  • /opt/stacks/observability/secrets/grafana_admin_password

D. Docker

  • stack: observability
  • container names:
  • obs-prometheus
  • obs-grafana
  • obs-alertmanager
  • obs-node-exporter
  • obs-cadvisor
  • obs-blackbox-exporter
  • images/tags:
  • prom/prometheus:v3.12.0
  • grafana/grafana:13.0.1-security-01
  • quay.io/prometheus/alertmanager:v0.32.1
  • prom/node-exporter:v1.11.1
  • ghcr.io/google/cadvisor:v0.57.0
  • quay.io/prometheus/blackbox-exporter:v0.28.0
  • restart policy: unless-stopped en todos
  • networks:
  • obs-observability-internal
  • volumes:
  • obs_prometheus_data
  • obs_grafana_data
  • obs_alertmanager_data
  • bind mounts:
  • /opt/stacks/observability/*
  • host /, /proc, /sys, /var/run, /var/lib/docker, /dev/disk solo donde hace falta para exporters
  • published ports:
  • 127.0.0.1:3000 -> 3000/tcp solo para Grafana
  • internal ports:
  • 9090/tcp Prometheus
  • 3000/tcp Grafana
  • 9093/tcp Alertmanager
  • 9100/tcp Node Exporter
  • 8080/tcp cAdvisor
  • 9115/tcp Blackbox Exporter

E. Red

  • red Docker: obs-observability-internal
  • exposicion publica: ninguna
  • acceso humano permitido:
  • Grafana por 127.0.0.1:3000 en el VPS
  • tunel SSH ssh -L 3000:127.0.0.1:3000 openclaw-vps
  • quien puede hablar con quien:
  • Prometheus scrapea Alertmanager, Grafana, Node Exporter, cAdvisor y Blackbox Exporter
  • Blackbox Exporter prueba OpenClaw, NPM local y Portainer local
  • Grafana consulta solo a Prometheus

F. Publicacion y acceso

  • NPM: no participa en O1
  • dominio publico: ninguno
  • Grafana: solo localhost del VPS
  • credencial admin: password local en /opt/stacks/observability/secrets/grafana_admin_password

G. Datos y persistencia

  • datos criticos:
  • TSDB de Prometheus
  • base SQLite de Grafana
  • estado de Alertmanager
  • reglas, dashboards y provisioning
  • secreto admin de Grafana
  • volumenes:
  • obs_prometheus_data
  • obs_grafana_data
  • obs_alertmanager_data
  • que se puede regenerar:
  • contenedores
  • red obs-observability-internal
  • que NO se puede perder:
  • volumen obs_prometheus_data
  • volumen obs_grafana_data
  • directorio /opt/stacks/observability

H. Backups

  • proteccion actual por capa:
  • Git: infra/observability/docker-compose.yml, prometheus/prometheus.yml, prometheus/rules/o1-base.yml, alertmanager/alertmanager.yml, blackbox/blackbox.yml, grafana/provisioning/ y grafana/dashboards/
  • backup local VPS: observability-stack.tgz, obs-prometheus-volume.tgz, obs-grafana-volume.tgz, obs-alertmanager-volume.tgz
  • copia externa validada: C:\APV\backups\openclaw\daily/<timestamp>\ con replica integra de la carpeta diaria y validacion por SHA256SUMS
  • rutas backup:
  • /root/openclaw-backups/daily/<timestamp>/observability-stack.tgz
  • /root/openclaw-backups/daily/<timestamp>/obs-prometheus-volume.tgz
  • /root/openclaw-backups/daily/<timestamp>/obs-grafana-volume.tgz
  • /root/openclaw-backups/daily/<timestamp>/obs-alertmanager-volume.tgz
  • frecuencia: diario 03:00 junto al resto del VPS
  • restore probado: backup extendido y runbook documentado al 2026-06-01; falta simulacion de restore O1 desde copia externa en staging dedicada
  • RPO objetivo: 24 horas
  • RTO objetivo: 30-60 minutos
  • estrategia minima de copia externa:
  • minimo recuperable para O1: observability-stack.tgz
  • minimo recuperable recomendado ante perdida total del VPS: observability-stack.tgz + obs-prometheus-volume.tgz + obs-grafana-volume.tgz + obs-alertmanager-volume.tgz + SHA256SUMS + manifest.txt
  • justificacion: observability-stack.tgz ya incluye configuraciones O1, dashboards Grafana, reglas Prometheus, Alertmanager, Blackbox y secreto admin de Grafana; los obs-*.tgz preservan historia, SQLite y estado operativo que Git no cubre
  • que NO se pierde con la estrategia recomendada:
  • compose, configs y dashboards versionados
  • secreto admin de Grafana si se conserva observability-stack.tgz
  • base SQLite de Grafana
  • TSDB local de Prometheus dentro de la ventana del ultimo backup
  • estado de silencios de Alertmanager dentro de la ventana del ultimo backup
  • que SI se puede perder:
  • metricas, dashboards editados en caliente o silencios creados despues del ultimo backup diario
  • cualquier corrida local no exportada todavia fuera del VPS
  • dependencia para perdida total del VPS:
  • O1 es recuperable solo si existe al menos una copia externa reciente de la corrida diaria; el backup que queda unicamente en /root/openclaw-backups no alcanza ante perdida total del host

I. Targets iniciales

  • targets internos:
  • prometheus:9090
  • alertmanager:9093
  • grafana:3000
  • node-exporter:9100
  • cadvisor:8080
  • blackbox-exporter:9115
  • probes:
  • https://openclaw.alpuntodeventa.com.ar/
  • http://host.docker.internal:81/
  • https://host.docker.internal:9443/

J. Dependencias

  • depende de:
  • Docker del host
  • red obs-observability-internal
  • volumenes O1
  • servicios que dependen de este:
  • operacion diaria del VPS
  • impacto si cae: se pierde visibilidad y alerta base, pero OpenClaw, NPM y Portainer siguen funcionando

K. Operacion

  • como validar salud:
  • docker ps --filter name=obs-
  • docker exec obs-prometheus wget -qO- http://127.0.0.1:9090/api/v1/targets
  • curl -I http://127.0.0.1:3000/login
  • dashboards provisionados:
  • Executive Overview
  • Infrastructure Health
  • Docker Operations
  • Service Availability
  • Capacity Planning
  • folder Grafana: O2 Dashboards
  • datasource operativo: Prometheus con uid prometheus
  • catalogo operativo: O2-DASHBOARDS-CATALOG.md
  • como reiniciar: cd /opt/stacks/observability && docker compose up -d
  • como recuperar: usar RESTORE-OBSERVABILITY-O1.md

L. Seguridad

  • secretos: password de Grafana fuera de Git y guardada solo en el VPS
  • exposicion publica: ninguna
  • hardening:
  • solo 127.0.0.1:3000 publicado
  • sin NPM
  • sin puertos publicos nuevos
  • riesgos:
  • cAdvisor requiere mounts sensibles del host
  • Prometheus puede crecer si se sube la retencion

M. Estado y decisiones

  • decisiones tomadas:
  • O1 queda privada
  • Grafana no se publica por NPM
  • Alertmanager queda operativo sin notificaciones externas
  • retencion inicial de Prometheus: 7d y 6GB
  • la proteccion externa minima de O1 se hereda de bkp-openclaw-external-copy sin crear servicios nuevos
  • por que esta asi: prioriza visibilidad real con bajo riesgo y bajo ruido operativo