It’s always a nice moment when you get a mention in the Windows IT Pro column of the Godfather of Exchange MVPs, Tony Redmond.
In that article Tony is discussing the merits of the new health reporting PowerShell cmdlets in Exchange Server 2013 (Get-HealthReport and Get-ServerHealth).
When I (Tony) wrote about the influence that the Exchange 2013 Managed Availability framework exerts over Database Availability Groups, I received a note from a member of the Exchange product group to ask why I had recommended using a PowerShell script (Get-DAGHealth.ps1) rather than making any attempt to leverage the Get-HealthReport cmdlet (thoughtfully provided to measure and report on the good health of Exchange 2013 servers). Furthermore, why not use SCOM as Managed Availability and SCOM work well together in terms of providing administrators with a view onto what might be going wrong within a DAG.
Fair points, and Tony’s answers are worth reading as he also goes on to explore those new cmdlets a little further.
Here is a little more on the topic from my perspective.
Get-DAGHealth.ps1 is a PowerShell script I wrote to fill a need – monitoring Exchange 2010 DAGs that were doing “stuff” that administrators would like to know about such as content indexes failing, databases failing over, database copies failing and causing copy/replay queues to grow.
Naturally those administrators did not have monitoring tools (such as SCOM) that had built in Exchange 2010 intelligence, or had other monitoring tools that required custom scripting to be able to monitor applications like Exchange.
Being a firm believer that PowerShell exists to solve these problems for us I went ahead and wrote the script, just as I had written other “monitoring” scripts before it (such as Get-DailyBackupAlerts.ps1).
The other main motivation was to develop some good solid code to roll into Test-ExchangeServerHealth.ps1 (which I have since done, and frankly that script has improvements that have yet to be ported back to Get-DAGHealth.ps1).
The very first version of Test-ExchangeServerHealth.ps1 was born in the time of Exchange 2007 (and the first versions could even do some health checks for Exchange 2003). It was updated and re-written many times over the years, adding Exchange 2010 and then Exchange 2013 compatibility. Obviously it pre-dates Managed Availability by some time.
When Managed Availability hit the scene in Exchange 2013 I was immediately interested. A server health monitoring system baked into the product, built to solve the problems that occur at the scale of Office 365, and with new PowerShell cmdlets to play with is great if you ask me.
And Managed Availability also has responders built in to take corrective actions for various problem scenarios, something that I received many requests for in my PowerShell scripts but never felt comfortable implementing.
And with the quirks in a couple of the Test-* cmdlets that shipped with Exchange 2013 it seems pretty clear to me that Managed Availability is the future and the old Test-* cmdlets will be deprecated.
I mean look at all the detail it provides for databases alone. Powerfull stuff.
[PS] C:Scripts>Get-ServerHealth -Identity E15MB1 | where Name -like "Database*" | Select Name Name ---- DatabaseAvailabilityMonitor DatabasePercentRPCRequestsMonitor DatabaseRPCLatencyWarningMonitor DatabaseRPCLatencyErrorMonitor DatabaseHealthStoreNotificationMonitor DatabaseHealthLogGenerationRateMonitor DatabaseHealthLogCopyQueueMonitor DatabaseHealthLogReplayQueueMonitor DatabaseHealthCircLoggingMonitor DatabaseHealthDbCopySuspendedMonitor DatabaseHealthDbCopyFailedAndSuspendedMonitor DatabaseHealthStoreNotificationMonitor DatabaseAvailabilityMonitor DatabasePercentRPCRequestsMonitor DatabaseRPCLatencyWarningMonitor DatabaseRPCLatencyErrorMonitor DatabaseHealthLogGenerationRateMonitor DatabaseHealthLogCopyQueueMonitor DatabaseHealthLogReplayQueueMonitor DatabaseHealthCircLoggingMonitor DatabaseHealthDbCopySuspendedMonitor DatabaseHealthDbCopyFailedAndSuspendedMonitor DatabaseSizeMonitor DatabaseSizeMonitor DatabaseRepeatedMountsMonitor DatabaseRepeatedMountsMonitor DatabaseSizeEscalationProcessingMonitor DatabaseAvailabilityEscalationProcessingMonitor
But it is still early days. Managed Availability is a complex beast. I imagine it works great with SCOM and inside of Office 365. But for the average Exchange administrator who is looking for a health report my opinion at the moment is that MA gives us lots of data but not the type of report that can be quickly and easily read by administrators or managers of varying technical experience.
RunspaceId : 75591758-b589-45c1-99a7-8326b5927a04 Server : E15MB1 CurrentHealthSetState : NotApplicable Name : StorageLogicalDriveSpaceMonitor TargetResource : E: HealthSetName : MailboxSpace HealthGroupName : ServerResources AlertValue : Degraded FirstAlertObservedTime : 7/11/2013 10:58:44 PM Description : IsHaImpacting : False RecurranceInterval : 0 DefinitionCreatedTime : 7/11/2013 10:48:56 PM HealthSetDescription : ServerComponentName : None LastTransitionTime : 7/11/2013 10:58:44 PM LastExecutionTime : 7/11/2013 10:58:44 PM LastExecutionResult : Succeeded ResultId : 65379030 WorkItemId : 714 IsStale : False Error : Exception : IsNotified : False LastFailedProbeId : -2002822569 LastFailedProbeResultId : -1635197854 Identity : MailboxSpaceStorageLogicalDriveSpaceMonitorE: IsValid : True ObjectState : New
The Exchange product team has posted several blog posts to teach us more about Managed Availability, but there is still a lot of documentation to be completed.
So, while I’m personally very eager to learn more about Managed Availability, for the time being I still see the value in custom scripts such as Get-DAGHealth.ps1, and I’m always glad to see them recommended by people like Tony.
That said, we all need to move with the times. If Microsoft is investing their efforts in Managed Availability, and we can expect the Test-* cmdlets to become less relevant and useful over time, then Managed Availability is also where we need to focus as administrators.
So, in 2014 you can be sure that I will be consuming as much information about Managed Availability as I can, and will be eagerly attending all of the MA sessions at MEC (and hopefully talking more with the “member of the Exchange product group” that reached out to Tony).
Perhaps there will even be a new PowerShell script that leverages Managed Availability instead of the Test-* cmdlets. Time will tell.
The script Test-ExchangeServerHealth.ps1 works correctly on Exchange servers with IPv4 addresses or both IPv4/IPv6 because GetHostByName function returns only IPv4 addresses.
I have IPv6-only Exchange 2013 servers (on Windows Server 2012 R2) in our environment, so I had to modify the script:
$ip = @([System.Net.Dns]::GetHostByName($server).AddressList | Select-Object IPAddressToString -ExpandProperty IPAddressToString)
$ip = @((Resolve-DnsName -Name $server -Type AAAA).IPAddress)
It would be great to have a script that will highlight healthreport for managed availability
Get-Healthreport failing on exchange 2013 management shell. I am using SCOM 2012 SP1.
Could you suggest the reason ?
It will fail if the health manager service isn’t running. Other than that you’ll need to provide a lot more detail about your problem.