Website-Icon Frankys Web

Exchange 2016: HealthCheck URLs für Loadbalancer

Der Zustand einzelner Exchange Protokolle lässt sich bequem über eine URL ermitteln, dies ist insbesondere für Loadbalancer interessant, da auf einfache Weise festgestellt werden kann, ob das Protokoll auf dem jeweiligen Server verfügbar ist. Die Abfrage der jeweiligen URLs ist aussagekräftiger als eine einfache Prüfung ob der Port am Exchange Server noch geöffnet ist, aber nicht so lastintensiv wie eine Anmeldung an einem Postfach.

Über die Exchange HealthCheck URLs können Loadbalancer somit feststellen, ob weiterhin Verbindungen an den Server geschickt werden sollen oder ob der Server aus dem Pool genommen wird.

Die HealthCheck Seiten selbst bieten nur wenige Informationen:

“200 OK” kann als Anhaltspunkt für den Loadbalancer genommen werden, um weiterhin Verbindungen an den Server zu senden. Bei anderen Statuscodes sollte der Loadbalancer den Server aus dem Pool nehmen. Aufwendige Tests von Loadbalancern mit Anmeldung an ein Postfach usw. können somit entfallen und verursachen keine zusätzliche Last auf den Exchange Servern.

Die URLs für Exchange 2016 und Exchange 2013 SP1 lauten wie folgt:

Auch für die Fehlerdiagnose können die HealthCheck URLs hilfreich sein, etwa wenn nach einem Update die ComponentStates nicht wieder in den Status “Aktiv” gesetzt werden.

Mit diesem kleinen PowerShell Script, lassen sich die HealthCheck URLs abfragen:

$ExchangeServer = "EXSRV1.frankysweb.local"

#$AllProtocols = [System.Net.SecurityProtocolType]'Tls11,Tls12'
#[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols

$OWA = "https://$ExchangeServer/owa/healthcheck.htm"
$ECP = "https://$ExchangeServer/ecp/healthcheck.htm"
$RPC = "https://$ExchangeServer/rpc/healthcheck.htm"
$EWS = "https://$ExchangeServer/ews/healthcheck.htm"
$MAPI = "https://$ExchangeServer/mapi/healthcheck.htm"
$OAB = "https://$ExchangeServer/oab/healthcheck.htm"
$EAS = "https://$ExchangeServer/Microsoft-Server-ActiveSync/healthcheck.htm"
$AutoDiscover = "https://$ExchangeServer/autodiscover/healthcheck.htm"

$OWAResponse = (Invoke-WebRequest -Uri $OWA).RawContent
if ($OWAResponse -match "200 OK
")
	{
		write-host "OWA:	OK" -foregroundcolor green
	}
else
	{
		write-host "OWA:	Fehler" -foregroundcolor red
	}

$ECPResponse = (Invoke-WebRequest -Uri $ECP).RawContent
if ($ECPResponse -match "200 OK
")
	{
		write-host "ECP:	OK" -foregroundcolor green
	}
else
	{
		write-host "ECP:	Fehler" -foregroundcolor red
	}
	
$RPCResponse = (Invoke-WebRequest -Uri $RPC).RawContent
if ($RPCResponse -match "200 OK
")
	{
		write-host "RPC:	OK" -foregroundcolor green
	}
else
	{
		write-host "RPC:	Fehler" -foregroundcolor red
	}
	
$EWSResponse = (Invoke-WebRequest -Uri $EWS).RawContent
if ($EWSResponse -match "200 OK
")
	{
		write-host "EWS:	OK" -foregroundcolor green
	}
else
	{
		write-host "EWS:	Fehler" -foregroundcolor red
	}
	
$MAPIResponse = (Invoke-WebRequest -Uri $MAPI).RawContent
if ($MAPIResponse -match "200 OK
")
	{
		write-host "MAPI:	OK" -foregroundcolor green
	}
else
	{
		write-host "MAPI:	Fehler" -foregroundcolor red
	}
	
$OABResponse = (Invoke-WebRequest -Uri $OAB).RawContent
if ($OABResponse -match "200 OK
")
	{
		write-host "OAB:	OK" -foregroundcolor green
	}
else
	{
		write-host "OAB:	Fehler" -foregroundcolor red
	}
	
$EASResponse = (Invoke-WebRequest -Uri $EAS).RawContent
if ($EASResponse -match "200 OK
")
	{
		write-host "EAS:	OK" -foregroundcolor green
	}
else
	{
		write-host "EAS:	Fehler" -foregroundcolor red
	}
	
$AutodiscoverResponse = (Invoke-WebRequest -Uri $Autodiscover).RawContent
if ($AutodiscoverResponse -match "200 OK
")
	{
		write-host "Autodiscover:	OK" -foregroundcolor green
	}
else
	{
		write-host "Autodiscover:	Fehler" -foregroundcolor red
	}

Die Ausgabe des Scripts ist simpel und kann daher nur zur ersten Diagnose dienen (wenn überhaupt):

Die mobile Version verlassen