Betriebskonfiguration
SPOT 2.0 trennt Producer und Reader: Der Agent schreibt SAP-Telemetrie
schema_version=2 in metrics und logs; das Backend liest dieselben Data
Streams. Separate Felder für Jobs-, Events- oder WPInfo-Indizes gibt es nicht.
SAP-Targets und Storage
In SPOT bedeutet Target immer eine SAP-Instanz. sapconnection[].id wird
als source_id geschrieben und ist derselbe Wert wie targetId in API,
globalem Selektor, Alerts, Thresholds, ML und KI. Die ID ist verpflichtend,
wird nach Trim exakt verglichen und nie über einen Alias aufgelöst.
Ein Read Scope kombiniert Elasticsearch-URL, Namespace und reine
Lesezugangsdaten. Er erscheint nie als Target in der Kopfzeile. Ein on-prem
Backend kann mehrere Scopes lesen; ein Namespace darf mehrere SAP-Systeme
enthalten, sofern jedes eine eigene source_id besitzt.
Target- und Read-Scope-IDs verwenden nach dem Trimmen
^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$ und sind case-sensitive. Die Konfiguration
speichert Read-Scopes deterministisch nacheinander. Schlägt ein Save fehl,
bleiben spätere Scopes als Entwurf erhalten und die UI nennt die noch offenen
Einträge; so gehen keine konkurrierenden Updates verloren.
setup:
elastic_mode: external
connector_mode: hybrid
local_connector_read_scope_id: elastic-pro
target_catalog_path: /var/lib/spot/targets/catalog.json
elasticsearch_read_scopes:
- id: elastic-pro
alias: Produktion
url: https://elastic.example.local:9200
namespace: PRO
enabled: true
Ein Connector-Prozess besitzt einen Elasticsearch-Writer und N explizite
sapconnection-IDs. Sie teilen spot-integration-PRO-metrics und
spot-integration-PRO-logs; jeder Read filtert dennoch exakt
tenant_id=onprem + source_id=targetId. SPOT wechselt nie ersatzweise zu einem
anderen Scope.
Der secret-freie Katalog liegt unter /var/lib/spot/targets/catalog.json und
wird durch Backup, Restore und Upgrade erhalten. Dieselbe source_id in zwei
Scopes ergibt target_binding_conflict; abweichende SID/Mandant-Identität
ergibt target_identity_conflict. Konflikte bleiben sichtbar, sind aber bis
zur Korrektur des Connectors nicht abfragbar.
Ein Target ohne aktuelle Beobachtungen wird stale: Es bleibt mit seinem
bekannten Binding sichtbar und abfragbar. Antwortet sein Read Scope nicht, wird
es unreachable; die APIs dieses Targets liefern
503 target_storage_unavailable, während Targets anderer Scopes weiter
funktionieren. SPOT erhält den letzten gültigen Katalog und bindet oder löscht
ein SAP wegen eines temporären Ausfalls niemals automatisch neu.
Legacy-elasticsearch_targets, Default-/implizite Targets, erzeugte sap-N-
IDs, Alias-Auflösung und automatische Topologie-Migration werden nicht
unterstützt. Alte Konfigurationen müssen über Setup neu erstellt werden.
Unter Configuration können Karten in Elasticsearch Read Scopes mit Abhängigkeitsprüfung hinzufügen, bearbeiten, testen und entfernen. Local Connector zeigt Modus und Writer; remote erklärt die Konfiguration der Standalone-Hosts. SAP Targets gruppiert bei Bedarf nach Scope und zeigt Alias, ID, SID, Mandant, Ursprung, letzten Empfang und Status. Nur Alias und enabled sowie die IANA-Zeitzone sind editierbar; ID und Binding bleiben read-only. Die Zeitzone wird geprüft, bevor externes ML für dieses Target aktiviert wird.
Embedded Setup aktiviert manage_data_streams_ilm. Bei externen Targets bleibt
es aus; Bootstrap prüft dann nur die Verbindung. Wenn ausdrücklich aktiviert,
verwaltet SPOT ausschließlich metrics und logs.
TLS-Vertrauen und zielgebundene Secrets
Importieren Sie Unternehmens-CAs unter Configuration > Trust store. SPOT zeigt Name, SHA-256-Fingerprint, Subject, Issuer, Ablauf und zugeordnete Ziele. Systempakete speichern sie unter /etc/spot/tls, portable Installationen unter $SPOT_HOME/config/tls. Die UI akzeptiert keine beliebigen Pfade und löscht keine zugeordnete CA.

