Unit monitors are used to monitor specific counters, events, scripts, and services. You can set the monitor to generate an alert.
For an example of how to create a unit monitor to monitor a service see, How to Create a Unit Monitor.
The following code example shows how to create a unit monitor that monitors the event log for specific events.
Visual Basic | Copy Code |
---|---|
' ' Creates an event log unit monitor. ' Imports Microsoft.EnterpriseManagement Imports Microsoft.EnterpriseManagement.Administration Imports Microsoft.EnterpriseManagement.Common Imports Microsoft.EnterpriseManagement.Configuration Imports Microsoft.EnterpriseManagement.Monitoring Imports System Imports System.Collections.Generic Imports System.Collections.ObjectModel Imports System.Text 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 eventLogMonitor As ManagementPackUnitMonitor Dim eventLogMonitorType As ManagementPackUnitMonitorType mg = New ManagementGroup("localhost") mp = mg.GetManagementPacks("SampleMP")(0) monitoringClassCriteria = New MonitoringClassCriteria("DisplayName='Windows Server 2003 Operating System'") monitoringClass = mg.GetMonitoringClasses(monitoringClassCriteria)(0) eventLogMonitorType = mg.GetUnitMonitorTypes("Microsoft.Windows.2SingleEventLog2StateMonitorType")(0) eventLogMonitor = New ManagementPackUnitMonitor(mp, "SampleEventLogMonitor", ManagementPackAccessibility.Internal) eventLogMonitor.DisplayName = "Sample Event Log Monitor" eventLogMonitor.TypeID = eventLogMonitorType eventLogMonitor.Target = monitoringClass ConfigureAlertSettings(eventLogMonitor, eventLogMonitorType, mp) ConfigureHealthStates(eventLogMonitor) SpecifyMonitorConfiguration(eventLogMonitor) SpecifyParentMonitor(eventLogMonitor, mg) mp.Verify() 'Save the changes into the management pack. mp.AcceptChanges() End Function 'Main ' ------------------------------------------------------------------ Private Shared Sub SpecifyParentMonitor(ByVal eventLogMonitor 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) eventLogMonitor.ParentMonitorID = parentMonitor End Sub 'SpecifyParentMonitor '------------------------------------------------------------------- Private Shared Sub SpecifyMonitorConfiguration(ByVal serviceMonitor As ManagementPackUnitMonitor) Dim monitorConfig As String monitorConfig = "<FirstComputerName>$Target/Host/Property[Type=""Windows!Microsoft.Windows.Computer""]/NetworkName$</FirstComputerName>" & _ "<FirstLogName>Application</FirstLogName>" & _ "<FirstExpression>" & _ "<And>" & _ "<Expression>" & _ "<SimpleExpression>" & _ "<ValueExpression>" & _ "<XPathQuery Type=""UnsignedInteger"">EventDisplayNumber</XPathQuery>" & _ "</ValueExpression>" & _ "<Operator>Equal</Operator>" & _ "<ValueExpression>" & _ "<Value Type=""UnsignedInteger"">2</Value>" & _ "</ValueExpression>" & _ "</SimpleExpression>" & _ "</Expression>" & _ "<Expression>" & _ "<SimpleExpression>" & _ "<ValueExpression>" & _ "<XPathQuery Type=""String"">PublisherName</XPathQuery>" & _ "</ValueExpression>" & _ "<Operator>Equal</Operator>" & _ "<ValueExpression>" & _ "<Value Type=""String"">SampleSource</Value>" & _ "</ValueExpression>" & _ "</SimpleExpression>" & _ "</Expression>" & _ "</And>" & _ "</FirstExpression>" & _ "<SecondComputerName>$Target/Host/Property[Type=""Windows!Microsoft.Windows.Computer""]/NetworkName$</SecondComputerName>" & _ "<SecondLogName>Application</SecondLogName>" & _ "<SecondExpression>" & _ "<And>" & _ "<Expression>" & _ "<SimpleExpression>" & _ "<ValueExpression>" & _ "<XPathQuery Type=""UnsignedInteger"">EventDisplayNumber</XPathQuery>" & _ "</ValueExpression>" & _ "<Operator>Equal</Operator>" & _ "<ValueExpression>" & _ "<Value Type=""UnsignedInteger"">1</Value>" & _ "</ValueExpression>" & _ "</SimpleExpression>" & _ "</Expression>" & _ "<Expression>" & _ "<SimpleExpression>" & _ "<ValueExpression>" & _ "<XPathQuery Type=""String"">PublisherName</XPathQuery>" & _ "</ValueExpression>" & _ "<Operator>Equal</Operator>" & _ "<ValueExpression>" & _ "<Value Type=""String"">SampleSource</Value>" & _ "</ValueExpression>" & _ "</SimpleExpression>" & _ "</Expression>" & _ "</And>" & _ "</SecondExpression>" serviceMonitor.Configuration = monitorConfig End Sub 'SpecifyMonitorConfiguration '------------------------------------------------------------------- Private Shared Sub ConfigureHealthStates(ByVal eventLogMonitor As ManagementPackUnitMonitor) Dim healthyState As ManagementPackUnitMonitorOperationalState Dim errorState As ManagementPackUnitMonitorOperationalState healthyState = New ManagementPackUnitMonitorOperationalState(eventLogMonitor, "EventLogMonitorHealthyState") errorState = New ManagementPackUnitMonitorOperationalState(eventLogMonitor, "EventLogMonitorWarningState") healthyState.HealthState = HealthState.Success healthyState.MonitorTypeStateID = "FirstEventRaised" errorState.HealthState = HealthState.Warning errorState.MonitorTypeStateID = "SecondEventRaised" eventLogMonitor.OperationalStateCollection.Add(healthyState) eventLogMonitor.OperationalStateCollection.Add(errorState) End Sub 'ConfigureHealthStates '------------------------------------------------------------------- Private Shared Sub ConfigureAlertSettings(ByVal eventLogMonitor As ManagementPackUnitMonitor, _ ByVal unitMonitorType As ManagementPackUnitMonitorType, ByVal mp As ManagementPack) eventLogMonitor.AlertSettings = New ManagementPackMonitorAlertSettings() eventLogMonitor.AlertSettings.AlertOnState = HealthState.Error eventLogMonitor.AlertSettings.AutoResolve = True eventLogMonitor.AlertSettings.AlertPriority = ManagementPackWorkflowPriority.Normal eventLogMonitor.AlertSettings.AlertSeverity = ManagementPackAlertSeverity.Error Dim alertMessage As ManagementPackStringResource alertMessage = New ManagementPackStringResource(mp, "SampleEventLogMonitorAlertMessage") alertMessage.DisplayName = "Sample Event Log Monitor alert" alertMessage.Description = "The specified event was detected in the event log" eventLogMonitor.AlertSettings.AlertMessage = alertMessage End Sub 'ConfigureAlertSettings End Class 'Program End Namespace 'SDKSamples |
C# | Copy Code |
---|---|
// // Creates an event log 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 eventLogMonitor; ManagementPackUnitMonitorType eventLogMonitorType; mg = new ManagementGroup("localhost"); mp = mg.GetManagementPacks("SampleMP")[0]; monitoringClassCriteria = new MonitoringClassCriteria("DisplayName='Windows Server 2003 Operating System'"); monitoringClass = mg.GetMonitoringClasses(monitoringClassCriteria)[0]; eventLogMonitorType = mg.GetUnitMonitorTypes("Microsoft.Windows.2SingleEventLog2StateMonitorType")[0]; eventLogMonitor = new ManagementPackUnitMonitor(mp, "SampleEventLogMonitor", ManagementPackAccessibility.Internal); eventLogMonitor.DisplayName = "Sample Event Log Monitor"; eventLogMonitor.TypeID = eventLogMonitorType; eventLogMonitor.Target = monitoringClass; ConfigureAlertSettings(eventLogMonitor, eventLogMonitorType, mp); ConfigureHealthStates(eventLogMonitor); SpecifyMonitorConfiguration(eventLogMonitor); SpecifyParentMonitor(eventLogMonitor, mg); mp.Verify(); //Save the changes into the management pack. mp.AcceptChanges(); } // ------------------------------------------------------------------ private static void SpecifyParentMonitor( ManagementPackUnitMonitor eventLogMonitor, ManagementGroup mg ) { ManagementPackAggregateMonitor parentMonitor; MonitorCriteria monitorCriteria; monitorCriteria = new MonitorCriteria("Name='System.Health.AvailabilityState'"); parentMonitor = (ManagementPackAggregateMonitor)mg.GetMonitors(monitorCriteria)[0]; eventLogMonitor.ParentMonitorID = parentMonitor; } //------------------------------------------------------------------- private static void SpecifyMonitorConfiguration( ManagementPackUnitMonitor serviceMonitor ) { string monitorConfig; monitorConfig = @"<FirstComputerName>$Target/Host/Property[Type=""Windows!Microsoft.Windows.Computer""]/NetworkName$</FirstComputerName> <FirstLogName>Application</FirstLogName> <FirstExpression> <And> <Expression> <SimpleExpression> <ValueExpression> <XPathQuery Type=""UnsignedInteger"">EventDisplayNumber</XPathQuery> </ValueExpression> <Operator>Equal</Operator> <ValueExpression> <Value Type=""UnsignedInteger"">2</Value> </ValueExpression> </SimpleExpression> </Expression> <Expression> <SimpleExpression> <ValueExpression> <XPathQuery Type=""String"">PublisherName</XPathQuery> </ValueExpression> <Operator>Equal</Operator> <ValueExpression> <Value Type=""String"">SampleSource</Value> </ValueExpression> </SimpleExpression> </Expression> </And> </FirstExpression> <SecondComputerName>$Target/Host/Property[Type=""Windows!Microsoft.Windows.Computer""]/NetworkName$</SecondComputerName> <SecondLogName>Application</SecondLogName> <SecondExpression> <And> <Expression> <SimpleExpression> <ValueExpression> <XPathQuery Type=""UnsignedInteger"">EventDisplayNumber</XPathQuery> </ValueExpression> <Operator>Equal</Operator> <ValueExpression> <Value Type=""UnsignedInteger"">1</Value> </ValueExpression> </SimpleExpression> </Expression> <Expression> <SimpleExpression> <ValueExpression> <XPathQuery Type=""String"">PublisherName</XPathQuery> </ValueExpression> <Operator>Equal</Operator> <ValueExpression> <Value Type=""String"">SampleSource</Value> </ValueExpression> </SimpleExpression> </Expression> </And> </SecondExpression>"; serviceMonitor.Configuration = monitorConfig; } //------------------------------------------------------------------- private static void ConfigureHealthStates( ManagementPackUnitMonitor eventLogMonitor ) { ManagementPackUnitMonitorOperationalState healthyState; ManagementPackUnitMonitorOperationalState errorState; healthyState = new ManagementPackUnitMonitorOperationalState(eventLogMonitor, "EventLogMonitorHealthyState"); errorState = new ManagementPackUnitMonitorOperationalState(eventLogMonitor, "EventLogMonitorWarningState"); healthyState.HealthState = HealthState.Success; healthyState.MonitorTypeStateID = "FirstEventRaised"; errorState.HealthState = HealthState.Warning; errorState.MonitorTypeStateID = "SecondEventRaised"; eventLogMonitor.OperationalStateCollection.Add(healthyState); eventLogMonitor.OperationalStateCollection.Add(errorState); } //------------------------------------------------------------------- private static void ConfigureAlertSettings( ManagementPackUnitMonitor eventLogMonitor, ManagementPackUnitMonitorType unitMonitorType, ManagementPack mp ) { eventLogMonitor.AlertSettings = new ManagementPackMonitorAlertSettings(); eventLogMonitor.AlertSettings.AlertOnState = HealthState.Error; eventLogMonitor.AlertSettings.AutoResolve = true; eventLogMonitor.AlertSettings.AlertPriority = ManagementPackWorkflowPriority.Normal; eventLogMonitor.AlertSettings.AlertSeverity = ManagementPackAlertSeverity.Error; ManagementPackStringResource alertMessage; alertMessage = new ManagementPackStringResource(mp, "SampleEventLogMonitorAlertMessage"); alertMessage.DisplayName = "Sample Event Log Monitor alert"; alertMessage.Description = "The specified event was detected in the event log"; eventLogMonitor.AlertSettings.AlertMessage = alertMessage; } } } |
Send comments about this topic to Microsoft.