Harden RTM endpoint adapter handling

This commit is contained in:
2026-08-11 13:56:30 +02:00
parent 951a5e72d1
commit 0f8e8034e6
18 changed files with 759 additions and 34 deletions
@@ -1,5 +1,10 @@
# ACC-Analyse: Checkmk-Datenalter und Endpoint Reachability
> Nachtrag 11.08.2026: Version 2.2.7 behebt die aus der RTM-Ausgabe
> identifizierten Schedule-, Oracle-DATABASE- und WCF-SAP-Sonderfälle. Die
> verbindliche Nachfolgeregel steht in
> [RTM-Endpoint-Adapterregeln-2026-08-11.md](RTM-Endpoint-Adapterregeln-2026-08-11.md).
## Befund
Die am 10.08.2026 bereitgestellten ACC-Artefakte zeigen zwei getrennte
+8 -2
View File
@@ -185,6 +185,10 @@ Zweck:
- Erkennt unter anderem Standard-URIs, UNC, MSMQ, `net.tcp`, WCF-SQL-
`mssql`-URIs, schemafreie `host:port`-Angaben, FTP-/SFTP-Ziele mit optionalen
Benutzerinformationen sowie lokale HTTP-/WCF-Wildcard-Listener.
- Schließt Scheduling-Komponenten vollständig aus. Oracle-`DATABASE`- und
WCF-SAP-Adressen werden, soweit eindeutig möglich, als TCP-Best-Effort-Ziel
geprüft; fehlende Ableitung und fehlgeschlagene Best-Effort-Probes alarmieren
nicht.
- Behandelt Adressen ohne eigenständiges Socket-Ziel (zum Beispiel lokale
Pfade, SMTP-Empfänger, Named Pipes und relative Receive-Listener) als
erwartbar ausgenommen und nicht als Abdeckungsfehler.
@@ -197,8 +201,8 @@ Status:
| Status | Bedingung |
| --- | --- |
| `OK` | Katalog und Runtimezustand vollständig; alle aktiven prüfbaren Ziele erreichbar. |
| `CRIT` | Mindestens ein getestetes TCP-/UDP-Ziel nicht erreichbar. |
| `OK` | Katalog und Runtimezustand vollständig; alle alarmierenden Ziele erreichbar. Best-Effort-Fehler bei DATABASE/WCF-SAP sind höchstens als Metrik sichtbar. |
| `CRIT` | Mindestens ein reguläres oder manuell konfiguriertes TCP-/UDP-Ziel nicht erreichbar. |
| `UNKNOWN` | Katalog fehlt/ist ungültig, Wochenabgleich scheitert, Runtimezustand ist unvollständig oder ein aktiver externer Endpoint kann nicht sicher auf Host/Port reduziert werden. |
| `OK` mit Hinweis | Nur wenn `ProbeEndpointConnectivity=false`; der Test ist bewusst deaktiviert. |
@@ -214,6 +218,8 @@ Metriken:
| `biztalk_endpoints_failed` | Nicht erreichbare aktive Artefaktziele; CRIT ab 1. |
| `biztalk_endpoints_unresolved` | Aktive statische Netzwerkadressen ohne sicher bestimmbaren Host/Port; `UNKNOWN` ab 1, sofern kein manueller Override existiert. |
| `biztalk_endpoints_expected_non_socket` | Aktive Artefakte, deren Adresse erwartbar kein eigenständiges TCP-/UDP-Ziel enthält. |
| `biztalk_endpoints_best_effort` | Automatisch abgeleitete aktive Oracle-DATABASE-/WCF-SAP-Ziele. |
| `biztalk_endpoints_best_effort_ignored` | Fehlgeschlagene Best-Effort-Probes, die vereinbarungsgemäß keinen Alarm auslösen. |
| `biztalk_endpoints_manual_overrides` | Aktive Ziele, die bewusst über einen geheimnisfreien manuellen Katalogeintrag aufgelöst werden. |
| `biztalk_endpoints_inactive_skipped` | Konfigurierte Einträge, deren BizTalk-Artefakt aktuell nicht aktiv ist. |
| `biztalk_endpoint_probe_duration_ms` | Gesamtlaufzeit der parallelisierten Socket-Probes in Millisekunden. |
+14 -1
View File
@@ -34,6 +34,7 @@ BizTalk-Runtimezustand gefiltert:
- Receive Location nur bei `IsDisabled=false`
- Send Port nur bei `Status=Started`
- dynamischer Send Port nie als statisches Ziel
- Scheduling-Komponente nie als Netzwerkziel
Damit wird ein inzwischen gestopptes/deaktiviertes Artefakt sofort nicht mehr
geprüft. Prüffähige aktuelle WMI-Adressen werden bei jedem Minutenlauf direkt
@@ -71,7 +72,7 @@ werden nur:
- Adaptername
- `TCP` oder `UDP`
- Host und Port
- `enabled` und `autoDiscovered`
- `enabled`, `autoDiscovered` und die Best-Effort-Kennzeichnung
URI-Benutzerinformationen, Kennwörter, Pfade und Querystrings werden nicht
geschrieben. Der Katalog liegt im bereits ACL-geschützten `data`-Verzeichnis;
@@ -135,6 +136,18 @@ passende nebenwirkungsfreie Netzwerktest. Er bestätigt DNS, Routing,
Firewall und einen annehmenden TCP-Port, aber nicht die fachliche Antwort der
Zielanwendung.
Oracle-`DATABASE`-Adressen mit explizitem Anbietersegment `/Oracle` verwenden
den angegebenen Port oder den Oracle-Standard TCP 1521. WCF-SAP-Adressen
verwenden vorrangig den ersten `SAPROUTER=/H/host[/S/port]`-Hop, andernfalls
`ListenerGwHost`/`ListenerGwServ` beziehungsweise `GwHost`/`GwServ`.
`sapgwNN` wird als TCP `33NN` abgeleitet; der SAProuter-Standard ist TCP 3299.
Diese automatisch erkannten Adapterziele sind `bestEffort="true"`: Die Probe
wird ausgeführt und gemessen, ein Fehlschlag aber nur in
`biztalk_endpoints_best_effort_ignored` gezählt. Nicht sicher ableitbare
DATABASE-/WCF-SAP-Adressen werden erwartbar ausgenommen. Ein manueller
Katalogeintrag bleibt standardmäßig streng alarmierend und ist die bewusste
Option für verbindliche Überwachung.
UDP ist verbindungslos. Bei `udp://host:port` bestätigt der Check nur DNS,
Route und erfolgreichen lokalen Datagrammversand. Für einen belastbaren
UDP-Dienstcheck wäre ein adapter-/protokollspezifisches Request/Response-
+5 -2
View File
@@ -61,15 +61,18 @@ Artefakte. Nur die Textliste ist begrenzt.
Gesund, ohne Auflistung aller Ziele:
```text
0 "BizTalk ACC Endpoint Reachability" biztalk_endpoints_configured=63;;;0|biztalk_endpoints_active=61;;;0|biztalk_endpoints_unique_targets=44;;;0|biztalk_endpoints_tested=61;;;0|biztalk_endpoints_available=61;;;0|biztalk_endpoints_failed=0;;1;0|biztalk_endpoints_unresolved=0;;1;0|biztalk_endpoints_expected_non_socket=12;;;0|biztalk_endpoints_manual_overrides=0;;;0|biztalk_endpoints_inactive_skipped=2;;;0|biztalk_endpoint_probe_duration_ms=842;;;0 Alle 61 aktiven, pruefbaren Send-/Receive-Endpunkte sind erreichbar (unique_targets=44, expected_non_socket=12, manual_overrides=0, probe_ms=842); catalog_utc=2026-08-04T10:00:00.0000000Z
0 "BizTalk ACC Endpoint Reachability" biztalk_endpoints_configured=63;;;0|biztalk_endpoints_active=61;;;0|biztalk_endpoints_unique_targets=44;;;0|biztalk_endpoints_tested=61;;;0|biztalk_endpoints_available=60;;;0|biztalk_endpoints_failed=0;;1;0|biztalk_endpoints_unresolved=0;;1;0|biztalk_endpoints_expected_non_socket=12;;;0|biztalk_endpoints_best_effort=9;;;0|biztalk_endpoints_best_effort_ignored=1;;;0|biztalk_endpoints_manual_overrides=0;;;0|biztalk_endpoints_inactive_skipped=2;;;0|biztalk_endpoint_probe_duration_ms=842;;;0 Alle regulaer alarmierenden aktiven Send-/Receive-Endpunkte sind erreichbar (active=61, available=60, unique_targets=44, expected_non_socket=12, best_effort=9, best_effort_ignored=1, manual_overrides=0, probe_ms=842); catalog_utc=2026-08-04T10:00:00.0000000Z
```
Fehlerhaft, nur mit nicht erreichbaren Zielen:
```text
2 "BizTalk ACC Endpoint Reachability" ... Endpoint reachability active=61, tested=61, available=59, failed=2, unresolved=0, expected_non_socket=12, manual_overrides=0; unavailable=SendPort:Orders\SP_Order_API[Primary]->orders.example:443/TCP(TCP timeout), ReceiveLocation:Invoices\RL_SFTP[Inbound]->sftp.example:22/TCP(SocketError=ConnectionRefused)
2 "BizTalk ACC Endpoint Reachability" ... Endpoint reachability active=61, tested=61, available=58, failed=2, unresolved=0, expected_non_socket=12, best_effort=9, best_effort_ignored=1, manual_overrides=0; unavailable=SendPort:Orders\SP_Order_API[Primary]->orders.example:443/TCP(TCP timeout), ReceiveLocation:Invoices\RL_SFTP[Inbound]->sftp.example:22/TCP(SocketError=ConnectionRefused)
```
Der nicht verfügbare Best-Effort-Endpunkt wird nur gezählt und nicht in
`unavailable=` ausgegeben. Die beiden regulären Fehler bleiben CRIT.
## Fehlender oder veralteter Provider-Snapshot
Alle neun Services werden `UNKNOWN`, zum Beispiel:
+3
View File
@@ -132,6 +132,9 @@ Soll:
- Receive Locations und Send Ports zeigen getrennte expected/unexpected Werte.
- Endpoint Reachability zeigt bei Erfolg nur die Gesamtzahl und bei Fehlern
ausschließlich nicht erreichbare oder wirklich unaufgelöste Ziele.
- Schedule ist vollständig ausgenommen; Oracle-DATABASE und WCF-SAP laufen
als TCP-Best-Effort und können keinen Alarm auslösen. Die zugehörigen
Erfolgs-/Ignoriert-Zähler bleiben für die Betriebsanalyse sichtbar.
- keine berechtigungsbedingten `UNKNOWN`-Services.
## Alarmierung der Transportkette
@@ -0,0 +1,101 @@
# RTM-Adapterregeln für Endpoint Reachability
## Anlass
Die ACC-Ausgabe vom 11.08.2026 zeigte `BizTalk Endpoint Reachability =
UNKNOWN`, obwohl die eigentlichen Socket-Probes in wenigen Millisekunden
abgeschlossen waren. Die Detailausgabe bestand überwiegend aus drei
Adapterklassen, die der generische URI-Parser nicht fachgerecht einordnen
konnte:
- Scheduling-Komponenten ohne externes Netzwerkziel,
- kundenspezifische `DATABASE`-Adressen, nahezu ausschließlich Oracle,
- WCF-SAP-Verbindungs-URIs mit Gateway- und SAProuter-Parametern.
Diese Fälle dürfen den RTM-Service weder mit Auflösungslücken noch mit
Fehlalarmen belasten.
## Verbindliche Klassifizierung ab Version 2.2.7
### Scheduling
Adaptername oder Adresse mit `Schedule`/`Scheduler` wird vollständig als
erwartbar ausgenommen. Es erfolgt keine Netzwerkprobe und kein UNKNOWN.
### DATABASE / Oracle
Nur die eindeutig erkennbare Form
```text
Database://host[:port]/.../Oracle
```
wird automatisch aufgelöst. Ein expliziter Port gewinnt; andernfalls wird
TCP 1521 verwendet. Andere DATABASE-Anbieter oder nicht eindeutig lesbare
Adressen werden erwartbar ausgenommen. Es wird kein UDP-Test erzeugt.
Oracle dokumentiert TCP 1521 als Standardadresse des Listeners und nimmt bei
fehlender Portangabe im Easy-Connect-Format ebenfalls 1521 an:
- [Oracle: Configuring the Network Environment](https://docs.oracle.com/en/database/oracle/oracle-database/19/admqs/configuring-the-network-environment.html)
- [Oracle: Configuring and Administering Oracle Net Listener](https://docs.oracle.com/en/database/oracle/oracle-database/21/netag/configuring-and-administering-oracle-net-listener.html)
### WCF-SAP
Microsoft dokumentiert `ListenerGwHost`, `ListenerGwServ` und `SAPROUTER` als
Bestandteile der SAP-Verbindungs-URI. Der Parser verwendet in dieser
Reihenfolge:
1. erster SAProuter-Hop aus `/H/host/S/port`,
2. `ListenerGwHost` und `ListenerGwServ`,
3. `GwHost` und `GwServ` als Fallback.
Numerische Dienste werden direkt übernommen. `sapgwNN` wird auf TCP `33NN`
abgebildet. Fehlt bei einem SAProuter-Hop `/S/`, gilt der dokumentierte
Standard TCP 3299. URI-Escapes werden vor der Auswertung dekodiert; Kennwörter,
Program-ID, Pfade und Querystrings gelangen weiterhin nicht in Katalog, Log
oder Checkmk-Ausgabe.
Quellen:
- [Microsoft Learn: Create the SAP system connection URI](https://learn.microsoft.com/en-us/biztalk/adapters-and-accelerators/adapter-sap/create-the-sap-system-connection-uri)
- [SAP Help: Entries in the Services File](https://help.sap.com/docs/SLTOOLSET/6bc963751d0840f996c5c9d7a7f83473/bb9faaebe0c74a58bbcc259c83f59437.html)
- [SAP Help: SAProuter Host and Port](https://help.sap.com/docs/SAP_NETWEAVER_AS_ABAP_FOR_SOH_740/e245703406684d8a81812f4c6334eb2f/486b5b0cb74c07bee10000000a42189d.html)
## Best-Effort statt Alarm
Automatisch abgeleitete DATABASE-/WCF-SAP-Ziele erhalten im lokalen Katalog
`bestEffort="true"`. Sie werden normal dedupliziert und per TCP verbunden.
- Erfolg erhöht die getesteten und verfügbaren Zähler.
- Timeout, DNS- oder Verbindungsfehler erhöht
`biztalk_endpoints_best_effort_ignored`.
- Der Fehler erscheint nicht als `unavailable=`, erzeugt keinen Warn-Logeintrag
pro Minute und ändert den Checkmk-Status nicht.
- Eine nicht ableitbare Adapteradresse zählt zu
`biztalk_endpoints_expected_non_socket`, nicht zu `unresolved`.
Damit erfüllt der Check die gewünschte „versuchen, sonst ignorieren“-Semantik.
Soll ein solches Ziel später verbindlich alarmieren, wird ein manueller
Katalogeintrag mit `autoDiscovered="false"` und ohne
`bestEffort="true"` hinterlegt. Reguläre automatisch erkannte Ziele bleiben
ebenfalls streng: Ihre Nichterreichbarkeit ist weiterhin CRIT.
## Regression und Abnahme
Die automatisierten Tests decken Scheduler-Ausschluss, Oracle-Standard- und
Explizitport, nicht unterstützte DATABASE-Anbieter, WCF-SAP-Gateway,
URI-kodierten SAProuter, zielbasierte SAP-Konfiguration ohne ableitbaren Host,
Geheimnisschutz und die nicht alarmierende Best-Effort-Ausgabe ab.
Für die Windows-/ACC-Abnahme nach Installation von 2.2.7:
1. Im Provider-Log muss der erzwungene Katalogabgleich erfolgreich sein.
2. `BizTalk Endpoint Reachability` darf wegen Schedule, DATABASE oder WCF-SAP
nicht mehr UNKNOWN werden.
3. `biztalk_endpoints_unresolved` darf diese drei Klassen nicht enthalten.
4. `biztalk_endpoints_best_effort` zeigt die tatsächlich abgeleiteten Oracle-
und SAP-Ziele; nicht erreichbare davon erscheinen nur in
`biztalk_endpoints_best_effort_ignored`.
5. Ein absichtlich nicht erreichbares reguläres Testziel muss weiterhin CRIT
auslösen, damit die strenge Standardalarmierung belegt bleibt.