我开发与SCOM的集成。但我是一个绿色的手。
我创建了管理包XML,它运行正常。
请查看以下管理包:
Not monitored
我已使用SCOM SDK和ImportManagementPack方法安装了此管理包。
我也开发了example中描述的入站连接器。
我可以使用我的连接器发送发现数据,性能指标和事件。它工作正常。
正确创建了监控对象。
但是这些对象有Resource Status
健康状态。
我的主要问题是如何改变健康状况?
我对健康状况的逻辑非常简单:
Ready
(请在屏幕截图和管理包XML中查看此属性)属性等于Success
,则健康状态为Resource Status
。Down
属性等于Error
,则健康状态为Not monitored
。Param(
[array]$ServersToQuery = (hostname),
[datetime]$StartTime = "January 1, 1970"
)
foreach ($Server in $ServersToQuery) {
$LogFilter = @{
LogName = 'Microsoft-Windows-TerminalServices-LocalSessionManager/Operational'
ID = 21, 23, 24, 25
StartTime = $StartTime
}
$AllEntries = Get-WinEvent -FilterHashtable $LogFilter -ComputerName $Server
$AllEntries | Foreach {
$entry = [xml]$_.ToXml()
[array]$Output += New-Object PSObject -Property @{
TimeCreated = $_.TimeCreated
User = $entry.Event.UserData.EventXML.User
IPAddress = $entry.Event.UserData.EventXML.Address
EventID = $entry.Event.System.EventID
ServerName = $Server
}
}
}
$FilteredOutput += $Output | Select TimeCreated, User, ServerName, IPAddress, @{Name='Action';Expression={
if ($_.EventID -eq '21'){"logon"}
if ($_.EventID -eq '22'){"Shell start"}
if ($_.EventID -eq '23'){"logoff"}
if ($_.EventID -eq '24'){"disconnected"}
if ($_.EventID -eq '25'){"reconnection"}
}
}
$Date = (Get-Date -Format s) -replace ":", "."
$FilePath = "$env:USERPROFILE\Desktop\$Date`_RDP_Report.csv"
$FilteredOutput | Sort TimeCreated | Export-Csv $FilePath -NoTypeInformation
Write-host "Writing File: $FilePath" -ForegroundColor Cyan
Write-host "Done!" -ForegroundColor Cyan
。我查看了很多文档(here和here),发现我需要创建监视器,监视器类型,表达式规则来改变健康状态。
我还检查了XML示例here。
但我不明白如何定义我的表达式以及如何向管理包XML文件添加必要的信息。
对我来说,最好的答案是完整的XML示例,其中包含我的逻辑表达式规则的实现。
提前致谢。
答案 0 :(得分:2)
首先让我警告你,这不是通过可发现的类属性监视某些东西的合适方法。 SCOM数据库是在假设的情况下设计的,所有配置属性都是静态的。比如说,磁盘大小或CPU数量并不经常变化。通过这样做,您将导致配置流失。有关详细信息,请参阅Kevin Holman的文章:https://blogs.technet.microsoft.com/kevinholman/2009/10/04/what-is-config-churn/
但是,你仍然可以做到这一点。请参考下面的MP XML。主要思想是制作一个伪造的脚本,在一个Property Bag中打包class属性,然后条件检测可以分析它。
请注意,您无法将显示器设置为"未初始化"陈述明确。仅在以下情况下才会初始化监视器:
监控工作流程可以发送信号以将监视器设置为健康,警告或严重状态,但如果没有信号,则健康状态会保留其最后状态。
另请注意,我使用了2007方案和对齐引用,以及更改了别名。我还没有对它进行过测试,但它编译时没有错误。 ENU现在是一种默认语言。
<ManagementPack ContentReadable="true" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Manifest>
<Identity>
<ID>CloudMonix.ResourceMonitoring</ID>
<Version>1.0.0.6</Version>
</Identity>
<Name>CloudMonix.ResourceMonitoring</Name>
<References>
<Reference Alias="SC">
<ID>Microsoft.SystemCenter.Library</ID>
<Version>6.1.7221.0</Version>
<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
</Reference>
<Reference Alias="Windows">
<ID>Microsoft.Windows.Library</ID>
<Version>6.1.7221.0</Version>
<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
</Reference>
<Reference Alias="Health">
<ID>System.Health.Library</ID>
<Version>6.1.7221.0</Version>
<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
</Reference>
<Reference Alias="System">
<ID>System.Library</ID>
<Version>6.1.7221.0</Version>
<PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
</Reference>
</References>
</Manifest>
<TypeDefinitions>
<EntityTypes>
<ClassTypes>
<ClassType ID="CloudMonix.ResourceMonitoring.Resource" Accessibility="Public" Abstract="false" Base="System!System.Entity" Hosted="false" Singleton="false">
<Property ID="ResourceId" Type="string" Key="true" CaseSensitive="false" MinLength="1" Length="256" />
<Property ID="ResourceType" Type="string" Key="false" CaseSensitive="false" MinLength="1" Length="256" />
<Property ID="ResourceStatus" Type="string" Key="false" CaseSensitive="false" MinLength="1" Length="256" />
<Property ID="ResourceGroups" Type="string" Key="false" CaseSensitive="false" MinLength="1" Length="1024" />
</ClassType>
</ClassTypes>
</EntityTypes>
<ModuleTypes>
<DataSourceModuleType ID="CloudMonix.ResourceMonitoring.ResourceStatus.DataSource" Accessibility="Internal" Batching="false">
<Configuration>
<xsd:element minOccurs="1" name="IntervalSeconds" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
<xsd:element minOccurs="0" name="SyncTime" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
<xsd:element minOccurs="1" name="ResourceStatus" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int" />
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string" />
</OverrideableParameters>
<ModuleImplementation>
<Composite>
<MemberModules>
<DataSource ID="DS_Scheduler" TypeID="System!System.Scheduler">
<Scheduler>
<SimpleReccuringSchedule>
<Interval Unit="Seconds">$Config/IntervalSeconds$</Interval>
<SyncTime>$Config/SyncTime$</SyncTime>
</SimpleReccuringSchedule>
<ExcludeDates />
</Scheduler>
</DataSource>
<ProbeAction ID="PA_PackageData" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagProbe">
<ScriptName>Set-PropertyBagWithValue.ps1</ScriptName>
<ScriptBody>
param($data)
$api = New-Object -comObject 'MOM.ScriptAPI'
$bag = $api.CreatePropertyBag()
$bag.AddValue("ResourceStatus", $data)
$bag
</ScriptBody>
<Parameters>
<Parameter>
<Name>data</Name>
<Value>$Config/ResourceStatus$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>300</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="PA_PackageData">
<Node ID="DS_Scheduler" />
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
</DataSourceModuleType>
</ModuleTypes>
<MonitorTypes>
<UnitMonitorType ID="CloudMonix.ResourceMonitoring.ResourceStatus.MonitorType" Accessibility="Internal">
<MonitorTypeStates>
<MonitorTypeState ID="Ready" NoDetection="false" />
<MonitorTypeState ID="Down" NoDetection="false" />
</MonitorTypeStates>
<Configuration>
<xsd:element minOccurs="1" name="IntervalSeconds" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
<xsd:element minOccurs="0" name="SyncTime" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
<xsd:element minOccurs="1" name="ResourceStatus" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int" />
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string" />
</OverrideableParameters>
<MonitorImplementation>
<MemberModules>
<DataSource ID="DS_ResourceStatus" TypeID="CloudMonix.ResourceMonitoring.ResourceStatus.DataSource">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime>$Config/SyncTime$</SyncTime>
<ResourceStatus>$Config/ResourceStatus$</ResourceStatus>
</DataSource>
<ConditionDetection ID="CD_Ready" TypeID="System!System.ExpressionFilter">
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='ResourceStatus']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Ready</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</ConditionDetection>
<ConditionDetection ID="CD_Down" TypeID="System!System.ExpressionFilter">
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='ResourceStatus']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Down</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</ConditionDetection>
</MemberModules>
<RegularDetections>
<RegularDetection MonitorTypeStateID="Ready">
<Node ID="CD_Ready">
<Node ID="DS_ResourceStatus" />
</Node>
</RegularDetection>
<RegularDetection MonitorTypeStateID="Down">
<Node ID="CD_Down">
<Node ID="DS_ResourceStatus" />
</Node>
</RegularDetection>
</RegularDetections>
</MonitorImplementation>
</UnitMonitorType>
</MonitorTypes>
</TypeDefinitions>
<Monitoring>
<Monitors>
<UnitMonitor ID="CloudMonix.ResourceMonitoring.ResourceStatus.UnitMonitor" Accessibility="Public" Enabled="true" Target="CloudMonix.ResourceMonitoring.Resource" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="CloudMonix.ResourceMonitoring.ResourceStatus.MonitorType" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="CloudMonix.ResourceMonitoring.ResourceStatus.UnitMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Ready" MonitorTypeStateID="Ready" HealthState="Success" />
<OperationalState ID="Down" MonitorTypeStateID="Down" HealthState="Error" />
</OperationalStates>
<Configuration>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime />
<ResourceStatus>$Target/Property[Type="CloudMonix.ResourceMonitoring.Resource"]/ResourceStatus$</ResourceStatus>
</Configuration>
</UnitMonitor>
</Monitors>
</Monitoring>
<Presentation>
<Views>
<View ID="CloudMonix.ResourceMonitoring.MainView" Accessibility="Public" Enabled="true" Target="CloudMonix.ResourceMonitoring.Resource" TypeID="SC!Microsoft.SystemCenter.StateViewType" Visible="true">
<Category>Operations</Category>
<Criteria>
<InMaintenanceMode>false</InMaintenanceMode>
</Criteria>
<Presentation>
<ColumnInfo Index="0" SortIndex="0" Width="100" Grouped="false" Sorted="true" IsSortable="true" Visible="true" SortOrder="Descending">
<Name>State</Name>
<Id>CloudMonix.ResourceMonitoring.Resource</Id>
</ColumnInfo>
<ColumnInfo Index="1" SortIndex="-1" Width="100" Grouped="false" Sorted="false" IsSortable="true" Visible="true" SortOrder="Ascending">
<Name>Resource Type</Name>
<Id>ResourceType</Id>
</ColumnInfo>
<ColumnInfo Index="2" SortIndex="-1" Width="100" Grouped="false" Sorted="false" IsSortable="true" Visible="true" SortOrder="Ascending">
<Name>Resource Name</Name>
<Id>DisplayName</Id>
</ColumnInfo>
<ColumnInfo Index="3" SortIndex="-1" Width="100" Grouped="false" Sorted="false" IsSortable="true" Visible="true" SortOrder="Ascending">
<Name>Resource Status</Name>
<Id>ResourceStatus</Id>
</ColumnInfo>
<ColumnInfo Index="4" SortIndex="-1" Width="100" Grouped="false" Sorted="false" IsSortable="true" Visible="true" SortOrder="Ascending">
<Name>Resource Groups</Name>
<Id>ResourceGroups</Id>
</ColumnInfo>
</Presentation>
<Target />
</View>
</Views>
<Folders>
<Folder ID="CloudMonix.ResourceMonitoring.MainFolder" Accessibility="Public" ParentFolder="SC!Microsoft.SystemCenter.Monitoring.ViewFolder.Root" />
</Folders>
<FolderItems>
<FolderItem ElementID="CloudMonix.ResourceMonitoring.MainView" Folder="CloudMonix.ResourceMonitoring.MainFolder" />
</FolderItems>
<StringResources>
<StringResource ID="CloudMonix.ResourceMonitoring.ResourceStatus.UnitMonitor.AlertMessage" />
</StringResources>
</Presentation>
<LanguagePacks>
<LanguagePack ID="ENU" IsDefault="true">
<DisplayStrings>
<DisplayString ElementID="CloudMonix.ResourceMonitoring">
<Name>CloudMonix Resource Monitoring</Name>
<Description></Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.MainFolder">
<Name>CloudMonix Folder</Name>
<Description></Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.MainView">
<Name>CloudMonix Resource View</Name>
<Description></Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.Resource">
<Name>CloudMonix Resource</Name>
<Description></Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.Resource" SubElementID="ResourceId">
<Name>Resource Id</Name>
<Description></Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.Resource" SubElementID="ResourceType">
<Name>Resource Type</Name>
<Description></Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.Resource" SubElementID="ResourceStatus">
<Name>Resource Status</Name>
<Description></Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.Resource" SubElementID="ResourceGroups">
<Name>Resource Groups</Name>
<Description></Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.ResourceStatus.UnitMonitor">
<Name>Resource Status Unit Monitor</Name>
<Description>Resource Status Unit Monitor</Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.ResourceStatus.UnitMonitor.AlertMessage">
<Name>Alert</Name>
<Description>Alert</Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.ResourceStatus.UnitMonitor" SubElementID="Ready">
<Name>Ready</Name>
<Description>Ready</Description>
</DisplayString>
<DisplayString ElementID="CloudMonix.ResourceMonitoring.ResourceStatus.UnitMonitor" SubElementID="Down">
<Name>Down</Name>
<Description>Down</Description>
</DisplayString>
</DisplayStrings>
<KnowledgeArticles></KnowledgeArticles>
</LanguagePack>
</LanguagePacks>
</ManagementPack>