Discovery to move APM applications into the monitoring group

Microsoft.JEE.APM.GroupMembership.Discovery (Discovery)

PowerShell script-based relationship discovery to place APM applications in the monitoring group.

Knowledge Base article:

Summary

The Java APM Group Membership Discovery places discovered APM applications into the APM monitoring group.

Items within the group are targeted by rules and monitors to collect performance information.

The discovery uses a PowerShell script to create a relationship between the APM applications and the monitoring group.

Element properties:

TargetMicrosoft.JEE.Apm.Application
EnabledTrue
Frequency14400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedPowerShell.DiscoveryProvider Default

Source Code:

<Discovery ID="Microsoft.JEE.APM.GroupMembership.Discovery" Target="Microsoft.JEE.Apm.Application" Enabled="true" Remotable="true">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.JEE.Apm.Application"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>Relationship.ps1</ScriptName>
<ScriptBody><Script>##########################################################################################
# &lt;copyright file="Relationship.ps1" company="Microsoft"&gt;
# Copyright (c) Microsoft Corporation. All rights reserved.
# &lt;/copyright&gt;
# &lt;summary&gt;Script to create the relationship instance between an APM application and the
# group against which rules and monitors will run.
# &lt;/summary&gt;
##########################################################################################

#
# The Enable parameter is used to control whether the relationship is created or destroyed
#
param($EntityId, $TargetInstanceId, $Enable, $classid, $grpClassid, $appServerInstanceId, $appServerHostName, $appName, $appType, $appObjectName)
$api = New-Object -comObject 'Mom.ScriptAPI'

Import-Module OperationsManager

$discoveryData = $api.CreateDiscoveryData(0, $EntityId, $TargetInstanceId)

if($Enable -ne "0")
{
$srcInstance = $discoveryData.CreateClassInstance($grpClassid)

$tgtInstance = $discoveryData.CreateClassInstance($classid)
$tgtInstanceid = $tgtInstance.id
$tgtInstance.AddProperty('$MPElement[Name="JEE!Microsoft.JEE.ApplicationServer.Instance"]/Id$', $appServerInstanceId)
$tgtInstance.AddProperty('$MPElement[Name="JEE!Microsoft.JEE.ApplicationServer.Instance"]/HostName$', $appServerHostName)
$tgtInstance.AddProperty('$MPElement[Name="JEE!Microsoft.JEE.Application"]/ApplicationName$', $appName)
$tgtInstance.AddProperty('$MPElement[Name="JEE!Microsoft.JEE.Application"]/j2eeType$', $appType)
$tgtInstance.AddProperty('$MPElement[Name="JEE!Microsoft.JEE.Application"]/ObjectName$', $appObjectName)

$rel = '$MPElement[Name="Microsoft.JEE.Apm.GroupContainsApplication"]$'
$oRel = $discoveryData.CreateRelationshipInstance('$MPElement[Name="Microsoft.JEE.Apm.GroupContainsApplication"]$')
$oRelid = $oRel.id
$oRel.Source = $srcInstance
$oRel.Target = $tgtInstance

$discoveryData.AddInstance($oRel)
}
$discoveryData
</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>EntityId</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>TargetInstanceId</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>Enable</Name>
<Value>1</Value>
</Parameter>
<Parameter>
<Name>classid</Name>
<Value>$MPElement[Name="Microsoft.JEE.Apm.Application"]$</Value>
</Parameter>
<Parameter>
<Name>grpClassid</Name>
<Value>$MPElement[Name="Microsoft.SystemCenter.Apm.Jee.Monitored.Group"]$</Value>
</Parameter>
<Parameter>
<Name>appServerInstanceId</Name>
<Value>$Target/Host/Host/Property[Type="JEE!Microsoft.JEE.ApplicationServer.Instance"]/Id$</Value>
</Parameter>
<Parameter>
<Name>appServerHostName</Name>
<Value>$Target/Host/Host/Property[Type="JEE!Microsoft.JEE.ApplicationServer.Instance"]/HostName$</Value>
</Parameter>
<Parameter>
<Name>appName</Name>
<Value>$Target/Property[Type="JEE!Microsoft.JEE.Application"]/ApplicationName$</Value>
</Parameter>
<Parameter>
<Name>appType</Name>
<Value>$Target/Property[Type="JEE!Microsoft.JEE.Application"]/j2eeType$</Value>
</Parameter>
<Parameter>
<Name>appObjectName</Name>
<Value>$Target/Property[Type="JEE!Microsoft.JEE.Application"]/ObjectName$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>300</TimeoutSeconds>
<StrictErrorHandling>false</StrictErrorHandling>
</DataSource>
</Discovery>