Componentes sueltos
Los componentes sueltos se usan en despliegues a medida: backend en un host, conector en otro, Elastic externo o supervisores corporativos.
Componentes habituales
spot-server: UI/API y configuración operativa.spot-agent-sap: extractor SAP.spot-license-blackbox: validador local requerido antes de backend y connector.spotctl: utilidad de administración y diagnóstico.- RFC SDK: librerías SAP necesarias para el conector.
- Elastic externo o embebido gestionado fuera del paquete all-in-one.
Cuándo elegirlo
- Necesitas directorios propios definidos por política interna.
- Hay separación entre equipo Basis, equipo Linux y equipo observabilidad.
- Elastic ya está estandarizado.
- El arranque se integra en un supervisor existente.
Separar escritura y lectura
Cada proceso spot-agent-sap configura un único writer
Elasticsearch+namespace y puede extraer N SAP. Cada entrada exige un ID
explícito; ese mismo valor se escribe como source_id y aparece como
targetId en la UI/API. Todos los SAP de ese proceso comparten los dos Data
Streams del namespace, pero permanecen aislados por source_id.
El backend configura uno o varios read scopes independientes, cada uno con URL, namespace y credenciales de lectura. Los standalone pueden escribir en uno o varios scopes ejecutando procesos separados. El catálogo descubre cada SAP, fija su binding a un solo scope y nunca usa otro Elasticsearch como fallback.
Checklist
- Define rutas de configuración, datos y logs.
- Define usuario de ejecución para cada proceso.
- Exporta variables necesarias del RFC SDK.
- Instala el validador y activa o instala la licencia.
- Configura y prueba los read scopes del backend.
- Configura el writer de cada connector con el mismo namespace que su scope.
- Configura N conexiones SAP con IDs explícitos y únicos.
- Levanta backend y conectores.
- Comprueba health, logs, ingestion y que
/api/targetsdescubre cadasource_iden el scope correcto.
Riesgos comunes
- Variables de RFC SDK no disponibles en el servicio.
- Directorios de log sin permisos de escritura.
- Elastic externo accesible desde backend pero no desde conector.
- Namespace distinto entre escritura y lectura.
- El mismo
source_idpublicado en dos scopes, que bloquea ese target contarget_binding_conflict.