You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SCOM中如何为CheckNTServiceStateMonitorType类型UnitMonitor动态设置AlertSeverity?

动态设置SCOM UnitMonitor的AlertSeverity基于目标类属性

好问题!在SCOM里直接在<AlertSettings>节点中使用$Target/Property[...]$表达式动态绑定AlertSeverity确实走不通——这个配置是监视器初始化时就固化的,不支持运行时动态解析目标属性。不过有两种靠谱的方案能实现你的需求:

方案一:利用组+监视器替代(适合简单场景)

这种方法不需要修改监视器类型,通过分组和替代来实现按属性值分配不同警报严重度:

  • 第一步:创建动态组,根据你的MyMonitoredClass类的AlertSeverity属性值分组。比如分别创建“高严重度服务组”“中严重度服务组”“低严重度服务组”,组的成员规则设置为:
    <Expression>
      <SimpleExpression>
        <ValueExpression>
          <Property>$Target/Property[MyMonitoredClass]/AlertSeverity$</Property>
        </ValueExpression>
        <Operator>Equal</Operator>
        <ValueExpression>
          <Value>High</Value>
        </ValueExpression>
      </SimpleExpression>
    </Expression>
    
  • 第二步:针对每个组,对你的CheckNTServiceStateMonitorType监视器创建替代,在替代中设置对应的AlertSeverity(比如给高严重度组设为Critical,中组设为Warning,低组设为Information)。

这种方法的优势是配置简单,不需要编写自定义XML,适合属性值选项较少的场景。

方案二:自定义监视器类型(适合复杂/灵活场景)

如果你的属性值有更多变化,或者需要更精细的控制,可以通过包装内置的CheckNTServiceStateMonitorType来实现动态严重度:

  1. 创建一个自定义监视器类型,在其中引用CheckNTServiceStateMonitorType作为数据源,然后在警报写入逻辑中动态读取目标属性来设置严重度。
  2. 关键是在自定义类型的<WriteActions>里,使用表达式映射目标属性到警报Severity值(SCOM中Severity的枚举值:0=Information,1=Warning,2=Critical)。示例XML片段如下:
    <MonitorType ID="MyCustomServiceMonitorType" Accessibility="Internal">
      <MonitorImplementation>
        <MemberModules>
          <!-- 引用内置的服务状态监视器作为数据源 -->
          <DataSource ID="ServiceState" TypeID="CheckNTServiceStateMonitorType">
            <!-- 这里填写原监视器的配置参数 -->
            <ComputerName>$Target/Host/Property[Windows!Microsoft.Windows.Computer]/NetworkName$</ComputerName>
            <ServiceName>$Target/Property[MyMonitoredClass]/ServiceName$</ServiceName>
            <!-- 其他参数... -->
          </DataSource>
          <!-- 自定义警报写入动作,动态设置Severity -->
          <WriteAction ID="Alert" TypeID="Health!System.Health.GenerateAlert">
            <Priority>1</Priority>
            <Severity>
              <ValueExpression>
                <Switch>
                  <Expression>
                    <Property>$Target/Property[MyMonitoredClass]/AlertSeverity$</Property>
                  </Expression>
                  <Case Value="High">2</Case>
                  <Case Value="Medium">1</Case>
                  <Case Value="Low">0</Case>
                  <DefaultValue>1</DefaultValue>
                </Switch>
              </ValueExpression>
            </Severity>
            <AlertMessageId>$MPElement[Name="MyAlertMessage"]$</AlertMessageId>
            <!-- 其他警报配置... -->
          </WriteAction>
        </MemberModules>
        <RegularDetections>
          <RegularDetection MonitorTypeStateID="NotRunning">
            <Node ID="Alert"/>
          </RegularDetection>
        </RegularDetections>
      </MonitorImplementation>
    </MonitorType>
    
  3. 然后基于这个自定义类型创建UnitMonitor,就能实现根据目标类属性动态调整AlertSeverity了。

注意事项

  • 方案一的替代会覆盖原监视器的AlertSeverity配置,要确保组的成员规则准确,避免遗漏或错误匹配。
  • 方案二需要熟悉SCOM的监视器类型XML结构,测试时要验证属性映射和Severity的对应关系是否正确。

内容的提问来源于stack exchange,提问作者mh133

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:48:33