You can automate the URL monitoring setup to use one or more agent computers to monitor a Web site or Web-based application. The URL monitoring information is created by using a template and then added to a Management Pack. You specify the URL that you want to monitor, one or more fully qualified domain names of the computers that will monitor the URL, the display name of the monitoring type that is created in a Management Pack, and the display name of the Management Pack you want to add the type to.
After you set up URL monitoring, you must also create a state view and an alert view for the newly created type in the Management Pack. This allows you to view the alerts that are generated from monitoring the URL and view the health state of the URL.
The following example sets up URL monitoring for an agent computer.
Visual Basic | Copy Code |
---|---|
' URL monitoring example. Imports System Imports System.Collections.ObjectModel Imports Microsoft.EnterpriseManagement Imports Microsoft.EnterpriseManagement.Common Imports Microsoft.EnterpriseManagement.Configuration Imports Microsoft.EnterpriseManagement.Monitoring Imports System.Xml Imports System.Globalization Imports System.Collections.Generic Namespace SDKSamples Class Program Private Shared mg As ManagementGroup = Nothing Public Overloads Shared Function Main(ByVal args() As String) As Integer ' The URL to monitor. Dim url As String = "http://www.microsoft.com" ' One or more fully qualified domain names for the watcher nodes, ' which must have the Operations Manager agent installed. ' Replace the placeholder name below with a real computer name. Dim watcherNodes As List(Of String) = New List(Of String) watcherNodes.Add("computerName.domain.com") ' The display name of the type that will be created. This will appear in the ' authoring space and when you create a state view or alert view. Dim displayName As String = "TestURLMonitoring" ' The display name of the Management Pack that the URL monitoring logic ' will be added into. Dim targetMP As String = "Sample Management Pack" mg = New ManagementGroup("localhost") Dim configDocXML As String = CreateConfigurationXmlDoc(url, watcherNodes, displayName) Dim template As ManagementPackTemplate = GetUrlMonitoringTemplate() Dim mp As ManagementPack = GetManagementPack(targetMP) Dim folderId As String = String.Format("WebAppFolder{0}", System.Guid.NewGuid().ToString("N")) mp.ProcessMonitoringTemplate(template, configDocXML, folderId, displayName, "folder description goes here") End Function 'Main Private Shared Function GetUrlMonitoringTemplate() As MonitoringTemplate Dim criteria As String = "Name = 'Microsoft.SystemCenter.WebApplication.SingleUrl.Template'" Dim templateCriteria As New MonitoringTemplateCriteria(criteria) Dim template As MonitoringTemplate = Nothing template = mg.GetMonitoringTemplates(templateCriteria)(0) Return template End Function 'GetUrlMonitoringTemplate '/ <summary> '/ Gets the specified ManagementPack. '/ </summary> Private Shared Function GetManagementPack(ByVal displayName As String) As ManagementPack Dim criteria As String = String.Format("DisplayName = '{0}'", displayName) Dim mpCriteria As New ManagementPackCriteria(criteria) Dim mp As ManagementPack = Nothing Try mp = mg.GetManagementPacks(mpCriteria)(0) Catch e As ArgumentOutOfRangeException Throw New InvalidOperationException("Could not find the specified Management Pack: " + criteria) End Try Return mp End Function 'GetManagementPack Private Shared Sub AddChildElement(ByVal parentElement As XmlElement, ByVal newElementName As String, ByVal value As String) Dim document As XmlDocument = parentElement.OwnerDocument Dim newElement As XmlElement = document.CreateElement(newElementName) newElement.InnerText = value parentElement.AppendChild(newElement) End Sub 'AddChildElement Private Shared Function CreateConfigurationXmlDoc(ByVal url As String, ByVal watcherNodes As List(Of String), _ ByVal displayName As String) Dim configDoc As New XmlDocument() Dim rootNode As XmlElement = configDoc.CreateElement("Configuration") Dim typeId As String Dim watcherNodesList As String Dim uniqueKey As String configDoc.AppendChild(rootNode) typeId = String.Format(CultureInfo.InvariantCulture, "WebApplication_{0}", Guid.NewGuid().ToString("N")) AddChildElement(rootNode, "TypeId", typeId) AddChildElement(rootNode, "Name", displayName) AddChildElement(rootNode, "Description", "") AddChildElement(rootNode, "LocaleId", "ENU") AddChildElement(rootNode, "Verb", "GET") AddChildElement(rootNode, "URL", url) AddChildElement(rootNode, "Version", "HTTP/1.1") AddChildElement(rootNode, "PollIntervalInSeconds", "120") AddWatcherNodeIds(rootNode, watcherNodes) watcherNodesList = CreateWatcherComputerList(watcherNodes) AddChildElement(rootNode, "WatcherComputersList", watcherNodesList) uniqueKey = Guid.NewGuid().ToString() AddChildElement(rootNode, "UniquenessKey", uniqueKey) AddChildElement(rootNode, "Proxy", "") AddChildElement(rootNode, "ProxyUserName", "") AddChildElement(rootNode, "ProxyPassword", "") AddChildElement(rootNode, "ProxyAuthenticationScheme", "None") AddChildElement(rootNode, "CredentialUserName", "") AddChildElement(rootNode, "CredentialPassword", "") AddChildElement(rootNode, "AuthenticationScheme", "None") Return configDoc.InnerXml End Function Private Shared Sub AddWatcherNodeIds(ByVal rootNode As XmlElement, _ ByVal watcherNodes As List(Of String)) Dim includeListElement As XmlElement includeListElement = rootNode.OwnerDocument.CreateElement("IncludeList") rootNode.AppendChild(includeListElement) If watcherNodes.Count = 0 Then Throw New InvalidOperationException("No watcher nodes defined.") End If Dim watcherNode As String For Each watcherNode In watcherNodes Dim computerMonitoringObject As MonitoringObject computerMonitoringObject = GetComputerMonitoringObject(watcherNode) If computerMonitoringObject Is Nothing Then Console.WriteLine("watcher nodes not found.") Else AddChildElement(includeListElement, "MonitoringObjectId", computerMonitoringObject.Id.ToString()) End If Next watcherNode End Sub Private Shared Function CreateWatcherComputerList(ByVal watcherNodes As List(Of String)) As String Dim watcherNodesList As String = String.Empty If watcherNodes.Count = 0 Then Throw New InvalidOperationException("No watcher nodes defined.") Else Dim i As Integer For i = 0 To watcherNodes.Count - 1 watcherNodesList += watcherNodes(i) If i < watcherNodes.Count - 2 Then watcherNodesList += " | " End If Next i watcherNodesList = String.Format("({0})", watcherNodesList) End If Return watcherNodesList End Function Private Shared Function GetComputerMonitoringObject(ByVal computerFQDN As String) As MonitoringObject Dim monitoringObjectCriteria As MonitoringObjectCriteria Dim windowsComputerClass As MonitoringClass Dim monitoringObject As MonitoringObject windowsComputerClass = mg.GetMonitoringClass(SystemMonitoringClass.WindowsComputer) monitoringObjectCriteria = New MonitoringObjectCriteria(String.Format("PrincipalName = '{0}'", computerFQDN), windowsComputerClass) Try monitoringObject = mg.GetMonitoringObjects(monitoringObjectCriteria)(0) Return monitoringObject Catch e As ArgumentOutOfRangeException Throw New InvalidOperationException("Could not find the specified monitoring object: " + computerFQDN) End Try End Function End Class 'Program End Namespace 'SDKSamples |
C# | Copy Code |
---|---|
/// <summary> /// URL monitoring example. /// </summary> using System; using System.Collections.ObjectModel; using Microsoft.EnterpriseManagement; using Microsoft.EnterpriseManagement.Common; using Microsoft.EnterpriseManagement.Configuration; using Microsoft.EnterpriseManagement.Monitoring; using System.Xml; using System.Globalization; using System.Collections.Generic; namespace SDKSamples { class Program { private static ManagementGroup mg = null; static void Main(string[] args) { // The URL to monitor. string url = "http://www.microsoft.com"; // One or more fully qualified domain names for the watcher nodes, // which must have the Operations Manager agent installed. // Replace the placeholder name below with a real computer name. List<string> watcherNodes = new List<string>(); watcherNodes.Add("computerName.domain.com"); // The display name of the type that will be created. This will appear in the // authoring space and when you create a state view or alert view. string displayName = "TestURLMonitoring"; // The display name of the Management Pack that the URL monitoring logic // will be added into. string targetMP = "Sample Management Pack"; mg = new ManagementGroup("localhost"); string configDocXML = CreateConfigurationXmlDoc(url, watcherNodes, displayName); ManagementPackTemplate template = GetUrlMonitoringTemplate(); ManagementPack mp = GetManagementPack(targetMP); string folderId = string.Format("WebAppFolder{0}", Guid.NewGuid().ToString("N")); mp.ProcessMonitoringTemplate(template, configDocXML, folderId, displayName, "folder description goes here"); } private static MonitoringTemplate GetUrlMonitoringTemplate() { string criteria = "Name = 'Microsoft.SystemCenter.WebApplication.SingleUrl.Template'"; MonitoringTemplateCriteria templateCriteria = new MonitoringTemplateCriteria(criteria); MonitoringTemplate template = null; template = mg.GetMonitoringTemplates(templateCriteria)[0]; return template; } /// <summary> /// Gets the specified ManagementPack. /// </summary> private static ManagementPack GetManagementPack(string displayName) { string criteria = string.Format("DisplayName = '{0}'", displayName); ManagementPackCriteria mpCriteria = new ManagementPackCriteria(criteria); ManagementPack mp = null; try { mp = mg.GetManagementPacks(mpCriteria)[0]; } catch (ArgumentOutOfRangeException) { throw new InvalidOperationException( "Could not find the specified Management Pack: " + criteria); } return mp; } private static void AddChildElement(XmlElement parentElement, string newElementName, string value) { XmlDocument document = parentElement.OwnerDocument; XmlElement newElement = document.CreateElement(newElementName); newElement.InnerText = value; parentElement.AppendChild(newElement); } private static string CreateConfigurationXmlDoc( string url, List<string> watcherNodes, string displayName ) { XmlDocument configDoc = new XmlDocument(); XmlElement rootNode = configDoc.CreateElement("Configuration"); string typeId; string watcherNodesList; string uniqueKey; configDoc.AppendChild(rootNode); typeId = string.Format(CultureInfo.InvariantCulture, "WebApplication_{0}", Guid.NewGuid().ToString("N")); AddChildElement(rootNode, "TypeId", typeId); AddChildElement(rootNode, "Name", displayName); AddChildElement(rootNode, "Description", ""); AddChildElement(rootNode, "LocaleId", "ENU"); AddChildElement(rootNode, "Verb", "GET"); AddChildElement(rootNode, "URL", url); AddChildElement(rootNode, "Version", "HTTP/1.1"); AddChildElement(rootNode, "PollIntervalInSeconds", "120"); AddWatcherNodeIds(rootNode, watcherNodes); watcherNodesList = CreateWatcherComputerList(watcherNodes); AddChildElement(rootNode, "WatcherComputersList", watcherNodesList); uniqueKey = Guid.NewGuid().ToString(); AddChildElement(rootNode, "UniquenessKey", uniqueKey); AddChildElement(rootNode, "Proxy", ""); AddChildElement(rootNode, "ProxyUserName", ""); AddChildElement(rootNode, "ProxyPassword", ""); AddChildElement(rootNode, "ProxyAuthenticationScheme", "None"); AddChildElement(rootNode, "CredentialUserName", ""); AddChildElement(rootNode, "CredentialPassword", ""); AddChildElement(rootNode, "AuthenticationScheme", "None"); return (configDoc.InnerXml); } private static void AddWatcherNodeIds( XmlElement rootNode, List<string> watcherNodes ) { XmlElement includeListElement; includeListElement = rootNode.OwnerDocument.CreateElement("IncludeList"); rootNode.AppendChild(includeListElement); if (watcherNodes.Count == 0) { throw new InvalidOperationException("No watcher nodes defined."); } foreach (string watcherNode in watcherNodes) { MonitoringObject computerMonitoringObject; computerMonitoringObject = GetComputerMonitoringObject(watcherNode); if (computerMonitoringObject == null) { Console.WriteLine("watcher nodes not found."); } else { AddChildElement(includeListElement, "MonitoringObjectId", computerMonitoringObject.Id.ToString()); } } } private static string CreateWatcherComputerList( List<string> watcherNodes ) { string watcherNodesList = string.Empty; if (watcherNodes.Count == 0) { throw new InvalidOperationException("No watcher nodes defined."); } else { for (int i = 0; i < watcherNodes.Count; i++) { watcherNodesList += watcherNodes[i]; if (i < (watcherNodes.Count - 2)) { watcherNodesList += " | "; } } watcherNodesList = string.Format("({0})", watcherNodesList); } return (watcherNodesList); } private static MonitoringObject GetComputerMonitoringObject( string computerFQDN ) { MonitoringObjectCriteria monitoringObjectCriteria; MonitoringClass windowsComputerClass; MonitoringObject monitoringObject; windowsComputerClass = mg.GetMonitoringClass(SystemMonitoringClass.WindowsComputer); monitoringObjectCriteria = new MonitoringObjectCriteria(string.Format("PrincipalName = '{0}'", computerFQDN), windowsComputerClass); try { monitoringObject = mg.GetMonitoringObjects(monitoringObjectCriteria)[0]; return (monitoringObject); } catch (ArgumentOutOfRangeException) { throw new InvalidOperationException("Could not find the specified monitoring object: " + computerFQDN); } } } } |
Send comments about this topic to Microsoft.