Harden RTM endpoint adapter handling
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
@@ -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-
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
Reference in New Issue
Block a user