13 KiB
Dokumentation: BizTalk Checkmk Pulse
Zielbild
Ziel ist ein wartbares Monitoring fuer BizTalk Server 2020 in den Umgebungen ACC, DEV, TST und PRD. Jede Umgebung besitzt einen BizTalk Server 2020 und einen SQL Server. SQL Server wird mit dem Checkmk-eigenen MSSQL-Plugin ueberwacht; fuer BizTalk liefert dieses Projekt die fehlende fachliche und technische Laufzeitsicht.
Das Monitoring soll:
- auf jeder BizTalk-Maschine lokal laufen
- ohne PowerShell-Abhaengigkeit funktionieren
- keine BizTalk-DLLs im Build erzwingen
- Checkmk-2.4-kompatible Services und Metriken erzeugen
- service-discovery-freundlich und dashboard-tauglich sein
- bei Fehlern gueltige
UNKNOWN-Services statt kaputter Agent-Ausgaben liefern
Technische Bewertung
Option A: Checkmk Local Check mit C#/.NET Framework
Bewertung: empfohlen und umgesetzt.
Vorteile:
- Checkmk 2.4 unterstuetzt Local Checks direkt.
- Windows Server mit BizTalk 2020 bringt .NET Framework in der Regel passend mit.
System.Managementkann BizTalk-WMI lesen.- Keine PowerShell Execution Policy, keine Script-Signing-Frage.
- Kein serverseitiges Checkmk-Python-Plugin notwendig.
- Rollout ist eine einfache Dateiablage unter
%ProgramData%\checkmk\agent\local.
Nachteile:
- Schwellwerte sind in der
.exe.config, nicht als Checkmk-Regelsatz in WATO. - Eigene Graphing-Definitionen sind nicht enthalten; Checkmk zeigt Local-Check-Metriken trotzdem als Performance-Daten und Graphen.
Option B: Agent Plugin plus serverseitiges Checkmk-Plugin
Bewertung: technisch elegant, aber fuer den ersten produktiven Schritt schwerer.
Vorteile:
- Checkmk-Regeln, Discovery und Metrikdefinitionen koennen sauber zentral modelliert werden.
- Bessere langfristige Erweiterbarkeit als MKP.
Nachteile:
- Checkmk-Check-API-Versionen muessen enger gepflegt werden.
- Server-seitige Installation in jeder Site erforderlich.
- Mehr Aufwand fuer Managed-Services-Betrieb und Updates.
Empfehlung: als Version 2 dieses Projekts denkbar, wenn die Local-Check-Variante stabil in PRD laeuft und zentrale Regelsaetze wirklich benoetigt werden.
Option C: PowerShell Local Check
Bewertung: nicht empfohlen fuer diese Umgebung.
Vorteile:
- Schnell zu schreiben.
- WMI/CIM-Zugriff ist komfortabel.
Nachteile:
- PowerShell ist in vielen Serverumgebungen eingeschraenkt oder signaturpflichtig.
- Ausfuehrungsverhalten im Checkmk-Agent-Kontext ist haeufiger fehleranfaellig.
Option D: BizTalk ExplorerOM/OperationsOM
Bewertung: fachlich stark, deployseitig unnoetig schwer.
Vorteile:
- Hoehere BizTalk-Abstraktion als rohe WMI-Klassen.
Nachteile:
- BizTalk-DLL-Versionen muessen beim Build und teilweise zur Laufzeit passen.
- Build-Agenten brauchen BizTalk-Komponenten oder SDK-Dateien.
- Fuer die benoetigten Zustandsdaten reicht WMI aus.
Architektur
Checkmk Windows Agent
|
| startet lokale Checks aus %ProgramData%\checkmk\agent\local
v
biztalk_checkmk_pulse.cmd
|
| startet
v
BizTalkCheckmkPulse.exe
|
| liest lokal
+-- WMI root\MicrosoftBizTalkServer
+-- Windows Application Event Log
|
v
Checkmk Local Check Zeilen nach STDOUT
Der .cmd-Wrapper liefert auch dann eine gueltige UNKNOWN-Zeile, wenn die EXE fehlt. Die EXE selbst faengt Laufzeitfehler ab und schreibt fuer alle stabilen Services UNKNOWN, damit unvollstaendige Deployments oder WMI-Probleme in Checkmk sichtbar bleiben.
Datenquellen
BizTalk WMI Namespace
Namespace:
root\MicrosoftBizTalkServer
Genutzte Klassen:
| Klasse | Zweck |
|---|---|
MSBTS_GroupSetting |
BizTalk-Gruppe und Management-DB-Hinweise. |
MSBTS_MessageBoxSetting |
MessageBox-DB-Hinweise. |
MSBTS_HostInstance |
Host-Instance-Zustand. |
MSBTS_ServiceInstance |
Suspended service instances. |
MSBTS_ReceiveLocation |
Receive-Location-Zustand. |
MSBTS_SendPort |
Send-Port-Zustand. |
MSBTS_Orchestration |
Orchestration-Zustand. |
MSBTS_ReceivePort |
Application-Mapping fuer Details. |
Windows Application Event Log
Der Check liest standardmaessig das lokale Application Log fuer die letzten 60 Minuten und filtert auf Quellen wie:
BizTalk ServerXLANG/sENTSSOBizTalk Server ApplicationBizTalk Server EDI
Die Liste ist ueber EventLogSources konfigurierbar.
Berechtigungsmodell
LocalSystem und lokaler WMI-Zugriff
Der Checkmk Windows Agent und der Agent Controller laufen standardmaessig als LocalSystem (NT AUTHORITY\SYSTEM). Der Wrapper und die EXE erben diesen Kontext. Das Plugin verbindet sich lokal mit \\<eigener-server>\root\MicrosoftBizTalkServer, setzt keine eigenen Anmeldedaten, nutzt kein Remote-WMI und fuehrt keine veraendernden WMI-Methoden aus. Das lokale Windows Application Event Log wird ebenfalls nur gelesen.
Die lokalen Rechte von LocalSystem reichen fuer diese Zugriffe normalerweise aus. Im regulaeren lokalen Betrieb werden deshalb keine zusaetzlichen DCOM-, Firewall- oder pauschalen WMI-Namespace-Freigaben benoetigt.
Netzwerkidentitaet zum SQL Server
BizTalk-WMI-Klassen koennen ihre Daten aus der BizTalk Management- oder MessageBox-Datenbank beziehen. Liegt SQL Server auf einer anderen Maschine, authentifiziert sich LocalSystem dort mit dem Active-Directory-Computerkonto des BizTalk-Servers:
DOMAIN\BIZTALKSERVER$
Dieses Konto besitzt nicht automatisch BizTalk- oder SQL-Berechtigungen. Daraus kann die Situation entstehen, dass die Verbindung zum lokalen WMI-Namespace erfolgreich ist, einzelne SQL-gestuetzte WMI-Klassen aber Access denied, UnauthorizedAccessException oder UNKNOWN liefern.
Pruefung und Freigabe
Der direkte Programmstart in einer administrativen Shell laeuft unter dem angemeldeten Benutzer und ist deshalb kein ausreichender Berechtigungstest. Verbindlich ist die Ausfuehrung durch den Checkmk Agent Controller als LocalSystem:
& "C:\Program Files (x86)\checkmk\service\cmk-agent-ctl.exe" dump |
Select-String -Pattern "BizTalk|Access denied|Unauthorized|UNKNOWN" -Context 0,1
Bei Zugriffsfehlern gilt folgendes Least-Privilege-Vorgehen:
- Computerkonto des BizTalk-Servers ermitteln, normalerweise
DOMAIN\BIZTALKSERVER$. - Die bei der BizTalk-Konfiguration verwendete Operator-Gruppe feststellen.
- Das Computerkonto in
BizTalk Server Operatorsbeziehungsweise die kundenspezifisch benannte Operator-Gruppe aufnehmen. - Kerberos-Tickets des Systemkontos erneuern oder den Server im Wartungsfenster neu starten.
- Den Agent-Dump wiederholen.
- Nur fuer weiterhin abgelehnte, konkret identifizierte WMI-Klassen mit BizTalk- und SQL-Administration pruefen, ob Administratorrechte erforderlich sind.
Die Operator-Rolle ist fuer grundlegendes Monitoring und Zustandsabfragen vorgesehen. Direkte manuelle Aenderungen an den Rollen der BizTalk-SQL-Datenbanken sind zu vermeiden; die durch BizTalk konfigurierte Windows-Gruppe ist die vorgesehene Berechtigungsgrenze.
| Agent-Dump-Ergebnis | Massnahme |
|---|---|
| Plausible Werte fuer alle BizTalk-Services | Keine Berechtigungsaenderung. |
| WMI-Namespace nicht erreichbar | BizTalk-WMI-Provider, WMI-Dienst, Namespace und ACL gezielt pruefen. |
| Nur SQL-gestuetzte Klassen scheitern | Computerkonto in die BizTalk-Operator-Gruppe aufnehmen. |
Nur Event-Log-Service ist UNKNOWN |
Lokalen Application-Log-Zugriff pruefen. |
| Fehler bleibt mit Operator-Rolle bestehen | Betroffene Klasse und konkrete BizTalk-/SQL-Rollenanforderung untersuchen. |
Die Operator-Mitgliedschaft des Computerkontos steht allen auf diesem Server als LocalSystem laufenden Diensten fuer Netzwerkzugriffe zur Verfuegung. Falls diese Sicherheitsauswirkung nicht akzeptabel ist, kann ein separater Collector unter einem dedizierten gMSA- oder Dienstkonto mit Operator-Rechten Checkmk-Spooldaten erzeugen. Diese Variante ist noch nicht Bestandteil der aktuellen Implementierung. Der komplette Checkmk-Agent sollte nicht allein fuer dieses Plugin auf eine andere Identitaet umgestellt werden, weil dies alle Agent-Sektionen und Local Checks betrifft.
Quellen:
- https://docs.checkmk.com/latest/en/agent_windows.html
- https://docs.checkmk.com/latest/en/localchecks.html
- https://learn.microsoft.com/en-us/biztalk/core/minimum-security-user-rights
- https://learn.microsoft.com/en-us/biztalk/core/access-control-and-data-security
- https://learn.microsoft.com/en-us/entra/architecture/service-accounts-computer
- https://learn.microsoft.com/en-us/windows/win32/wmisdk/access-to-wmi-namespaces
Resilienz
Das Plugin ist bewusst defensiv gebaut:
- WMI-Queries haben ein konfigurierbares Timeout.
- Optionale WMI-Klassen erzeugen Diagnosehinweise statt Totalabbruch.
- Fehlende Properties werden als leer/unknown behandelt.
- Local-Check-Ausgaben verwenden gueltige Checkmk-Zeilen mit genau vier Feldern.
- Fatal Errors erzeugen
UNKNOWNfuer alle stabilen Services. - Event-Log-Auswertung ist isoliert; ein Fehler dort bricht WMI-Monitoring nicht ab.
- Service-Namen sind stabil, damit Service Discovery nicht bei jedem Lauf neue Services erzeugt.
Statusmodell
BizTalk Platform
OK: BizTalk-WMI erreichbar.UNKNOWN: WMI nicht erreichbar oder kompletter Programmfehler.
Dieser Service ist der Integrationsindikator. Wenn er UNKNOWN ist, sind Berechtigungen, BizTalk-Installation oder WMI-Repository zu pruefen.
BizTalk Suspended Instances
OK: keine suspendierten Instanzen.WARN: mindestensWarnResumableThresholdresumable suspended instances.CRIT: mindestensCritNonResumableThresholdnon-resumable suspended instances.UNKNOWN: Datenquelle nicht lesbar.
BizTalk Host Instances
OK: alle Host-Instanzen sind started.WARN: mindestens eine Host-Instanz ist pending.CRIT: mindestens eine Host-Instanz ist stopped oder unknown.UNKNOWN: keine Host-Instanzen gefunden oder Datenquelle nicht lesbar.
BizTalk Runtime Artifacts
OK: Artefakte lesbar, keine unbekannten Statuswerte.WARN: nur wennAlertOnArtifactRuntimeIssues=trueund deaktivierte/inaktive Artefakte vorhanden sind.CRIT: unbekannte Send-Port- oder Orchestration-Statuswerte.
Deaktivierte Receive Locations und gestoppte Ports koennen in BizTalk fachlich korrekt sein. Deshalb ist die Alarmierung hier standardmaessig informativ.
BizTalk Event Log
OK: keine relevanten Fehler/Warnungen ueber Schwellwert.WARN: Fehler oder Warnungen abEventLogWarnThreshold.CRIT: Fehler abEventLogCritThreshold.UNKNOWN: Event Log nicht lesbar.
Dashboard-Empfehlung
Pro Umgebung sollte der BizTalk-Host in einem eigenen Host-Ordner oder Host-Tag fuer ACC, DEV, TST, PRD liegen. Im Dashboard eignen sich:
- Service State Widgets fuer die fuenf BizTalk-Services
- Graphen fuer
biztalk_suspended_total,biztalk_host_instances_stopped,biztalk_eventlog_errors - Hostgruppe/Ordner pro Umgebung
- Optional eine View gefiltert auf
Service starts with BizTalk
Empfohlene Reihenfolge im Dashboard:
BizTalk PlatformBizTalk Suspended InstancesBizTalk Host InstancesBizTalk Event LogBizTalk Runtime Artifacts- SQL-Server-Services aus dem Checkmk-MSSQL-Plugin
Rollout-Vorgehen
- Build-Paket erzeugen.
- In
DEVauf dem BizTalk-Server installieren. --self-testund normalen Lauf ausfuehren.- Agent-Dump pruefen.
- Checkmk Discovery durchfuehren.
- Eine Woche Messwerte und false positives beobachten.
- Nach
TSTundACCuebernehmen. - In
PRDmitAlertOnArtifactRuntimeIssues=falsestarten. - Nach Betriebsfreigabe Schwellwerte feinjustieren.
Troubleshooting
Service bleibt UNKNOWN
Pruefen:
"%ProgramData%\checkmk\agent\local\biztalk_checkmk_pulse.cmd"
Wenn WMI nicht erreichbar ist:
wmic /namespace:\\root\MicrosoftBizTalkServer path MSBTS_HostInstance get HostName,RunningServer,ServiceState
Der Checkmk Windows Agent laeuft normalerweise als LocalSystem. Daher immer auch den Agent-Dump verwenden:
"C:\Program Files (x86)\checkmk\service\cmk-agent-ctl.exe" dump
Keine Services in Discovery
Pruefen:
- Liegt
biztalk_checkmk_pulse.cmddirekt unter%ProgramData%\checkmk\agent\local? - Gibt der Wrapper direkt eine Zeile im Format
0 "Service" metric=value Detailsaus? - Wurde der Checkmk-Agent nach Policy-/Bakery-Aenderungen neu ausgerollt?
Runtime Artifacts zeigt deaktivierte Artefakte
Das ist standardmaessig OK, damit gewollt deaktivierte BizTalk-Artefakte nicht alarmieren. Fuer strengere PRD-Standards:
<add key="AlertOnArtifactRuntimeIssues" value="true" />
Weiterentwicklung
Sinnvolle naechste Ausbaustufen:
- MKP mit Agent-Bakery-Regel fuer zentrale Konfiguration.
- Optionales serverseitiges Check-Plugin nach Checkmk Check API V2.
- Custom Dashboard/View als Checkmk GUI Extension.
- Ergaenzung um MessageBox-Spool/Tracking-Daten, falls operativ benoetigt.