Externes Elastic, LDAP/AD und HTTPS-KI-Provider können System-CAs, eine importierte CA oder ausdrücklich insecure_skip_verify verwenden. Die Ausnahme schaltet HTTPS nicht auf HTTP um, erlaubt keine Redirects und deaktiviert keine DNS-/IP-Kontrollen. Solange sie aktiv ist, bleibt eine Warnung sichtbar und Save/Test werden auditiert.
Ein maskiertes Credential gehört zur exakten Zielidentität. Ändern sich Protokoll, Host, Port, Base Path, Authentifizierung, Benutzer/Bind-DN, SNI, CA oder TLS-Richtlinie, muss das vollständige Secret erneut eingegeben werden. Test und Save verwenden dieselbe Regel und testen nie ein altes Secret gegen ein neues Ziel.
LDAP und Active Directory
LDAPS und StartTLS werden einschließlich RFC1918-Zielen unterstützt. Wählen Sie strikte Prüfung, eine importierte CA oder deaktivierte Zertifikatsprüfung. Das Bind-Passwort ist an Protokoll, Host, Port, Bind-DN, SNI und TLS-Richtlinie gebunden. SPOT verbindet sich mit der bereits validierten IP, um DNS Rebinding zu verhindern.
Lokale Benutzer und AD
Öffnen Sie Configuration > Local users mit einem Administratorkonto. Dort können Sie lokale Konten erstellen, umbenennen, aktivieren oder deaktivieren, die Rolle ändern, das Passwort zurücksetzen und Konten löschen. Neue Konten erhalten genau eine dieser Rollen:
- admin: vollständige Konfiguration und Administration;
- viewer: Dashboards und Evidenz lesen, ohne Änderungen vorzunehmen.
Für Viewer lädt die Configuration-Ansicht keine Navigation, Formulare, Tests
oder Speichern-Schaltflächen. Ist Konfiguration bereits geladen, erscheint nur
eine schreibgeschützte Statusübersicht; die Administration bleibt admin
vorbehalten.
SPOT erlaubt nicht, den letzten aktivierten lokalen Administrator zu löschen, zu deaktivieren oder herabzustufen. Eine Änderung von Passwort, Rolle oder Status widerruft die bisherigen Sitzungen dieses Kontos. Identitäten, die sich bereits über Active Directory angemeldet haben, erscheinen in derselben Tabelle mit Provider AD, bleiben jedoch read-only: Credentials und Lebenszyklus werden im Verzeichnis verwaltet, die Berechtigungen kommen aus der Gruppenzuordnung.
Ein identischer Username kann einmal als Local und einmal als AD existieren, ohne dass SPOT die Identitäten vermischt. On-prem verwendet kein SAML; SAML bleibt eine SaaS-Integration.

