Use proper German umlauts in documentation
This commit is contained in:
+131
-131
@@ -2,24 +2,24 @@
|
||||
|
||||
## 1. Ziel und Randbedingungen
|
||||
|
||||
Die Anwendung ueberwacht BizTalk Server 2020 auf Windows Server 2019 mit
|
||||
Die Anwendung überwacht BizTalk Server 2020 auf Windows Server 2019 mit
|
||||
Checkmk 2.4. Pro Umgebung (`ACC`, `DEV`, `TST`, `PRD`) wird lokal auf dem
|
||||
BizTalk-Server gesammelt. Das Checkmk-MSSQL-Plugin bleibt fuer die allgemeine
|
||||
SQL-Ueberwachung zustaendig; BizTalk Checkmk Pulse liefert die
|
||||
BizTalk-Server gesammelt. Das Checkmk-MSSQL-Plugin bleibt für die allgemeine
|
||||
SQL-Überwachung zuständig; BizTalk Checkmk Pulse liefert die
|
||||
BizTalk-spezifische Laufzeit- und Berechtigungssicht.
|
||||
|
||||
Verbindliche Randbedingungen:
|
||||
|
||||
- Der Checkmk Windows Agent bleibt `LocalSystem`.
|
||||
- `LocalSystem` erhaelt keine BizTalk-/SQL-Gruppenmitgliedschaft.
|
||||
- Ein normales dediziertes AD-Servicekonto sammelt minuetlich.
|
||||
- Der Agentpfad fuehrt niemals WMI- oder SQL-Abfragen aus.
|
||||
- Fehler muessen als gueltige Checkmk-`UNKNOWN`-Services sichtbar werden.
|
||||
- Schreiben und Lesen duerfen nie einen halben Snapshot exponieren.
|
||||
- Installation und Laufzeit benoetigen keine PowerShell und keine BizTalk-DLL-Referenz.
|
||||
- Installation, ACL und Scheduled Task muessen reproduzierbar sein.
|
||||
- `LocalSystem` erhält keine BizTalk-/SQL-Gruppenmitgliedschaft.
|
||||
- Ein normales dediziertes AD-Servicekonto sammelt minütlich.
|
||||
- Der Agentpfad führt niemals WMI- oder SQL-Abfragen aus.
|
||||
- Fehler müssen als gültige Checkmk-`UNKNOWN`-Services sichtbar werden.
|
||||
- Schreiben und Lesen dürfen nie einen halben Snapshot exponieren.
|
||||
- Installation und Laufzeit benötigen keine PowerShell und keine BizTalk-DLL-Referenz.
|
||||
- Installation, ACL und Scheduled Task müssen reproduzierbar sein.
|
||||
|
||||
## 2. Ausloeser der Architekturanderung
|
||||
## 2. Auslöser der Architekturänderung
|
||||
|
||||
Der ACC-Agent-Dump vom 29.07.2026 bewies:
|
||||
|
||||
@@ -31,13 +31,13 @@ Innerer Fehler: Login failed for user 'BEW\AV23AGPWBIO1$'
|
||||
```
|
||||
|
||||
Lokales `root\MicrosoftBizTalkServer` war erreichbar. Die
|
||||
datenbankgestuetzten BizTalk-WMI-Klassen scheiterten erst beim Zugriff des
|
||||
datenbankgestützten BizTalk-WMI-Klassen scheiterten erst beim Zugriff des
|
||||
Providers auf den getrennten SQL Server. DCOM-, Firewall- oder pauschale
|
||||
WMI-ACL-Aenderungen beheben diesen Befund nicht.
|
||||
WMI-ACL-Änderungen beheben diesen Befund nicht.
|
||||
|
||||
Eine Berechtigung des Maschinenkontos haette die Netzwerkrolle allen
|
||||
Eine Berechtigung des Maschinenkontos hätte die Netzwerkrolle allen
|
||||
`LocalSystem`-Diensten des BizTalk-Servers vermittelt. Die jetzt implementierte
|
||||
Producer/Consumer-Trennung beschraenkt sie stattdessen auf ein dediziertes
|
||||
Producer/Consumer-Trennung beschränkt sie stattdessen auf ein dediziertes
|
||||
Konto.
|
||||
|
||||
## 3. Architektur
|
||||
@@ -67,12 +67,12 @@ Konto.
|
||||
│ └─ local\biztalk_checkmk_pulse.cmd │
|
||||
│ └─ BizTalkCheckmkPulse.exe --consume │
|
||||
│ ├─ Format/Alter/Maschine/SHA-256 validieren │
|
||||
│ └─ Payload unveraendert nach STDOUT │
|
||||
│ └─ Payload unverändert nach STDOUT │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
Eine gemeinsame EXE implementiert beide Modi. Das reduziert
|
||||
Versionsabweichungen. Die zentrale Config unter `%ProgramFiles%` gilt fuer
|
||||
Versionsabweichungen. Die zentrale Config unter `%ProgramFiles%` gilt für
|
||||
Provider und Consumer.
|
||||
|
||||
### 3.1 Provider-Modus
|
||||
@@ -86,13 +86,13 @@ Aufruf:
|
||||
Ablauf:
|
||||
|
||||
1. Config laden und absolute Runtimepfade validieren.
|
||||
2. Tageslogs gemaess `LogRetentionDays` bereinigen.
|
||||
2. Tageslogs gemäß `LogRetentionDays` bereinigen.
|
||||
3. exklusives Handle auf `<SnapshotPath>.provider.lock` halten.
|
||||
4. WMI-, SQL- und Event-Log-Probes ausfuehren.
|
||||
4. WMI-, SQL- und Event-Log-Probes ausführen.
|
||||
5. neun stabile und optionale dynamische Checkmk-Zeilen formatieren.
|
||||
6. Snapshot in einer eindeutigen Temporaerdatei desselben Verzeichnisses
|
||||
6. Snapshot in einer eindeutigen Temporärdatei desselben Verzeichnisses
|
||||
schreiben.
|
||||
7. `Flush(true)` ausfuehren und Temporaerdatei atomar publizieren.
|
||||
7. `Flush(true)` ausführen und Temporärdatei atomar publizieren.
|
||||
8. Laufzeit, Zeilen- und Diagnosezahl loggen.
|
||||
|
||||
Exitcodes:
|
||||
@@ -104,7 +104,7 @@ Exitcodes:
|
||||
| `2` | Parallelstart oder Snapshot-I/O-Fehler. |
|
||||
|
||||
Fachliche WMI-/SQL-Fehler werden strukturiert in den Snapshot geschrieben und
|
||||
muessen nicht zwingend einen Prozessfehler verursachen. So bleibt die genaue
|
||||
müssen nicht zwingend einen Prozessfehler verursachen. So bleibt die genaue
|
||||
Fehlerkategorie in Checkmk sichtbar.
|
||||
|
||||
### 3.2 Consumer-Modus
|
||||
@@ -120,19 +120,19 @@ setzt es trotzdem explizit.
|
||||
|
||||
Der Consumer:
|
||||
|
||||
- oeffnet nur den Snapshot,
|
||||
- begrenzt die Dateigroesse vor dem Einlesen,
|
||||
- öffnet nur den Snapshot,
|
||||
- begrenzt die Dateigröße vor dem Einlesen,
|
||||
- validiert striktes UTF-8,
|
||||
- validiert Formatversion und Header,
|
||||
- fordert die lokale Maschinenkennung,
|
||||
- berechnet SHA-256 ueber den exakten Payload,
|
||||
- prueft Zeilenanzahl und Checkmk-Zeilenform,
|
||||
- verwirft Zeitstempel mehr als fuenf Minuten in der Zukunft,
|
||||
- berechnet SHA-256 über den exakten Payload,
|
||||
- prüft Zeilenanzahl und Checkmk-Zeilenform,
|
||||
- verwirft Zeitstempel mehr als fünf Minuten in der Zukunft,
|
||||
- verwirft Snapshots nach `SnapshotMaxAgeSeconds`,
|
||||
- gibt bei Erfolg ausschliesslich den validierten Payload aus.
|
||||
- gibt bei Erfolg ausschließlich den validierten Payload aus.
|
||||
|
||||
Er gibt immer Exitcode `0` zurueck, damit ein Fehler die komplette
|
||||
Checkmk-Agentsektion nicht zerstoert. Jede Ablehnung erzeugt neun
|
||||
Er gibt immer Exitcode `0` zurück, damit ein Fehler die komplette
|
||||
Checkmk-Agentsektion nicht zerstört. Jede Ablehnung erzeugt neun
|
||||
`UNKNOWN`-Zeilen und einen Eintrag im Consumer-Log.
|
||||
|
||||
## 4. Snapshot-Vertrag
|
||||
@@ -144,33 +144,33 @@ BIZTALK_CHECKMK_PULSE_SNAPSHOT_V2
|
||||
generatedUtc=2026-07-30T12:34:56.1234567Z
|
||||
machineBase64=QVYyM0FHUFdCSU8x
|
||||
identityBase64=QkVXXHN2Y19iaXp0YWxrX2NtayQ=
|
||||
payloadLines=8
|
||||
payloadLines=9
|
||||
payloadSha256=<64 hex characters>
|
||||
|
||||
0 "BizTalk Platform" - ...
|
||||
...
|
||||
```
|
||||
|
||||
Maschine und Identitaet sind Base64-kodiert, um Zeilenumbrueche und
|
||||
Trennzeichen im Header auszuschliessen. Base64 ist hier keine Verschluesselung.
|
||||
Die SHA-256-Pruefung schuetzt vor unbemerkter Teil-/Fehlschreibung, nicht vor
|
||||
Maschine und Identität sind Base64-kodiert, um Zeilenumbrüche und
|
||||
Trennzeichen im Header auszuschließen. Base64 ist hier keine Verschlüsselung.
|
||||
Die SHA-256-Prüfung schützt vor unbemerkter Teil-/Fehlschreibung, nicht vor
|
||||
einem lokalen Administrator.
|
||||
|
||||
### 4.1 Atomare Publikation
|
||||
|
||||
Die Temporaerdatei liegt zwingend im Snapshotverzeichnis. Dadurch findet der
|
||||
Die Temporärdatei liegt zwingend im Snapshotverzeichnis. Dadurch findet der
|
||||
Ersatz auf demselben Volume statt. Existiert bereits ein Snapshot, wird
|
||||
`File.Replace` verwendet; beim ersten Lauf `File.Move`. Bis zum erfolgreichen
|
||||
Ersatz bleibt der letzte vollstaendige Snapshot erhalten. Seine Alterspruefung
|
||||
Ersatz bleibt der letzte vollständige Snapshot erhalten. Seine Altersprüfung
|
||||
verhindert unbegrenztes Weiterreichen alter Daten.
|
||||
|
||||
### 4.2 Keine direkte Checkmk-Spooldatei
|
||||
|
||||
Checkmk kann zwar Dateien aus seinem Spoolverzeichnis direkt anhaengen, prueft
|
||||
Checkmk kann zwar Dateien aus seinem Spoolverzeichnis direkt anhängen, prüft
|
||||
deren Inhalt aber laut eigener Dokumentation nicht. Ein fehlerhafter Spool kann
|
||||
nachfolgende Agentsektionen beeinflussen. Deshalb liegt der Provider-Snapshot
|
||||
in einem eigenen Verzeichnis und wird erst durch den validierenden Consumer in
|
||||
die Local-Check-Ausgabe uebernommen.
|
||||
die Local-Check-Ausgabe übernommen.
|
||||
|
||||
## 5. Datenquellen
|
||||
|
||||
@@ -187,11 +187,11 @@ Pflichtklassen:
|
||||
| Klasse | Zweck |
|
||||
| --- | --- |
|
||||
| `MSBTS_GroupSetting` | Gruppe, Read-Only-/Operator-Gruppe, Management- und Master-MessageBox-Ziel. |
|
||||
| `MSBTS_HostInstance` | lokale Host-Instance-Zustaende. |
|
||||
| `MSBTS_HostInstance` | lokale Host-Instance-Zustände. |
|
||||
| `MSBTS_ServiceInstance` | suspendierte Instanzen. |
|
||||
| `MSBTS_ReceiveLocation` | Receive-Location-Zustaende. |
|
||||
| `MSBTS_SendPort` | Send-Port-Zustaende. |
|
||||
| `MSBTS_Orchestration` | Orchestration-Zustaende. |
|
||||
| `MSBTS_ReceiveLocation` | Receive-Location-Zustände. |
|
||||
| `MSBTS_SendPort` | Send-Port-Zustände. |
|
||||
| `MSBTS_Orchestration` | Orchestration-Zustände. |
|
||||
|
||||
`MSBTS_GroupSetting` wird mit den dokumentierten Properties
|
||||
`MgmtDbServerName`, `MgmtDbName`, `SubscriptionDBServerName`,
|
||||
@@ -202,10 +202,10 @@ Pflichtklassen:
|
||||
Hostnamen werden clientseitig verglichen. Sonderzeichen und FQDN-/Kurzname
|
||||
gelangen nicht in dynamisch erzeugte WQL-Filter.
|
||||
|
||||
`MSBTS_ServiceInstance` wird fuer `ServiceStatus=4` (resumable),
|
||||
`MSBTS_ServiceInstance` wird für `ServiceStatus=4` (resumable),
|
||||
`ServiceStatus=32` (non-resumable) und `ServiceClass=64` abgefragt.
|
||||
`ServiceClass=64` kennzeichnet Routing Failure Reports. Sie werden als eigene
|
||||
Metrik ausgewiesen und zugleich in `suspended_nonresumable` mitgezaehlt.
|
||||
Metrik ausgewiesen und zugleich in `suspended_nonresumable` mitgezählt.
|
||||
|
||||
### 5.2 Kompaktes Checkmk-Servicebild
|
||||
|
||||
@@ -222,62 +222,62 @@ Services ersetzt. Insgesamt entstehen neun stabile Services:
|
||||
8. `BizTalk Orchestrations`
|
||||
9. `BizTalk Event Log`
|
||||
|
||||
Receive Locations und Send Ports alarmieren nur fuer unerwartete
|
||||
Aus-Zustaende. Fachlich bewusst deaktivierte Namen werden exakt, ohne
|
||||
Receive Locations und Send Ports alarmieren nur für unerwartete
|
||||
Aus-Zustände. Fachlich bewusst deaktivierte Namen werden exakt, ohne
|
||||
Wildcards, in `ExpectedDisabledReceiveLocations` beziehungsweise
|
||||
`ExpectedInactiveSendPorts` hinterlegt. Ein Eintrag ist entweder nur der Name
|
||||
oder `Anwendung\Name`.
|
||||
|
||||
Pro Summary werden maximal `MaxSummaryItems` Treffer angezeigt. Weitere
|
||||
Artefakte werden als `(+n more)` zusammengefasst. `MaxDetailCharacters`
|
||||
begrenzt jede Detailausgabe, damit Checkmk-Ansichten kompakt bleiben, waehrend
|
||||
alle numerischen Metriken vollstaendig erhalten bleiben.
|
||||
begrenzt jede Detailausgabe, damit Checkmk-Ansichten kompakt bleiben, während
|
||||
alle numerischen Metriken vollständig erhalten bleiben.
|
||||
|
||||
### 5.3 Endpoint-Discovery und Netzwerkprobe
|
||||
|
||||
Die Endpoint-Funktion erweitert keine WMI-Klassenmenge. Aus den ohnehin
|
||||
minuetlich abgefragten Instanzen werden nur dokumentierte Properties gelesen:
|
||||
minütlich abgefragten Instanzen werden nur dokumentierte Properties gelesen:
|
||||
|
||||
| WMI-Klasse | Properties |
|
||||
| --- | --- |
|
||||
| `MSBTS_SendPort` | `Status`, `IsDynamic`, `PTAddress`, `STAddress`, `PTTransportType`, `STTransportType` |
|
||||
| `MSBTS_ReceiveLocation` | `IsDisabled`, `InboundTransportURL`, `AdapterName` |
|
||||
|
||||
Nur `Status=Started` beziehungsweise `IsDisabled=false` wird geprueft.
|
||||
Nur `Status=Started` beziehungsweise `IsDisabled=false` wird geprüft.
|
||||
Inaktive Artefakte bleiben aus der Probe ausgeschlossen, auch wenn sie noch im
|
||||
Katalog stehen. Dynamische Send Ports, lokale Dateipfade, SMTP-Empfaengerlisten
|
||||
Katalog stehen. Dynamische Send Ports, lokale Dateipfade, SMTP-Empfängerlisten
|
||||
und Named Pipes werden nicht als externe Host/Port-Ziele behandelt.
|
||||
|
||||
Der lokale Katalog
|
||||
`%ProgramData%\BizTalkCheckmkPulse\data\endpoints.xml` wird beim ersten
|
||||
erfolgreichen Lauf erzeugt und danach standardmaessig alle 168 Stunden atomar
|
||||
abgeglichen. Er enthaelt keine vollstaendigen URIs, Querystrings,
|
||||
Benutzernamen oder Kennwoerter, sondern nur Artefaktbezug, Adapter, Host, Port
|
||||
und `TCP`/`UDP`. Automatisch erzeugte Eintraege tragen
|
||||
erfolgreichen Lauf erzeugt und danach standardmäßig alle 168 Stunden atomar
|
||||
abgeglichen. Er enthält keine vollständigen URIs, Querystrings,
|
||||
Benutzernamen oder Kennwörter, sondern nur Artefaktbezug, Adapter, Host, Port
|
||||
und `TCP`/`UDP`. Automatisch erzeugte Einträge tragen
|
||||
`autoDiscovered="true"`. Ein bewusst manueller Override wird mit
|
||||
`autoDiscovered="false"` markiert und beim Wochenabgleich erhalten; sein
|
||||
`key` muss dem Artefakteintrag entsprechen. Eigenstaendige manuelle Ziele
|
||||
`key` muss dem Artefakteintrag entsprechen. Eigenständige manuelle Ziele
|
||||
verwenden `artifactType="Manual"`.
|
||||
|
||||
HTTP(S), SFTP, FTP, UNC/SMB, WCF und `net.tcp` werden ausschliesslich per
|
||||
TCP-Connect geprueft. Es findet kein fachlicher Request und keine Anmeldung
|
||||
statt. Explizite `udp://host:port`-Eintraege senden ein einzelnes Datagramm;
|
||||
das bestaetigt DNS, Route und lokalen Versand, kann ohne
|
||||
HTTP(S), SFTP, FTP, UNC/SMB, WCF und `net.tcp` werden ausschließlich per
|
||||
TCP-Connect geprüft. Es findet kein fachlicher Request und keine Anmeldung
|
||||
statt. Explizite `udp://host:port`-Einträge senden ein einzelnes Datagramm;
|
||||
das bestätigt DNS, Route und lokalen Versand, kann ohne
|
||||
applikationsspezifisches Antwortprotokoll aber keinen entfernten Dienstzustand
|
||||
beweisen. Gemeinsame Host/Port-Ziele werden dedupliziert und mit begrenzter
|
||||
Parallelitaet getestet.
|
||||
Parallelität getestet.
|
||||
|
||||
Der Checkmk-Service nennt im OK-Fall nur die Gesamtzahl. Bei Ausfaellen werden
|
||||
ausschliesslich die nicht erreichbaren Artefakte in `unavailable=` angezeigt;
|
||||
Der Checkmk-Service nennt im OK-Fall nur die Gesamtzahl. Bei Ausfällen werden
|
||||
ausschließlich die nicht erreichbaren Artefakte in `unavailable=` angezeigt;
|
||||
`MaxSummaryItems` und `MaxDetailCharacters` begrenzen die Darstellung. Alle
|
||||
Einzelfehler bleiben vollstaendig im Provider-Log.
|
||||
Einzelfehler bleiben vollständig im Provider-Log.
|
||||
|
||||
### 5.4 SQL-Zugriffsprobe
|
||||
|
||||
Der Provider oeffnet fuer Management- und Master-MessageBox-Datenbank eine
|
||||
Der Provider öffnet für Management- und Master-MessageBox-Datenbank eine
|
||||
kurze `System.Data.SqlClient`-Verbindung mit integrierter
|
||||
Windows-Authentifizierung, fuehrt `SELECT 1` aus und schliesst sie. Keine
|
||||
BizTalk-Tabelle wird direkt gelesen oder veraendert.
|
||||
Windows-Authentifizierung, führt `SELECT 1` aus und schließt sie. Keine
|
||||
BizTalk-Tabelle wird direkt gelesen oder verändert.
|
||||
|
||||
Die Ausgabe `execution_identity=` zeigt deshalb das Provider-Konto, nicht mehr
|
||||
`NT AUTHORITY\SYSTEM`. Der Check beweist, dass genau das Scheduled-Task-Konto
|
||||
@@ -293,10 +293,10 @@ und filtert Quellen wie `BizTalk Server`, `XLANG/s`, `ENTSSO`,
|
||||
|
||||
### 6.1 Bevorzugte BizTalk-Rolle
|
||||
|
||||
BizTalk Server 2020 fuehrte die `BizTalk Server Read Only Users`-Gruppe ein.
|
||||
BizTalk Server 2020 führte die `BizTalk Server Read Only Users`-Gruppe ein.
|
||||
Sie darf Artefakte, Servicezustand, Message Flow und Trackinginformationen
|
||||
lesen, aber keine administrativen Operationen ausfuehren. SQL-seitig wird sie
|
||||
ueber `BTS_READONLY_USERS` vermittelt.
|
||||
lesen, aber keine administrativen Operationen ausführen. SQL-seitig wird sie
|
||||
über `BTS_READONLY_USERS` vermittelt.
|
||||
|
||||
Soll:
|
||||
|
||||
@@ -311,16 +311,16 @@ Die genaue Gruppe ist aus
|
||||
`MSBTS_GroupSetting.BizTalkReadOnlyUserGroup` beziehungsweise der
|
||||
BizTalk-Administration zu lesen. Nicht vom Standardnamen ausgehen.
|
||||
|
||||
Die Operator-Gruppe (`BTS_OPERATORS`) wird erst geprueft, wenn eine konkret
|
||||
Die Operator-Gruppe (`BTS_OPERATORS`) wird erst geprüft, wenn eine konkret
|
||||
benannte erforderliche WMI-Klasse trotz nachgewiesener Read-Only-Konfiguration
|
||||
und neuem Anmeldetoken abgewiesen wird. Die Erweiterung muss mit Security,
|
||||
BizTalk- und SQL-Administration begruendet werden.
|
||||
BizTalk- und SQL-Administration begründet werden.
|
||||
|
||||
Unzulaessig:
|
||||
Unzulässig:
|
||||
|
||||
- Checkmk-Dienstkonto aendern,
|
||||
- Checkmk-Dienstkonto ändern,
|
||||
- Maschinenkonto pauschal berechtigen,
|
||||
- individueller SQL-Login fuer das Provider-Konto,
|
||||
- individueller SQL-Login für das Provider-Konto,
|
||||
- direkte ad-hoc DB-Rollen,
|
||||
- `db_owner` oder `sysadmin`,
|
||||
- WMI-/DCOM-Vollzugriff als Reaktion auf einen SQL-Loginfehler.
|
||||
@@ -328,7 +328,7 @@ Unzulaessig:
|
||||
### 6.2 Dateisystem-ACL
|
||||
|
||||
Der Installer entfernt die Vererbung an den Runtimeverzeichnissen und setzt
|
||||
explizite Eintraege mit sprachneutralen Well-known-SIDs:
|
||||
explizite Einträge mit sprachneutralen Well-known-SIDs:
|
||||
|
||||
| Ziel | Collector | SYSTEM | lokale Administratoren |
|
||||
| --- | --- | --- | --- |
|
||||
@@ -337,7 +337,7 @@ explizite Eintraege mit sprachneutralen Well-known-SIDs:
|
||||
| `logs` | Modify | Modify | F |
|
||||
|
||||
`LocalSystem` kann deshalb den Snapshot lesen, aber im Datenverzeichnis nicht
|
||||
schreiben. Schreibrecht im Logverzeichnis wird benoetigt, um abgelehnte
|
||||
schreiben. Schreibrecht im Logverzeichnis wird benötigt, um abgelehnte
|
||||
Snapshots aus dem Consumer-Kontext zu protokollieren.
|
||||
|
||||
## 7. Scheduled Task
|
||||
@@ -363,10 +363,10 @@ Sollkonfiguration:
|
||||
| StartWhenAvailable | aktiv |
|
||||
| Restart | zweimal im Minutenabstand |
|
||||
|
||||
Der Task wird mit gespeichertem Dienstkontokennwort ausgefuehrt, also
|
||||
unabhaengig von einer interaktiven Anmeldung. Bei Kennwortwechsel oder
|
||||
Der Task wird mit gespeichertem Dienstkontokennwort ausgeführt, also
|
||||
unabhängig von einer interaktiven Anmeldung. Bei Kennwortwechsel oder
|
||||
-ablauf muss das Task-Kennwort aktualisiert werden. Ein gMSA ist weiterhin
|
||||
optional unterstuetzt, aber nicht die produktive Standardannahme.
|
||||
optional unterstützt, aber nicht die produktive Standardannahme.
|
||||
|
||||
## 8. Installation
|
||||
|
||||
@@ -380,13 +380,13 @@ scripts\package-release.cmd
|
||||
Der Release-Build der Visual-Studio-2019-Solution baut Anwendung, grafischen
|
||||
Installer und Packaging-Werkzeug. Danach liegen der Paketordner
|
||||
`artifacts\BizTalkCheckmkPulse-Setup` und das direkt transportierbare
|
||||
`artifacts\BizTalkCheckmkPulse-Setup.zip` bereit. Zusaetzlich entstehen
|
||||
`BizTalkCheckmkPulse-Setup.zip.b64.txt` fuer `certutil -decode` und eine
|
||||
`artifacts\BizTalkCheckmkPulse-Setup.zip` bereit. Zusätzlich entstehen
|
||||
`BizTalkCheckmkPulse-Setup.zip.b64.txt` für `certutil -decode` und eine
|
||||
SHA-256-Textdatei.
|
||||
|
||||
### 8.2 Normales Servicekonto
|
||||
|
||||
Das ZIP wird auf dem Zielserver vollstaendig entpackt. Danach `Setup.exe` als
|
||||
Das ZIP wird auf dem Zielserver vollständig entpackt. Danach `Setup.exe` als
|
||||
Administrator starten, Konto im Format `DOMAIN\Benutzer` (zum Beispiel
|
||||
`BEW\t231bizmon`), Kennwort und Umgebung eintragen und die Installation
|
||||
starten.
|
||||
@@ -396,16 +396,16 @@ AD-/BizTalk-/SQL-Rechte; diese bleiben getrennte administrative Freigaben.
|
||||
|
||||
Beim Update wird zuerst die neue Paketversion im Staging-Verzeichnis mit neun
|
||||
Self-Test-Zeilen validiert. Bestehende AppSettings werden in die neue Config
|
||||
uebernommen; neue Keys stammen aus der neuen Standardkonfiguration. Die
|
||||
übernommen; neue Keys stammen aus der neuen Standardkonfiguration. Die
|
||||
Runtime-Daten unter `%ProgramData%` bleiben bestehen. Erst danach wird der
|
||||
Task gestoppt und die Programmversion umgeschaltet. Scheitert ein Folgeschritt,
|
||||
versucht der Installer Programmverzeichnis, Checkmk-Wrapper und Scheduled Task
|
||||
auf den vorherigen Stand zurueckzusetzen.
|
||||
auf den vorherigen Stand zurückzusetzen.
|
||||
|
||||
Der installierte Task selbst laeuft mit `RunLevel Limited`. Der Installer
|
||||
uebergibt das Kennwort direkt an die Windows-Task-Scheduler-COM-Schnittstelle;
|
||||
Der installierte Task selbst läuft mit `RunLevel Limited`. Der Installer
|
||||
übergibt das Kennwort direkt an die Windows-Task-Scheduler-COM-Schnittstelle;
|
||||
es wird weder in einer Prozesskommandozeile noch in Config oder Log
|
||||
geschrieben. Das Konto benoetigt `Log on as a batch job`.
|
||||
geschrieben. Das Konto benötigt `Log on as a batch job`.
|
||||
|
||||
### 8.3 Optionales gMSA
|
||||
|
||||
@@ -420,15 +420,15 @@ Der installierte Wrapper liegt unter:
|
||||
%ProgramData%\checkmk\agent\local\biztalk_checkmk_pulse.cmd
|
||||
```
|
||||
|
||||
Der Agent darf den Consumer synchron ausfuehren. Er liest nur maximal 1 MiB
|
||||
Der Agent darf den Consumer synchron ausführen. Er liest nur maximal 1 MiB
|
||||
lokale Daten; ein Checkmk-Async-Cache ist daher nicht notwendig. Falls alte
|
||||
`check_mk.user.yml`-Regeln fuer den bisherigen 300-Sekunden-Cache existieren,
|
||||
sollten sie entfernt werden, damit Checkmk den minuetlich aktualisierten
|
||||
Snapshot nicht zusaetzlich verzoegert.
|
||||
`check_mk.user.yml`-Regeln für den bisherigen 300-Sekunden-Cache existieren,
|
||||
sollten sie entfernt werden, damit Checkmk den minütlich aktualisierten
|
||||
Snapshot nicht zusätzlich verzögert.
|
||||
|
||||
Nach dem Agent-Dump:
|
||||
|
||||
1. Service Discovery fuer den BizTalk-Host ausfuehren.
|
||||
1. Service Discovery für den BizTalk-Host ausführen.
|
||||
2. neun stabile Services aufnehmen; den alten Service
|
||||
`BizTalk Runtime Artifacts` nach erfolgreicher Discovery entfernen.
|
||||
3. Changes aktivieren.
|
||||
@@ -443,24 +443,24 @@ Pfad:
|
||||
biztalk-checkmk-pulse-YYYYMMDD.log
|
||||
```
|
||||
|
||||
Jede Zeile enthaelt UTC-Zeit, Level, Komponente, PID, Windows-Identitaet und
|
||||
Jede Zeile enthält UTC-Zeit, Level, Komponente, PID, Windows-Identität und
|
||||
einzeilige Nachricht. Provider-Erfolge werden pro Lauf geloggt; der Consumer
|
||||
loggt nur abgelehnte Snapshots. Exceptions werden mit Typ, Nachricht,
|
||||
HRESULT-/Providerdetails und Stacktrace einzeilig gespeichert.
|
||||
|
||||
Der erfolgreiche Abschluss nennt Suspensions, Routing Failure Reports,
|
||||
Receive-Location-/Send-Port-Zahlen und Laufzeit. Jede strukturierte
|
||||
WMI-/SQL-/Event-Log-Diagnose wird zusaetzlich als eigene `WARN`-Zeile
|
||||
protokolliert und bleibt damit auch ausserhalb der gekuerzten Checkmk-Summary
|
||||
vollstaendig nachvollziehbar.
|
||||
WMI-/SQL-/Event-Log-Diagnose wird zusätzlich als eigene `WARN`-Zeile
|
||||
protokolliert und bleibt damit auch außerhalb der gekürzten Checkmk-Summary
|
||||
vollständig nachvollziehbar.
|
||||
|
||||
Logging ist best effort: Ein blockiertes Log darf Checkmk-Ausgabe oder
|
||||
Snapshot-Publikation nicht zerstoeren. Der Provider entfernt beim Start Dateien
|
||||
aelter als `LogRetentionDays`.
|
||||
Snapshot-Publikation nicht zerstören. Der Provider entfernt beim Start Dateien
|
||||
älter als `LogRetentionDays`.
|
||||
|
||||
## 10. Diagnose und Runbook
|
||||
|
||||
### 10.1 Grundpruefung
|
||||
### 10.1 Grundprüfung
|
||||
|
||||
```cmd
|
||||
schtasks.exe /query /tn "BizTalk Checkmk Pulse Provider" /v /fo list
|
||||
@@ -472,42 +472,42 @@ type "%ProgramData%\BizTalkCheckmkPulse\logs\biztalk-checkmk-pulse-*.log"
|
||||
|
||||
### 10.2 Kein Snapshot
|
||||
|
||||
Pruefen:
|
||||
Prüfen:
|
||||
|
||||
1. Task existiert und ist aktiviert.
|
||||
2. `LastTaskResult` und Provider-Log.
|
||||
3. Dienstkonto kann sich als Batch anmelden.
|
||||
4. gespeichertes Task-Kennwort ist nach Rotation/Ablauf noch gueltig.
|
||||
4. gespeichertes Task-Kennwort ist nach Rotation/Ablauf noch gültig.
|
||||
5. Provider besitzt Modify auf `data` und `logs`.
|
||||
6. EXE/Config sind ausfuehrbar.
|
||||
6. EXE/Config sind ausführbar.
|
||||
|
||||
### 10.3 Staler Snapshot
|
||||
|
||||
Der Consumer nennt Alter und Grenzwert. Ursachen:
|
||||
|
||||
- Task deaktiviert oder Konto/Kennwort ungueltig,
|
||||
- vorheriger Lauf haengt,
|
||||
- Task deaktiviert oder Konto/Kennwort ungültig,
|
||||
- vorheriger Lauf hängt,
|
||||
- WMI-/SQL-Timeouts,
|
||||
- Task Scheduler lief waehrend Wartung nicht,
|
||||
- Task Scheduler lief während Wartung nicht,
|
||||
- Snapshot-Publikation wird durch AV/EDR oder ACL blockiert.
|
||||
|
||||
Nicht einfach `SnapshotMaxAgeSeconds` stark erhoehen. Zuerst den minuetlichen
|
||||
Nicht einfach `SnapshotMaxAgeSeconds` stark erhöhen. Zuerst den minütlichen
|
||||
Lauf wiederherstellen. Bei geplanten Wartungen darf Checkmk bewusst `UNKNOWN`
|
||||
anzeigen.
|
||||
|
||||
### 10.4 SHA-256-/Formatfehler
|
||||
|
||||
Snapshot nicht reparieren oder direkt an Checkmk kopieren. Task neu starten,
|
||||
Datentraeger und AV/EDR pruefen. Wiederholt sich der Fehler, Temporaerdateien,
|
||||
Datenträger und AV/EDR prüfen. Wiederholt sich der Fehler, Temporärdateien,
|
||||
NTFS-Ereignisse und Schreibrechte untersuchen.
|
||||
|
||||
### 10.5 BizTalk-/SQL-Permission
|
||||
|
||||
1. Log zeigt `execution_identity` des Providers.
|
||||
2. `BizTalkReadOnlyUserGroup` gegen BizTalk-Konfiguration abgleichen.
|
||||
3. AD-Gruppenmitgliedschaft des Provider-Kontos pruefen.
|
||||
3. AD-Gruppenmitgliedschaft des Provider-Kontos prüfen.
|
||||
4. neuen Logontoken durch neuen Tasklauf sicherstellen.
|
||||
5. SQL-seitig Gruppenlogin und `BTS_READONLY_USERS` read-only pruefen.
|
||||
5. SQL-seitig Gruppenlogin und `BTS_READONLY_USERS` read-only prüfen.
|
||||
6. keine Einzelrechte erteilen.
|
||||
7. Nur wenn eine spezifische Klasse weiter abgewiesen wird, Read-Only-Umfang
|
||||
mit Microsoft-Dokumentation und BizTalk-Betrieb abgleichen; Operator-Rolle
|
||||
@@ -516,8 +516,8 @@ NTFS-Ereignisse und Schreibrechte untersuchen.
|
||||
### 10.6 WMI-Schema
|
||||
|
||||
`InvalidClass` oder `InvalidQuery` wird als `Wmi/Schema` klassifiziert.
|
||||
Berechtigungserhoehung kann eine nicht vorhandene Klasse nicht erzeugen.
|
||||
Installierte BizTalk-Version, WQL und Properties pruefen.
|
||||
Berechtigungserhöhung kann eine nicht vorhandene Klasse nicht erzeugen.
|
||||
Installierte BizTalk-Version, WQL und Properties prüfen.
|
||||
|
||||
## 11. Konfiguration
|
||||
|
||||
@@ -583,47 +583,47 @@ Automatisiert:
|
||||
- WMI-Queryvertrag nutzt dokumentierte Properties,
|
||||
- eingebetteter SQL-Loginfehler wird `Permission`,
|
||||
- abgewiesener Principal wird extrahiert,
|
||||
- Routing Failure Reports werden separat und als non-resumable gezaehlt,
|
||||
- Receive-/Send-Allowlisten trennen bewusste von unerwarteten Aus-Zustaenden,
|
||||
- Routing Failure Reports werden separat und als non-resumable gezählt,
|
||||
- Receive-/Send-Allowlisten trennen bewusste von unerwarteten Aus-Zuständen,
|
||||
- ein fehlender `IsDisabled`-Wert wird `UNKNOWN` statt still als enabled,
|
||||
- betroffene Namen und Gesamtlaenge der Summary bleiben begrenzt,
|
||||
- betroffene Namen und Gesamtlänge der Summary bleiben begrenzt,
|
||||
- Endpoint-Adressen werden ohne URI-Secrets auf Host/Port reduziert,
|
||||
- manuelle Endpoint-Overrides ueberleben den automatischen Wochenabgleich,
|
||||
- manuelle Endpoint-Overrides überleben den automatischen Wochenabgleich,
|
||||
- nur nicht erreichbare Endpoints erscheinen im Checkmk-Detail,
|
||||
- 70 vollstaendig timeoutende eindeutige Ziele bleiben mit den Defaults in
|
||||
- 70 vollständig timeoutende eindeutige Ziele bleiben mit den Defaults in
|
||||
einem theoretischen Socket-Budget von etwa 15 Sekunden; das konfigurierte
|
||||
Maximum von 100 Zielen in etwa 21 Sekunden,
|
||||
- Update-Config-Merge erhaelt bestehende Werte und fuegt neue Defaults hinzu,
|
||||
- Update-Config-Merge erhält bestehende Werte und fügt neue Defaults hinzu,
|
||||
- Snapshot-Roundtrip und Ersatz,
|
||||
- SHA-256-Manipulation wird verworfen,
|
||||
- Stale-Snapshot wird verworfen,
|
||||
- Consumer-Fallback enthaelt neun `UNKNOWN`-Services.
|
||||
- Consumer-Fallback enthält neun `UNKNOWN`-Services.
|
||||
|
||||
Windows-/ACC-Abnahme:
|
||||
|
||||
1. `LastTaskResult=0`.
|
||||
2. Snapshot wird mindestens dreimal minuetlich aktualisiert.
|
||||
2. Snapshot wird mindestens dreimal minütlich aktualisiert.
|
||||
3. Provider-Log nennt das dedizierte Konto.
|
||||
4. `BizTalk Platform` zeigt `read_only_group=`.
|
||||
5. `BizTalk SQL Access`: `targets=2`, `available=2`.
|
||||
6. keine Permission-`UNKNOWN`s.
|
||||
7. Suspensionsmetriken mit der BizTalk Group Hub Page plausibilisieren,
|
||||
einschliesslich Routing Failure Reports.
|
||||
einschließlich Routing Failure Reports.
|
||||
8. Eine bewusst deaktivierte Receive Location und einen inaktiven Send Port
|
||||
ueber die exakten Allowlisten als expected bestaetigen.
|
||||
über die exakten Allowlisten als expected bestätigen.
|
||||
9. Einen Testnamen aus der Allowlist entfernen und den erwarteten CRIT mit
|
||||
kurzem `affected=`-Detail pruefen.
|
||||
kurzem `affected=`-Detail prüfen.
|
||||
10. ACL-Test: `LocalSystem` kann Snapshot lesen, nicht schreiben.
|
||||
11. `endpoints.xml` wurde erzeugt; sie enthaelt keine vollstaendigen URIs oder
|
||||
11. `endpoints.xml` wurde erzeugt; sie enthält keine vollständigen URIs oder
|
||||
Zugangsdaten und nur Started-/Enabled-Artefakte.
|
||||
12. Einen erreichbaren Testport sperren: nur `Endpoint Reachability` wird CRIT
|
||||
und nennt ausschliesslich das nicht erreichbare Ziel.
|
||||
13. Ein Artefakt stoppen/deaktivieren: es wird im naechsten Minutenlauf nicht
|
||||
mehr geprueft.
|
||||
14. Katalogzeit auf aelter als 168 Stunden setzen beziehungsweise Intervall
|
||||
und nennt ausschließlich das nicht erreichbare Ziel.
|
||||
13. Ein Artefakt stoppen/deaktivieren: es wird im nächsten Minutenlauf nicht
|
||||
mehr geprüft.
|
||||
14. Katalogzeit auf älter als 168 Stunden setzen beziehungsweise Intervall
|
||||
testweise reduzieren: erfolgreicher atomarer Umgebungsabgleich.
|
||||
15. Task deaktivieren: nach 180 Sekunden neun stale-`UNKNOWN`s.
|
||||
16. Task wieder aktivieren: naechster Snapshot stellt Echtzustand her.
|
||||
16. Task wieder aktivieren: nächster Snapshot stellt Echtzustand her.
|
||||
17. Agent-Dump und Checkmk Service Discovery erfolgreich.
|
||||
|
||||
Erst nach ACC-Abnahme erfolgt der gestufte Rollout nach DEV/TST/PRD.
|
||||
@@ -631,9 +631,9 @@ Erst nach ACC-Abnahme erfolgt der gestufte Rollout nach DEV/TST/PRD.
|
||||
## 13. Deinstallation und Rollback
|
||||
|
||||
`Setup.exe` aus dem entpackten Paket erneut starten und **Deinstallieren**
|
||||
waehlen. Der Installer entfernt Task, Wrapper und Programmdateien, behaelt
|
||||
wählen. Der Installer entfernt Task, Wrapper und Programmdateien, behält
|
||||
Logs und Snapshot aber absichtlich bei. Die AD-Gruppenmitgliedschaft wird
|
||||
nicht geaendert und separat nach Change-Verfahren entzogen.
|
||||
nicht geändert und separat nach Change-Verfahren entzogen.
|
||||
|
||||
Rollback auf die alte direkte `LocalSystem`-Architektur ist nicht empfohlen.
|
||||
Falls kurzfristig notwendig, muss Security die Maschinenkonto-Berechtigung
|
||||
|
||||
Reference in New Issue
Block a user