Unit monitors are used to monitor specific counters, events, scripts, and services. Unit monitors can be rolled up to either dependency or aggregate rollup monitors. You have the option to set the monitor to generate an alert.
For an example of how to create a unit monitor to monitor an event log see, How to Create an Event Log Unit Monitor.
The following code example shows how to create a unit monitor that monitors the state of a service.
Visual Basic | Copy Code |
---|---|
' Creates a unit monitor. Imports System Imports System.Collections.Generic Imports System.Collections.ObjectModel Imports System.Text Imports Microsoft.EnterpriseManagement Imports Microsoft.EnterpriseManagement.Administration Imports Microsoft.EnterpriseManagement.Common Imports Microsoft.EnterpriseManagement.Configuration Imports Microsoft.EnterpriseManagement.Monitoring Namespace SDKSamples Class Program Public Overloads Shared Function Main(ByVal args() As String) As Integer Dim mg As ManagementGroup Dim mp As ManagementPack Dim monitoringClass As MonitoringClass Dim monitoringClassCriteria As MonitoringClassCriteria Dim serviceMonitor As ManagementPackUnitMonitor Dim serviceMonitorType As ManagementPackUnitMonitorType mg = New ManagementGroup("localhost") mp = mg.GetManagementPacks("SampleManagementPack")(0) monitoringClassCriteria = New MonitoringClassCriteria( _ "DisplayName='Windows Server 2003 Operating System'") monitoringClass = mg.GetMonitoringClasses(monitoringClassCriteria)(0) serviceMonitorType = mg.GetUnitMonitorTypes( _ "Microsoft.Windows.CheckNTServiceStateMonitorType")(0) serviceMonitor = New ManagementPackUnitMonitor( _ mp, "SampleServiceMonitor", ManagementPackAccessibility.Internal) serviceMonitor.DisplayName = "Sample Service Monitor" serviceMonitor.TypeID = serviceMonitorType serviceMonitor.Target = monitoringClass ConfigureAlertSettings(serviceMonitor, serviceMonitorType, mp) ConfigureHealthStates(serviceMonitor, serviceMonitorType) SpecifyMonitorConfiguration(serviceMonitor) SpecifyParentMonitor(serviceMonitor, mg) mp.Verify() ' Save the changes into the management pack. mp.AcceptChanges() End Function ' ------------------------------------------------------------------- Private Shared Sub SpecifyParentMonitor( _ ByVal serviceMonitor As ManagementPackUnitMonitor, _ ByVal mg As ManagementGroup) Dim parentMonitor As ManagementPackAggregateMonitor Dim monitorCriteria As MonitorCriteria monitorCriteria = New MonitorCriteria("Name='System.Health.AvailabilityState'") parentMonitor = CType(mg.GetMonitors(monitorCriteria)(0), ManagementPackAggregateMonitor) serviceMonitor.ParentMonitorID = parentMonitor End Sub ' ------------------------------------------------------------------- Private Shared Sub SpecifyMonitorConfiguration( _ ByVal serviceMonitor As ManagementPackUnitMonitor) Dim monitorConfig As String monitorConfig = "<ComputerName>$Target/Host/Property[Type=""Windows!Microsoft.Windows.Computer""]/NetworkName$</ComputerName><ServiceName>Alerter</ServiceName>" serviceMonitor.Configuration = monitorConfig End Sub ' ------------------------------------------------------------------- Private Shared Sub ConfigureHealthStates( _ ByVal serviceMonitor As ManagementPackUnitMonitor, _ ByVal serviceMonitorType As ManagementPackUnitMonitorType) Dim healthyState As ManagementPackUnitMonitorOperationalState Dim errorState As ManagementPackUnitMonitorOperationalState healthyState = New ManagementPackUnitMonitorOperationalState(serviceMonitor, "Success") errorState = New ManagementPackUnitMonitorOperationalState(serviceMonitor, "Error") healthyState.HealthState = HealthState.Success healthyState.MonitorTypeStateID = "Running" errorState.HealthState = HealthState.Error errorState.MonitorTypeStateID = "NotRunning" serviceMonitor.OperationalStateCollection.Add(healthyState) serviceMonitor.OperationalStateCollection.Add(errorState) End Sub ' ------------------------------------------------------------------- Private Shared Sub ConfigureAlertSettings( _ ByVal serviceMonitor As ManagementPackUnitMonitor, _ ByVal unitMonitorType As ManagementPackUnitMonitorType, _ ByVal mp As ManagementPack) serviceMonitor.AlertSettings = New ManagementPackMonitorAlertSettings() serviceMonitor.AlertSettings.AlertOnState = HealthState.Error serviceMonitor.AlertSettings.AutoResolve = True serviceMonitor.AlertSettings.AlertPriority = ManagementPackWorkflowPriority.Normal serviceMonitor.AlertSettings.AlertSeverity = ManagementPackAlertSeverity.Error serviceMonitor.AlertSettings.AlertParameter1 = _ "$Target/Host/Property[Type=""Windows!Microsoft.Windows.Computer""]/NetworkName$" ' this points to the computer name Dim alertMessage As ManagementPackStringResource alertMessage = New ManagementPackStringResource(mp, "SampleAlertMessage") alertMessage.DisplayName = "The Alerter service is stopped" alertMessage.Description = "The Alerter service is stopped on computer {0}." serviceMonitor.AlertSettings.AlertMessage = alertMessage End Sub End Class End Namespace |
C# | Copy Code |
---|---|
// // Creates a unit monitor. // using Microsoft.EnterpriseManagement; using Microsoft.EnterpriseManagement.Administration; using Microsoft.EnterpriseManagement.Common; using Microsoft.EnterpriseManagement.Configuration; using Microsoft.EnterpriseManagement.Monitoring; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; namespace SDKSamples { class Program { //------------------------------------------------------------------- static void Main(string[] args) { ManagementGroup mg; ManagementPack mp; MonitoringClass monitoringClass; MonitoringClassCriteria monitoringClassCriteria; ManagementPackUnitMonitor serviceMonitor; ManagementPackUnitMonitorType serviceMonitorType; mg = new ManagementGroup("localhost"); mp = mg.GetManagementPacks("SampleManagementPack")[0]; monitoringClassCriteria = new MonitoringClassCriteria( "DisplayName='Windows Server 2003 Operating System'"); monitoringClass = mg.GetMonitoringClasses(monitoringClassCriteria)[0]; serviceMonitorType = mg.GetUnitMonitorTypes( "Microsoft.Windows.CheckNTServiceStateMonitorType")[0]; serviceMonitor = new ManagementPackUnitMonitor( mp, "SampleServiceMonitor", ManagementPackAccessibility.Internal); serviceMonitor.DisplayName = "Sample Service Monitor"; serviceMonitor.TypeID = serviceMonitorType; serviceMonitor.Target = monitoringClass; ConfigureAlertSettings(serviceMonitor,serviceMonitorType,mp); ConfigureHealthStates(serviceMonitor, serviceMonitorType); SpecifyMonitorConfiguration(serviceMonitor); SpecifyParentMonitor(serviceMonitor, mg); mp.Verify(); //Save the changes into the management pack. mp.AcceptChanges(); } private static void SpecifyParentMonitor( ManagementPackUnitMonitor serviceMonitor, ManagementGroup mg ) { ManagementPackAggregateMonitor parentMonitor; MonitorCriteria monitorCriteria; monitorCriteria = new MonitorCriteria("Name='System.Health.AvailabilityState'"); parentMonitor = (ManagementPackAggregateMonitor)mg.GetMonitors(monitorCriteria)[0]; serviceMonitor.ParentMonitorID = parentMonitor; } //------------------------------------------------------------------- private static void SpecifyMonitorConfiguration( ManagementPackUnitMonitor serviceMonitor ) { string monitorConfig; monitorConfig = @"<ComputerName>$Target/Host/Property[Type=""Windows!Microsoft.Windows.Computer""]/NetworkName$</ComputerName> <ServiceName>Alerter</ServiceName>"; serviceMonitor.Configuration = monitorConfig; } //------------------------------------------------------------------- private static void ConfigureHealthStates( ManagementPackUnitMonitor serviceMonitor, ManagementPackUnitMonitorType serviceMonitorType ) { ManagementPackUnitMonitorOperationalState healthyState; ManagementPackUnitMonitorOperationalState errorState; healthyState = new ManagementPackUnitMonitorOperationalState(serviceMonitor, "Success"); errorState = new ManagementPackUnitMonitorOperationalState(serviceMonitor, "Error"); healthyState.HealthState = HealthState.Success; healthyState.MonitorTypeStateID = "Running"; errorState.HealthState = HealthState.Error; errorState.MonitorTypeStateID = "NotRunning"; serviceMonitor.OperationalStateCollection.Add(healthyState); serviceMonitor.OperationalStateCollection.Add(errorState); } //------------------------------------------------------------------- private static void ConfigureAlertSettings( ManagementPackUnitMonitor serviceMonitor, ManagementPackUnitMonitorType unitMonitorType, ManagementPack mp ) { serviceMonitor.AlertSettings = new ManagementPackMonitorAlertSettings(); serviceMonitor.AlertSettings.AlertOnState = HealthState.Error; serviceMonitor.AlertSettings.AutoResolve = true; serviceMonitor.AlertSettings.AlertPriority = ManagementPackWorkflowPriority.Normal; serviceMonitor.AlertSettings.AlertSeverity = ManagementPackAlertSeverity.Error; serviceMonitor.AlertSettings.AlertParameter1 = @"$Target/Host/Property[Type=""Windows!Microsoft.Windows.Computer""]/NetworkName$"; //this points to the computer name ManagementPackStringResource alertMessage; alertMessage = new ManagementPackStringResource(mp, "SampleAlertMessage"); alertMessage.DisplayName = "The Alerter service is stopped"; alertMessage.Description = "The Alerter service is stopped on computer {0}."; serviceMonitor.AlertSettings.AlertMessage = alertMessage; } } } |
Send comments about this topic to Microsoft.