Host Availability Monitor + BizTalk Monitor Config Generator (.NET Framework 4.7.2)
Dieses Repository ist für eine Gitea-kompatible Repo-Struktur aufgebaut und enthält zwei Konsolenanwendungen für Windows Server 2019 / BizTalk Server 2019 auf .NET Framework 4.7.2:
-
HostAvailabilityMonitor
- prüft Endpunkte wie UNC/SMB,
file://, HTTP/HTTPS, SFTP, FTP, TCP, ICMP und RDP - lädt optional eine statische HIP-VM-Liste aus
hip-vms.jsonund prüft pro VM Netzwerk/Ping sowie RDP/TCP 3389 - schreibt Rolling-Logs, Windows Application Event Log und E-Mails bei DOWN, Recovery und täglichem Status
- prüft Endpunkte wie UNC/SMB,
-
BizTalkMonitorConfigGenerator
- liest aktive BizTalk Send Ports und aktivierte Receive Locations aus
- erzeugt daraus automatisch die JSON-Konfiguration, die der
HostAvailabilityMonitordirekt verwenden kann - übernimmt Umgebung, Default-Werte und fachliche Anwendungszuordnung
Zielbild
Der typische Betrieb auf einer BizTalk-Maschine ist:
- Der Generator läuft mit Admin-Rechten auf dem jeweiligen BizTalk-Server.
- Er liest die aktiven BizTalk-Artefakte aus.
- Er erzeugt eine vollständige Monitor-Konfiguration im JSON-Format.
- Der Monitor läuft anschließend mit genau dieser JSON-Datei.
- Bei DOWN und bei
DOWN -> UPgehen Mails raus. - Zusätzlich geht einmal pro Tag eine Status-Mail mit Tageszusammenfassung raus, standardmäßig um 14:00 Uhr lokal.
Gitea-kompatible Repository-Struktur
.
├── .editorconfig
├── .gitignore
├── Documentation.en.md
├── Dokumentation.md
├── HostAvailabilityMonitor.sln
├── README.md
├── installers/
│ ├── README.md
│ ├── powershell/
│ │ ├── Install-BizTalkMonitorConfigGenerator.ps1
│ │ ├── Install-Both.ps1
│ │ ├── Install-HostAvailabilityMonitor.ps1
│ │ ├── Uninstall-BizTalkMonitorConfigGenerator.ps1
│ │ └── Uninstall-HostAvailabilityMonitor.ps1
│ └── wix/
│ ├── BizTalkMonitorConfigGenerator.wxs
│ ├── HostAvailabilityMonitor.wxs
│ └── build-msi.ps1
├── scripts/
│ ├── build-release.ps1
│ ├── generate-monitor-config.ps1
│ ├── install-generator-on-server.ps1
│ ├── install-on-server.ps1
│ ├── package-deployment.ps1
│ └── register-event-source.ps1
└── src/
├── BizTalkMonitorConfigGenerator/
│ ├── App.config
│ ├── BizTalkMonitorConfigGenerator.csproj
│ ├── Program.cs
│ └── generator-settings.json
└── HostAvailabilityMonitor/
├── App.config
├── HostAvailabilityMonitor.csproj
├── Program.cs
├── appsettings.json
└── hip-vms.json
Diese Struktur ist bewusst einfach gehalten, damit das Repository sauber in Gitea eingecheckt, gebaut und auf Windows-Servern ausgerollt werden kann.
Lösung / Solution
src/HostAvailabilityMonitor/src/BizTalkMonitorConfigGenerator/scripts/build-release.ps1scripts/install-on-server.ps1scripts/install-generator-on-server.ps1scripts/generate-monitor-config.ps1scripts/package-deployment.ps1installers/powershell/*installers/wix/*
Technische Eckpunkte
HostAvailabilityMonitor
- Task-Scheduler-tauglich
- tägliche Logrotation
- Log-Retention standardmäßig 30 Tage
- Windows Application Event Log
- SMTP-Mails bei DOWN, Recovery (
DOWN -> UP) und täglichem Status - SMTP-Sendports bzw. reine E-Mail-Empfaengerlisten werden vom Generator uebersprungen und vom Monitor defensiv nur als
Skippedprotokolliert, nicht alarmiert - statische HIP-VM-Prüfung über separate
hip-vms.json, damit durch BizTalk neu erzeugte Endpunktlisten nicht mit der VM-Liste kollidieren - pro HIP-VM werden zwei normale Monitor-Targets erzeugt:
icmp://<ip>für Netzwerk-Konnektivität undrdp://<ip>:3389für RDP - tägliche Status-Mail auf Basis des ersten Laufs ab der konfigurierten Uhrzeit
- State-Datei gegen Mail-Spam und für die Einmal-pro-Tag-Logik der Status-Mail
ApplicationNamepro TargetEnvironmentNameglobal
BizTalkMonitorConfigGenerator
- liest BizTalk über Microsoft.BizTalk.ExplorerOM
- berücksichtigt standardmäßig nur:
- gestartete Send Ports
- aktivierte Receive Locations
- unterstützt optional:
- Secondary Transport von Send Ports
- lokale Pfade
- Mapping von BizTalk-Anwendungsnamen auf fachliche
ApplicationName-Werte
- schreibt Rolling-Log und Event Log
- schreibt die Ziel-JSON atomar über Temp-Datei + Rename
Build
Voraussetzung
Für den Generator muss auf dem Build- oder Zielsystem die BizTalk-Assembly Microsoft.BizTalk.ExplorerOM.dll verfügbar sein, typischerweise durch installierten BizTalk Server bzw. BizTalk Developer/Admin Components.
MSBuild
msbuild .\HostAvailabilityMonitor.sln /p:Configuration=Release /p:Platform="Any CPU"
Build-Skript
.\scripts\build-release.ps1
Das Skript erstellt anschließend typischerweise:
artifacts\publish\net472\HostAvailabilityMonitor\artifacts\publish\net472\BizTalkMonitorConfigGenerator\
Optional direkt mit Deployment-Paket:
.\scripts\build-release.ps1 -CreateDeploymentPackage
Oder separat:
.\scripts\package-deployment.ps1
Danach liegt ein verteilerfertiges ZIP unter artifacts\deploy\net472\.
Installer / Setup-Optionen
Es gibt jetzt zwei Installer-Wege:
1. PowerShell-Installer (empfohlen fuer BizTalk/Windows Server)
Diese Variante ist in restriktiven Serverumgebungen meist am praktikabelsten.
Wichtige Dateien:
installers\powershell\Install-HostAvailabilityMonitor.ps1installers\powershell\Install-BizTalkMonitorConfigGenerator.ps1installers\powershell\Install-Both.ps1installers\powershell\Uninstall-HostAvailabilityMonitor.ps1installers\powershell\Uninstall-BizTalkMonitorConfigGenerator.ps1
Beispiel fuer ein gemeinsames Setup aus dem Deployment-ZIP:
.\installers\powershell\Install-Both.ps1 `
-PackageRoot . `
-BaseInstallPath "C:\Program Files\JR IT Services\BizTalk Endpoint Monitor" `
-BaseConfigPath "C:\ProgramData\JR IT Services\BizTalk Endpoint Monitor" `
-RegisterEventSources
2. WiX-MSI-Quellen (optional)
Fuer beide Programme liegen WiX-Quellen bei:
installers\wix\HostAvailabilityMonitor.wxsinstallers\wix\BizTalkMonitorConfigGenerator.wxsinstallers\wix\build-msi.ps1
Damit kannst du auf einem Windows-Buildsystem mit WiX Toolset v3 echte MSI-Pakete erzeugen.
Beispiel:
.\installers\wix\build-msi.ps1 `
-PublishRoot .\artifacts\publish\net472 `
-OutputRoot .\artifacts\msi
Hinweis: In diesem Arbeitsraum konnte ich keine MSI-Binaries real bauen, weil hier keine Windows-/WiX-Toolchain bereitsteht. Ich habe dir daher robuste PowerShell-Installer und MSI-Quellen fuer den Windows-Build bereitgestellt.
Installation auf dem Server
Monitor
.\scripts\install-on-server.ps1 `
-SourcePath .\artifacts\publish\net472\HostAvailabilityMonitor `
-InstallPath C:\Tools\HostAvailabilityMonitor `
-RegisterEventSource
Generator
.\scripts\install-generator-on-server.ps1 `
-SourcePath .\artifacts\publish\net472\BizTalkMonitorConfigGenerator `
-InstallPath C:\Tools\BizTalkMonitorConfigGenerator `
-RegisterEventSource
Monitor-Konfiguration für tägliche Status-Mail
In appsettings.json bzw. in GeneratedMonitorConfig.Email des Generators stehen jetzt zusätzlich diese Felder:
"Email": {
"Enabled": true,
"To": [ "operations@example.local", "integration-oncall@example.local" ],
"Cc": [ "integration-leads@example.local" ],
"Bcc": [],
"SendOnFailure": true,
"SendOnRecovery": true,
"SendDailySummary": true,
"DailySummaryHourLocal": 14,
"DailySummaryMinuteLocal": 0
}
Bedeutung:
SendDailySummary: schaltet die tägliche Status-Mail ein oder ausDailySummaryHourLocal: lokale Stunde auf dem Server, z. B.14DailySummaryMinuteLocal: lokale Minute auf dem Server, z. B.0
Empfaengerfelder:
To: Hauptempfaenger als JSON-ListeCc: optionale CC-Empfaenger als JSON-ListeBcc: optionale BCC-Empfaenger als JSON-Liste- Es muss mindestens ein Empfaenger in
To,CcoderBccvorhanden sein. - Mehrere Empfaenger werden nicht per Semikolon in einem String konfiguriert, sondern als mehrere Array-Eintraege.
Wichtig für den Betrieb:
- Die Mail wird nicht durch einen separaten zweiten Job verschickt.
- Sie wird vom normalen Monitor-Lauf versendet.
- Das heißt: Der erste erfolgreiche Programmlauf ab 14:00 Uhr lokal verschickt die Tageszusammenfassung.
- Läuft der Task z. B. alle 30 Minuten, dann geht die Status-Mail je nach Startzeit um
14:00,14:30,15:00usw. raus — aber nur einmal pro Tag.
Inhalt der Tagesstatus-Mail:
- Monitorname, Umgebung, Servername
- Zeitfenster von Mitternacht bis Versandzeitpunkt
- Anzahl aller heutigen Checks
- Anzahl heutiger erfolgreicher und fehlgeschlagener Checks
- aktueller Snapshot des letzten Laufs
- Liste der aktuell DOWN befindlichen Endpunkte mit Anwendung und Umgebung
- HIP-VM-Snapshot mit Netzwerk- und RDP-Status pro VM
HIP-VM-Monitoring
Die statischen HIP-VMs liegen getrennt von den BizTalk-Endpunkten in:
src\HostAvailabilityMonitor\hip-vms.json
Aktiviert wird die Erweiterung in appsettings.json:
"HipVirtualMachines": {
"Enabled": true,
"ConfigPath": "hip-vms.json",
"ApplicationName": "HIP Virtual Machines",
"TimeoutSeconds": 5,
"RdpPort": 3389,
"CheckNetwork": true,
"CheckRdp": true
}
Pro VM erzeugt der Monitor beim Start zwei normale Checks:
Network: Ping/ICMP gegen die konfigurierte AdresseRDP: TCP-Verbindung auf den konfigurierten RDP-Port, standardmäßig3389
Ausfälle und Recoveries laufen über dieselbe State-Datei und dieselbe Mail-Logik wie alle anderen Targets. Die tägliche Status-Mail enthält zusätzlich eine kompakte HIP-VM-Übersicht je Gruppe, Maschine und Beschreibung.
Mehrere Mail-Empfaenger konfigurieren
Beispiel:
"Email": {
"Enabled": true,
"From": "monitor@example.local",
"To": [
"operations@example.local",
"integration-oncall@example.local"
],
"Cc": [
"integration-leads@example.local"
],
"Bcc": [
"audit@example.local"
]
}
Wichtig:
- pro Adresse ein eigener Eintrag im Array
- keine Semikolon-getrennte Empfaengerliste in einem einzelnen String
CcundBccsind optional
Generator verwenden
1. Generator-Einstellungen prüfen oder anpassen
Datei:
src\BizTalkMonitorConfigGenerator\generator-settings.json
Wichtige Felder:
EnvironmentName: z. B.HIP ProduktionBizTalk.ConnectionString: meistSERVER=.;DATABASE=BizTalkMgmtDb;Integrated Security=SSPIBizTalk.OnlyStartedSendPorts: nur gestartete Send Ports übernehmenBizTalk.OnlyEnabledReceiveLocations: nur aktivierte Receive Locations übernehmenBizTalk.IncludeSecondaryTransportOnSendPorts: Secondary Transport mit aufnehmen- Hinweis: Secondary Transports mit Adapter
SMTPwerden bewusst nicht als Monitor-Targets erzeugt BizTalk.IncludeLocalFilePaths: lokale Pfade zulassen oder verwerfenBizTalk.ApplicationMappings: Mapping von BizTalk-Anwendungsnamen auf fachliche App-NamenOutput.Path: Pfad der zu erzeugenden Monitor-JSONGeneratedMonitorConfig: Vorlage für Logging, Runtime, Event Log und Mail des MonitorsGeneratedMonitorConfig.Logging.RetentionDays: Aufbewahrung der taeglichen Monitor-Logdateien, standardmaessig30GeneratedMonitorConfig.Runtime.StateFileName: Dateiname der Statusdatei, falls mehrere Monitor-Konfigurationen getrennten Zustand brauchenGeneratedMonitorConfig.HipVirtualMachines: statische HIP-VM-Prüfung in der generierten Monitor-JSON einschaltenGeneratedMonitorConfig.Email.SendDailySummary: tägliche Status-Mail in der generierten Monitor-JSON einschaltenGeneratedMonitorConfig.Email.DailySummaryHourLocal: lokale Uhrzeit der TageszusammenfassungGeneratedMonitorConfig.Email.DailySummaryMinuteLocal: lokale Minute der Tageszusammenfassung
2. Generator direkt starten
C:\Tools\BizTalkMonitorConfigGenerator\BizTalkMonitorConfigGenerator.exe C:\Tools\BizTalkMonitorConfigGenerator\generator-settings.json
3. Generator per Hilfsskript starten
.\scripts\generate-monitor-config.ps1 -InstallPath C:\Tools\BizTalkMonitorConfigGenerator
4. Ergebnis prüfen
Danach sollte eine generierte Monitor-Datei vorhanden sein, z. B.:
C:\Tools\BizTalkMonitorConfigGenerator\generated-monitor-appsettings.json
Zusätzlich prüfen:
- Generator-Logdatei unter
logs\ - Einträge im Windows Application Event Log
- Inhalt der generierten JSON
5. Monitor mit der erzeugten Datei starten
C:\Tools\HostAvailabilityMonitor\HostAvailabilityMonitor.exe C:\Tools\BizTalkMonitorConfigGenerator\generated-monitor-appsettings.json
Praxisbeispiel für den Betrieb auf der BizTalk-Maschine
Task 1: Generator
- Programm:
C:\Tools\BizTalkMonitorConfigGenerator\BizTalkMonitorConfigGenerator.exe - Argumente:
C:\Tools\BizTalkMonitorConfigGenerator\generator-settings.json - Starten in:
C:\Tools\BizTalkMonitorConfigGenerator - Konto: BizTalk-Admin / technisches Administratorkonto
- Intervall: z. B. alle 30 Minuten oder vor dem Monitor-Lauf
Task 2: Monitor
- Programm:
C:\Tools\HostAvailabilityMonitor\HostAvailabilityMonitor.exe - Argumente:
C:\Tools\BizTalkMonitorConfigGenerator\generated-monitor-appsettings.json - Starten in:
C:\Tools\HostAvailabilityMonitor - Konto: Dienstkonto mit technischem Zugriff auf Shares, HTTP(S), FTP/SFTP und andere Zielsysteme
- Intervall: kurz nach dem Generator, z. B. 1 bis 2 Minuten später
Empfehlung für die Status-Mail um 14:00:
- den Monitor mindestens alle 15 oder 30 Minuten laufen lassen
- sicherstellen, dass in dieser Zeit auch mindestens ein Lauf nach 14:00 Uhr stattfindet
- kein separater Status-Task notwendig
Beispiel für ein Generator-Mapping
"ApplicationMappings": [
{
"BizTalkApplicationName": "HIP*",
"ApplicationName": "HIP"
},
{
"BizTalkApplicationName": "PartnerA*",
"ApplicationName": "HIP Partneranbindung"
}
]
Hinweise
-
Fuer .NET Framework 4.7.2 ist der Build-Output jetzt unter
artifacts\publish\net472\vorgesehen. -
Nicht unterstützte Endpunkte wie
net.pipe://werden sauber übersprungen und protokolliert. -
Für
net.tcp://host:port/...wird eine Monitor-kompatibletcp://...-Adresse erzeugt. -
Für lokale Dateipfade ist standardmäßig
IncludeLocalFilePaths=falsegesetzt. -
Die erzeugte Monitor-JSON enthält
EnvironmentNameglobal undApplicationNamepro Target. -
Der Generator versendet selbst keine E-Mails, sondern erzeugt nur die Konfiguration.
-
Die Event-Source-Erstellung benötigt Administratorrechte.
-
Die Tagesstatus-Mail wird nur dann als „versendet“ gespeichert, wenn der SMTP-Versand erfolgreich war.
Dokumentation
- Deutsch: Dokumentation.md
- English: Documentation.en.md