Discovery
Applies To: Operations Manager 2007 R2, System Center Operations Manager 2007
Defines a workflow that returns discovery data for class and relationship type instances.
Schema Hierarchy
ManagementPack
Monitoring
Discoveries
Discovery
Syntax
<Discovery ID=”DiscoveryID” Comment=”CommentID” Enabled=”True/False” Target=”TargetEntityID” ConfirmDelivery=”True/False” Remotable=”True/False”>
<Category>CategoryName</Category> <DiscoveryTypes>…</DiscoveryTypes>
<DataSource>…</DataSource>
</Discovery>
Attributes and Elements
The following sections describe attributes, child elements, and the parent element of the Discovery element.
Attributes
Attribute | Description |
---|---|
ID |
Required attribute. Represents the identity of the element. To learn how to identify your element in a management pack, see Element Identity and Namespace Conventions. |
Comment |
Optional attribute. Represents commentary by the management pack author. |
Enabled |
Required attribute. Defines whether or not this workflow is by default enabled or disabled. |
Target |
Required attribute. The ID of the targeted class type. |
ConfirmDelivery |
Optional attribute. Defines whether or not the module following the data source module will notify the data source that it has received the data. Applies only to discoveries that contain data source modules with more than one member module. The default value is false. |
Remotable |
Optional attribute. Defines whether or not this workflow will run for agentless monitoring. Default value is true. |
Enabled Attribute Values
Value | Description |
---|---|
True |
The workflow is enabled and will run when its target class has been discovered. |
False |
The workflow is disabled and will not run even when its target class has been discovered. |
Target Attribute Values
Value | Description |
---|---|
The ID of the targeted ClassType element. |
A discovery is targeted at a class type and executes for every instance of that class type. If the class type is not found, the discovery will not run. |
Child Elements
Element | Description |
---|---|
Required element. Represents the category name of the discovery. Always “Discovery”. |
|
Required element. Contains the class and/or relationship type IDs that the discovery will discover. |
|
Required element. Represents an implementation of a data source module type definition that returns discovery data. |
Parent Elements
Element | Description |
---|---|
Contains discovery workflow definitions. |
Remarks
Discovery workflows must always return a System.Discovery.Data data type. Always create a discovery workflow definition to provide discovery data for your defined ClassTypes and RelationshipTypes elements. No other workflow type should return the System.Discovery.Data data type.
Once the discovery data has been committed to the database, any workflows targeted to the newly discovered class or relationship types, such as in a Rule, UnitMonitor, AggregateMonitor, or DependencyMonitor element will begin to run, as long as the those workflows are enabled.
Because discovery workflows are targeted to a specific class type, they usually use the $Target variable notation to pass instance-specific values to its internal DataSource module. To see how to retrieve instance-specific data from the target class type, reference the sample that follows.
The ConfirmDelivery attribute should be set to true only when you find that the workflow is failing to pass data from the data source to the next module in the workflow. This would happen when the amount of data surpasses a predefined system threshold. When it surpasses this threshold, data items will be dropped for performance reasons. However, when ConfirmDelivery is set to true, the data will not be dropped but the next module in the workflow will acknowledge delivery of the data item to the data source module before it receives its next piece of data.
Example
The following XML sample illustrates a discovery that is used to discover instances of the Microsoft.Windows.Client.XP.LogicalDisk
class type. Whenever an instance of the Microsoft.Windows.Client.XP.OperatingSystem
target class type is found, this discovery will run to see whether any logical disks exist. Notice how the properties on the DiscoveryClass element are properties that belong to the base class types of the Microsoft.Windows.Client.XP.LogicalDisk
class type. These base class types are represented here for clarity.
<ClassType ID="Microsoft.Windows.LogicalDevice" Base="System!System.LogicalHardware" Accessibility="Public" Hosted="true" Abstract="true">
<Property ID="DeviceID" Type="string" Key="true" />
<Property ID="Name" Type="string" />
<Property ID="Description" Type="string" />
</ClassType>
<ClassType ID="Microsoft.Windows.LogicalDisk" Base="Microsoft.Windows.LogicalDevice" Accessibility="Public" Hosted="true" Abstract="true" />
<ClassType ID="Microsoft.Windows.Client.LogicalDisk" Abstract="true" Accessibility="Public" Base="Windows!Microsoft.Windows.LogicalDisk" Hosted="true" Singleton="false">
<Property ID="FileSystem" Type="string" />
<Property ID="Compressed" Type="string" />
<Property ID="Size" Type="string" />
<Property ID="DriveType" Type="string" />
<Property ID="SupportsDiskQuota" Type="string" />
<Property ID="QuotasDisabled" Type="string" />
<Property ID="SupportsFileBasedCompression" Type="string" />
</ClassType>
<ClassType ID="Microsoft.Windows.Client.XP.LogicalDisk" Abstract="false" Accessibility="Public" Base="WindowsClient!Microsoft.Windows.Client.LogicalDisk" Hosted="true" Singleton="false" />
…
<Discovery ID="Microsoft.Windows.Client.XP.LogicalDisk.Discovery" Enabled="true" Target="Microsoft.Windows.Client.XP.OperatingSystem">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.Windows.Client.XP.LogicalDisk">
<Property TypeID="Windows!Microsoft.Windows.LogicalDevice" PropertyID="DeviceID" />
<Property TypeID="Windows!Microsoft.Windows.LogicalDevice" PropertyID="Name" />
<Property TypeID="Windows!Microsoft.Windows.LogicalDevice" PropertyID="Description" />
<Property TypeID="WindowsClient!Microsoft.Windows.Client.LogicalDisk" PropertyID="FileSystem" />
<Property TypeID="WindowsClient!Microsoft.Windows.Client.LogicalDisk" PropertyID="Compressed" />
<Property TypeID="WindowsClient!Microsoft.Windows.Client.LogicalDisk" PropertyID="Size" />
<Property TypeID="WindowsClient!Microsoft.Windows.Client.LogicalDisk" PropertyID="DriveType" />
<Property TypeID="WindowsClient!Microsoft.Windows.Client.LogicalDisk" PropertyID="SupportsDiskQuota" />
<Property TypeID="WindowsClient!Microsoft.Windows.Client.LogicalDisk" PropertyID="QuotasDisabled" />
<Property TypeID="WindowsClient!Microsoft.Windows.Client.LogicalDisk" PropertyID="SupportsFileBasedCompression" />
</DiscoveryClass>
<DiscoveryRelationship TypeID="Windows!Microsoft.Windows.ComputerHostsLogicalDevice" />
</DiscoveryTypes>
<DataSource ID="DiscoveryDataSource" RunAs="System!System.PrivilegedMonitoringAccount" TypeID="Windows!Microsoft.Windows.WmiProviderWithClassSnapshotDataMapper">
<NameSpace>\\$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$\root\cimv2</NameSpace>
<Query>SELECT * FROM Win32_LogicalDisk WHERE (DriveType=3 or DriveType=6) and FileSystem!=null</Query>
<Frequency>3605</Frequency>
<ClassId>$MPElement[Name="Microsoft.Windows.Client.XP.LogicalDisk"]$</ClassId>
<InstanceSettings>
<Settings>
<Setting>
<Name>$MPElement[Name="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Name>
<Value>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="Windows!Microsoft.Windows.LogicalDevice"]/DeviceID$</Name>
<Value>$Data/Property[@Name='DeviceID']$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="Windows!Microsoft.Windows.LogicalDevice"]/Name$</Name>
<Value>$Data/Property[@Name='Name']$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="Windows!Microsoft.Windows.LogicalDevice"]/Description$</Name>
<Value>$Data/Property[@Name='Description']$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="WindowsClient!Microsoft.Windows.Client.LogicalDisk"]/FileSystem$</Name>
<Value>$Data/Property[@Name='FileSystem']$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="WindowsClient!Microsoft.Windows.Client.LogicalDisk"]/Compressed$</Name>
<Value>$Data/Property[@Name='Compressed']$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="WindowsClient!Microsoft.Windows.Client.LogicalDisk"]/Size$</Name>
<Value>$Data/Property[@Name='Size']$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="WindowsClient!Microsoft.Windows.Client.LogicalDisk"]/DriveType$</Name>
<Value>$Data/Property[@Name='DriveType']$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="WindowsClient!Microsoft.Windows.Client.LogicalDisk"]/SupportsDiskQuota$</Name>
<Value>$Data/Property[@Name='SupportsDiskQuotas']$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="WindowsClient!Microsoft.Windows.Client.LogicalDisk"]/QuotasDisabled$</Name>
<Value>$Data/Property[@Name='QuotasDisabled']$</Value>
</Setting>
<Setting>
<Name>$MPElement[Name="WindowsClient!Microsoft.Windows.Client.LogicalDisk"]/SupportsFileBasedCompression$</Name>
<Value>$Data/Property[@Name='SupportsFileBasedCompression']$</Value>
</Setting>
</Settings>
</InstanceSettings>
</DataSource>
</Discovery>
The following XML sample illustrates a discovery that is used to discover instances of the Microsoft.SystemCenter.ComputerGroupContainsComputer
relationship type. Whenever an instance of the Microsoft.Windows.Client.ComputerGroup
target class type is found, this discovery will run so that it can populate the group with instances of Microsoft.Windows.Client.Computer
. The data source module of type Microsoft.SystemCenter.GroupPopulator returns a System.Discovery.Data element containing the discovered relationship. It will return a relationship object for every client computer it finds and will continue to poll the database looking for any newly deleted or added client computers to add to the group.
<RelationshipType ID="Microsoft.SystemCenter.ComputerGroupContainsComputer" Accessibility="Public" Abstract="false" Base="System!System.Containment">
<Source>Microsoft.SystemCenter.ComputerGroup</Source>
<Target>System!System.Computer</Target>
</RelationshipType>
…
<Discovery ID="Microsoft.Windows.Client.AllClientsComputerGroupDiscovery" Enabled="onEssentialMonitoring" Target="Microsoft.Windows.Client.ComputerGroup" Remotable="true">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryRelationship TypeID="SC!Microsoft.SystemCenter.ComputerGroupContainsComputer" />
</DiscoveryTypes>
<DataSource ID="DiscoveryDataSource" TypeID="SC!Microsoft.SystemCenter.GroupPopulator">
<RuleId>$MPElement$</RuleId>
<GroupInstanceId>$Target/Id$</GroupInstanceId>
<MembershipRules>
<MembershipRule>
<MonitoringClass>$MPElement[Name="Windows!Microsoft.Windows.Client.Computer"]$</MonitoringClass>
<RelationshipClass>$MPElement[Name="SC!Microsoft.SystemCenter.ComputerGroupContainsComputer"]$</RelationshipClass>
</MembershipRule>
</MembershipRules>
</DataSource>
</Discovery>