Split components
Split components are used for custom deployments: backend on one host, connector on another, external Elastic, or corporate supervisors.
Common components
spot-server: UI/API and operational configuration.spot-agent-sap: SAP extractor.spot-license-blackbox: local validator required before backend and connector.spotctl: administration and diagnostic utility.- RFC SDK: SAP libraries required by the connector.
- External or separately managed Elastic.
When to Choose It
- You need custom directories defined by internal policy.
- Basis, Linux, and observability responsibilities are separated.
- Elastic is already standardized.
- Startup is integrated into an existing supervisor.
Separate writing from reading
Each spot-agent-sap process configures one Elasticsearch+namespace writer and
may extract N SAP systems. Every entry requires an explicit ID; that same value
is written as source_id and exposed as targetId by the UI/API. All SAP
systems in the process share the namespace's two Data Streams but remain
isolated by source_id.
The backend configures one or more independent read scopes, each with its own URL, namespace, and read credentials. Standalone connectors can feed several scopes by running separate processes. The catalog discovers every SAP, binds it to exactly one scope, and never fails over to another Elasticsearch.
Checklist
- Define configuration, data, and log paths.
- Define the execution user for each process.
- Export RFC SDK variables.
- Install the validator and activate or install the license.
- Configure and test the backend read scopes.
- Configure each connector writer with the same namespace as its scope.
- Configure N SAP connections with explicit, unique IDs.
- Start the backend and connectors.
- Check health, logs, ingestion, and that
/api/targetsdiscovers everysource_idin the correct scope.
Common risks
- RFC SDK variables missing from the service.
- Log directories not writable.
- External Elastic reachable from the backend but not from the connector.
- Writer and reader namespaces differ.
- The same
source_idis published in two scopes, which blocks that target withtarget_binding_conflict.