KI-Provider
Provider mit API-Key benötigen HTTPS. Sie können eine gültige CA oder deaktivierte Zertifikatsprüfung verwenden; Redirects sind gesperrt. Loopback-HTTP ist nur ohne API-Key erlaubt. Privates LAN-HTTP verlangt ebenfalls keinen API-Key und eine ausdrückliche Risikoakzeptanz; die UI zeigt dieses Risiko getrennt von ungeprüftem HTTPS.
Quellen und Sammlungen
Jede SAP-Quelle hat eine stabile ID, IANA-Zeitzone und acht Sammlungen:
| Familie | Standard | Inhalt |
|---|---|---|
| Metrics | 300 s | CCMS- und Operations-Metriken |
| CCMS events | 300 s | Normalisierte Events |
| Jobs | 300 s | Runs und Logzeilen |
| Program statistics | 300 s | Standardausführungen und Abhängigkeiten je ABAP-Programm |
| Work processes | 300 s | Prozess-Snapshots |
| ABAP dumps | 300 s | Bereinigte ST22-Evidenz |
| RFC failures | 300 s | tRFC/aRFC/qRFC/bgRFC ohne Payload |
| Certificates | 86400 s | Öffentliches Inventar und Übergänge |
Jedes Intervall ist eine an der Uhr ausgerichtete feste Frequenz. Bei 300 Sekunden starten die Familien in deterministischen Phasen innerhalb der ersten Minute jedes Fünf-Minuten-Blocks. Jede Kombination aus Quelle und Familie läuft unabhängig, sodass ein langsamer Aufruf die übrigen nicht verschiebt. Start und Konfigurations-Reload führen eine gestaffelte Bootstrap-Extraktion aus und fassen verpasste Zyklen zusammen, statt verspätete Läufe aufzustauen.
Jede Fähigkeit meldet supported, partial, unsupported, unauthorized,
unavailable oder error, letzten Erfolg und einen bereinigten Fehler. Bei
Program statistics bewahrt partial alle Hauptmessungen des bestätigten
Intervalls und erklärt batchstep, rfc, http und epp für nicht verfügbar.
Ihr Fehlen behauptet nicht, dass diese Schritte, Aufrufe oder Kontexte nicht
auftraten. Der RFC-Benutzer benötigt
minimalen S_RFC-Zugriff auf die Standardfunktion
SWNC_GET_STATRECS_FRAME von SCSM_NW_WORKLOAD; Transport oder eigenes
ABAP-Artefakt werden nicht installiert. Die Release muss das Remote-Fenster
READ_START_DATE/TIME, READ_END_DATE/TIME, READ_TIME_ZONE, MAX_RECORDS
und READ_ONLY_MAINRECORDS bereitstellen. SPOT verlangt im Descriptor derselben
Invokation optionales IMPORT INT MAX_RECORDS mit Default -1,
READ_ONLY_MAINRECORDS als IMPORT CHAR und beide Outputs als EXPORT TABLE;
SPOT sendet READ_ONLY_MAINRECORDS="X", lässt MAX_RECORDS weg und sendet kein
künstliches Limit.
Jeder Zyklus liest 15 Minuten erneut und versucht, bis zu 30 Minuten vorzugehen,
in Frames von maximal 60 Sekunden. Ein vollständiges Blatt mit mehr als 400
Hauptdatensätzen behält alle Ausführungen bei und verkleinert nur das künftige
Maximum dieser Quelle; genau 400 reduzieren es nicht. Die Anzahl zeigt keine
Kürzung an. Das
Protokoll darf leer sein oder nur Standard-Abschlusszeilen mit einem dezimalen
RC von null enthalten. Ein fehlendes, mehrdeutiges, anders strukturiertes oder
von null abweichendes Protokoll lässt das Blatt offen; sein Fehlertext wird
nicht protokolliert. Explizite Kürzung lässt das Blatt ebenfalls offen und kann bis auf eine Sekunde geteilt werden; höchstens 32 Programs-RFC-Lesevorgänge in gleitenden 60 Sekunden über alle Quellen zulässig. Das Budget übersteht Neustarts; bei Erschöpfung wartet die Fortsetzung ohne SAP-Verbindung und ohne weiteren Worker. Die Bestätigung jedes Blatts bestätigt nur dessen gelesene Grenze. Jeder Horizont schreitet höchstens 30 Minuten voran; liegt der Rückstand über dem Sammelintervall plus 120 Sekunden, beginnt der nächste sofort.
Das Aufholen kann mehrere Zyklen dauern; prüfen Sie den SAP-Zeitstempel und
nicht nur den Eingang.
Sättigung des kleinsten Frames und andere Lese-/Validierungsfehler lassen keine
exportierbaren Dokumente oder Checkpoint-Fortschritt zu. Bei Abbruch oder
fehlender Bestätigung während des Exports bleibt der Cursor unbestätigt, auch
wenn das Ziel bereits empfangene, deduplizierbare Dokumente behalten kann. Ein
ungelesener Rest gilt nie als abgedeckt. Jedes RFC-Ergebnis hat ein Dekodierbudget von 10.000
Zeilen und 64 MiB. Der Zyklus behält höchstens 50.000 Dokumente
und 32 MiB serialisierten normalisierten Inhalt einschließlich Manifest. Das
Überschreiten einer Grenze oder eine wiederholte Identität mit abweichendem
Inhalt verwirft den gesamten Zyklus ohne Export oder Cursor-Fortschritt. Diese
Grenzen begrenzen nicht den Speicher innerhalb des nativen RFC-Invokes. Jedes
gültige Blatt bewahrt alle Hauptdatensätze und ein Manifest mit exakter Anzahl
und exaktem Fenster; erst sein ACK verschiebt den Checkpoint.
Bevor der Kindprozess startet, gilt für die Zulassung der Quelle ein separates
Limit von 30 Sekunden. Erst nach erfolgreicher Zulassung verarbeitet er ein
Teilfenster mit einem neuen Budget von 240 Sekunden und endlichen Reserven für
Beendigung und Reap; Restzeit wird nicht übernommen. Läuft die Zulassung ab oder wird sie
abgebrochen, startet der Worker nicht; es gibt weder Teilung eines Teilfensters,
Export, ACK noch Cursor-Fortschritt. Die nächste Quelle in der Warteschlange kann
fortfahren. Der Elternprozess bewahrt bereinigte Grenzen für Descriptor-Suche,
Parameter-Vorbereitung, Output-Auswahl, Invoke und Decode auch ohne
Terminal-Record: Dauer null markiert den Eintritt, eine positive Dauer den
Abschluss. Sie enthalten nur Phase und Dauer, dienen nur der Diagnose und
ersetzen niemals Export, ACK oder Checkpoint-Fortschritt. Wenn der Kindprozess sein exaktes 240-Sekunden-Limit erreicht und das aktive
Teilfenster noch teilbar ist, exportiert der Koordinator nichts und lässt Cursor
sowie frühere ACKs unverändert. Er ersetzt dauerhaft nur dieses Teilfenster durch
zwei zusammenhängende Hälften, bewahrt die übrige Queue und den Backoff und
reiht die Fortsetzung sofort mit fairer Verteilung wieder ein. Ein Abbruch durch Reload hat Vorrang, erlaubt
diese Teilung niemals, bleibt ein Abbruch der Sammlung und wird nicht als
Handoff-Fehler gemeldet. Eine fehlende Teilfähigkeit stoppt
die übrigen Sammlungen nicht.
Ein vollständiger Lesevorgang ab 60 Sekunden oder mit mehr als 400 Hauptdatensätzen halbiert das dauerhafte Maximum für die nächsten Teilfenster dieser Quelle von 60 Sekunden bis auf eine Sekunde. Der Wert übersteht Neustarts, ändert keine bestätigten Grenzen und wird nicht mit einer anderen Quelle geteilt. Acht vollständige, bestätigte Blätter der gelernten Größe nacheinander mit je weniger als zehn Sekunden, höchstens 100 Hauptdatensätzen und 8 MiB normalisiert können ihn nur für den nächsten Horizont bis auf 60 Sekunden verdoppeln. Fehler setzen die Folge zurück; Timeout oder Sättigung verhindern Wachstum für 15 Minuten. Kleinere Blätter können die 32 Zulassungen pro Minute früher verbrauchen; die dauerhafte Fortsetzung wartet auf Kapazität. Ein universelles Speicherlimit wird nicht garantiert.
Der bereinigte Fehler unterscheidet ein erschöpftes Aufrufbudget, Sättigung im kleinsten Frame, ein ungültiges Fenster, ein erschöpftes Gesamtbudget und einen Identitäts-/Systemkonflikt. Nur eine Version, die eine solche Klasse meldet, erlaubt diese Zuordnung; ein früherer generischer Fehler nennt keine Ursache.
Diese Grenzen reduzieren Quellen- und Decoder-Arbeit. Sichere bei anhaltendem
Druck die vorherige Konfiguration, deaktiviere vorübergehend nur
program_statistics und bestätige den Fortschritt der übrigen Familien.
Installiere eine korrigierte, unterstützte Connector-Version und miss den
gesamten Prozess unter realer SAP-Last gegen den Host-Headroom, bevor du die
Sammlung wieder aktivierst. Erhöhe Ressourcenlimits nicht als ersten Schritt.
Bei manage_data_streams_ilm=false prüft Bootstrap nur die Mappings aller
Backing Indices. Fehlende Programs-Felder erzeugen
program_template_update_required: Aktualisiere vor der Programs-Aufnahme das
externe Template. Diese Aktion ist von template_update_required der Job Logs
getrennt und deaktiviert keine Job Logs mit bereits gültigen Mappings.
SAP-Passwörter sind nur schreibbar. SPOT behält ein gespeichertes Passwort bei anderen Änderungen nur dann bei, wenn Verbindungs-ID, ASHOST, Systemnummer, Mandant und RFC-Benutzer unverändert bleiben. Ändert sich einer dieser Werte, muss das vollständige Passwort neu eingegeben werden; eine Maske oder ein leeres Feld verwendet die vorherige Anmeldeinformation nicht für das neue Ziel.
Dieselben Zielkontrollen blockieren Cloud-Metadata, Link-local, Multicast und unspecified Adressen. RFC1918 ist on-prem erlaubt; insecure_skip_verify umgeht diese Grenzen nicht.
Inkrementeller Zustand und Sicherheit
Watermarks/Fähigkeiten liegen unter /var/lib/spot-agent-sap (oder
$SPOT_HOME/data). Vollständige Paginierung, Überlappung und deterministische
event_id schützen Neustarts; der erste Jobs-/Dump-/RFC-Backfill umfasst 24
Stunden.
Dumps schließen Speicher-/Geschäftsdaten aus, RFC-Datensätze den Call-Payload und Zertifikatsdaten private Schlüssel. Viewer/Admin-Lesezugriffe bleiben source-scoped; nur Admins ändern die Konfiguration. ML nutzt sparse Dump-/RFC-Zähler, Zertifikate sind deterministisch ohne Forecast. AI-Tools sind read-only und source-scoped.
ML mit externem Elasticsearch aktivieren
Das Vorhandensein von Daten aktiviert ML nicht automatisch. Für jeden externen Read Scope:
- weisen Sie jedem aktivierten SAP-Target eine gültige IANA-Zeitzone zu;
- konfigurieren Sie einen Writer-API-Key, der auf die vier angezeigten ML-Ziele begrenzt ist;
- wählen Sie Run ML preflight in Elasticsearch read scopes;
- aktivieren und speichern Sie ML erst, wenn das Ergebnis ML ready lautet.
Der Preflight arbeitet schreibgeschützt: Sowohl
spot-integration-<namespace>-metrics als auch
spot-integration-<namespace>-logs müssen als exakte native Data Streams
existieren; ein Index, Alias oder nur eine Familie reicht nicht. Er fragt die
kanonischen trainierbaren Serien für das Target ab und verlangt, dass mindestens
eine davon innerhalb von 42 Tagen 21 beobachtete Tage, drei Wochenzyklen und
70 % Abdeckung erreicht. Andere schema-v2-Dokumente können ML nicht als ready
deklarieren. Zusätzlich prüft er IANA-Zeitzone, Target-Trennung und effektive
Berechtigungen. Er erstellt keine Indizes, Templates, Pipelines, Data Streams
oder ILM.
Nach der Aktivierung führt das SPOT-Backend alle fünf Minuten Inferenz aus,
aktualisiert Forecasts stündlich und trainiert täglich. Der externe Connector
bleibt ausschließlich Produzent der Telemetrie. SPOT schreibt nur abgeleitete
Modelle, Baselines, Forecasts und Anomalien, immer mit der exakten source_id;
die Streams metrics und logs werden nie verändert.

Das Backend filtert ausschließlich schema_version=2 im zugeordneten Read
Scope und für die exakte source_id. Dokumente eines älteren Producers werden
ignoriert; SPOT migriert sie nicht und aktiviert keinen Fallback. Ohne echtes
v2-Signal zeigt die UI je nach Ansichtssemantik Keine Daten oder UNKNOWN,
niemals eine synthetische Null. In den Modi remote und hybrid beeinflusst
der Journal-Zustand des lokalen Connectors keine Abfragen von Standalone-
Targets.