L.6 SwyxWare HealthMonitor konfigurieren
Der SwyxWare HealthMonitor ist ein separat in der VM zu installierender Windows-Dienst. Dieser Abschnitt beschreibt die Installation und Konfiguration dieses Dienstes.
mkdir "$env:ProgramFiles\Swyx.Core.HealthMonitor"
Expand-Archive -Path Swyx.Core.HealthMonitor.zip -DestinationPath "$env:ProgramFiles\Swyx.Core.HealthMonitor"
./install-service.ps1
./install-service.ps1 -EnableHyperVSupport
Der Parameter "-EnableHyperVSupport" konfiguriert den SwyxWare HealthMonitor Dienst, sodass er mit lokalen Administrationsrechten läuft. Das ist notwendig, weil Microsoft Windows die Benutzung der Hyper-V Heartbeat Integration Services nur Administratoren erlaubt.
Das Installations-Skript hat einige optionale Parameter, um die Installation anpassen zu können. In den meisten Fällen sind die Standardeinstellungen ausreichend. Eine Beschreibung der Optionen bekommen Sie mit der normalen PowerShell Hilfe-Funktion:
get-help ./install-service.ps1 -full
Ab SwyxWare Heath Monitor 1.2 können für die Standardeinstellungen die Schritte in diesem Abschnitt entfallen, da die Datei „appSettings.json“ automatisch vom Installationsskript angepasst wird.
Dienste, die per HTTP statt SIP überwacht werden, haben in der „appSettings.json“ Datei bei „destination“ eine HTTP statt SIP URL. Wenn der Dienst kein überprüfbares TLS-Zertifikat hat, können Sie für die Überwachung den TLS-Zertifikatscheck des HealthMonitors ausschalten. Dazu fügen Sie die Einstellung "skipTlsCheck":"true" hinzu.
Das Installationsskript passt die Dienst-Neustart-Optionen der SwyxWare Dienste in Windows an. Ein SwyxWare Dienst, der sich unerwartet beendet, wird nur einmal von Windows neu gestartet. Das Installationsskript passt nur die Dienste an, die in “Probes” in der appSettings.json konfiguriert sind. Lassen sie deshalb das Installationsskript erneut laufen, wenn sie Probes hinzufügen oder entfernen.
Das folgende Beispiel zeigt eine typische Konfiguration für einen Server mit der IP 10.0.0.1:
{
"HealthMonitorApp": {
"Prometheus": false,
"VSphereHeartbeat": true
"HyperVHeartbeat": false
},
"Probes": [
{
"Name": "server",
"Type": "Network",
"Configuration": {
"destination": "sip://10.0.0.1:5060",
"probingIntervalSeconds": 10,
"responseTimeoutMilliseconds": 5000
}
},
{
"Name": "uaCSTA",
"Type": "Network",
"Configuration": {
"destination": "sip://10.0.0.1:65012",
"probingIntervalSeconds": 10,
"responseTimeoutMilliseconds": 500
}
},
{
"Name": "linkmgr",
"Type": "Network",
"Configuration": {
"destination": "sip://10.0.0.1:65001",
"probingIntervalSeconds": 10,
"responseTimeoutMilliseconds": 500
}
},
{
"Name": "conferencemgr",
"Type": "Network",
"Configuration": {
"destination": "sip://10.0.0.1:5062",
"probingIntervalSeconds": 10
}
},
{
"Name": "phonemgr",
"Type": "Network",
"Configuration": {
"destination": "sip://10.0.0.1:65007",
"probingIntervalSeconds": 10
}
},
{
"Name": "swyxgate",
"Type": "Network",
"Configuration": {
"destination": "sip://10.0.0.1:5064",
"probingIntervalSeconds": 10
}
},
{
"Name": "ctiplus",
"Type": "Network",
"Configuration": {
"destination": "sip://10.0.0.1:65009",
"probingIntervalSeconds": 10
}
},
{
"Name": "faxserver",
"Type": "Network",
"Configuration": {
"destination": "sip://10.0.0.1:61000",
"probingIntervalSeconds": 10
}
},
{
"Name": "cds",
"Type": "Network",
"Configuration": {
"destination": "https://10.0.0.1:9100/ippbx/client/v1.0/login/systemhealth",
"probingIntervalSeconds": 10,
"responseTimeoutMilliseconds": 1000
}
}
],
"HealthRules": [
{
"ProbeName": "server",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 3
},
{
"ProbeName": "uaCSTA",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
},
{
"ProbeName": "linkmgr",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
},
{
"ProbeName": "conferencemgr",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
},
{
"ProbeName": "phonemgr",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
},
{
"ProbeName": "swyxgate",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
},
{
"ProbeName": "cds",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
},
{
"ProbeName": "pns",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
},
{
"ProbeName": "faxserver",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
},
{
"ProbeName": "ctiplus",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
},
{
"ProbeName": "ctiplus",
"MetricName": "swyx_number_of_failed_probes",
"LessThanOrEqual": 2
}
],
"Serilog": {
"MinimumLevel": {
"Default": "Information"
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate":
"{Timestamp:dd HH:mm:ss.fff} {Level:u4} {ThreadId} {SourceContext} {Message}{NewLine}{Exception}",
"theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console"
}
},
{
"Name": "File",
"Args": {
"path": "C:\\ProgramData\\Swyx\\Traces\\Swyx.Core.HealthMonitor.txt",
"rollingInterval": "Day",
"retainedFileCountLimit": 7,
"outputTemplate":
"{Timestamp:dd HH:mm:ss.fff} {Level:u4} {ThreadId} {SourceContext,-50} {Message}{NewLine}{Exception}"
}
}
],
"Enrich": ["FromLogContext", "WithThreadId"]
},
"AllowedHosts": "*"
}