Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Часто встречаю ситуации, когда вроде бы правильно настроенный монитор периодически генерирует некорректные алерты. И происходит такая ситуация только с некоторыми типами мониторов. Например, с мониторами типа «SNMP Probe Monitor», «Timed Script Monitor».
А дело вот в чем:
Как вы знаете, при настройке таких мониторов необходимо обязательно указать значения параметров, при которых объект будет в здоровом состоянии и в состоянии ошибки. Так вот, если вы используете консоль Operations Manager при создании таких типов мониторов, этим параметрам автоматически присваивается значение типа «String» (строковое значение), и изменить это в консоли Operations Manager нельзя. Это не вызывает проблем, если мы действительно сравниваем строковые значения, однако в случаях, когда нужно сравнить числовые значения, могут возникать ложные алерты.
Покажу на примере.
Допустим, нужно контролировать уровень заряда батареи по SNMP у UPS. Для этого мы создаем монитор типа «SNMP Probe Monitor». В качестве контролируемого параметра указываем определенный OID, в качестве 1-го выражения (Error) указываем /DataItem/SnmpVarBinds/SnmpVarBind[1]/Value Less 50, в качестве 2-го выражения (Good) указываем /DataItem/SnmpVarBinds/SnmpVarBind[1]/Value GreaterEqual 50
Если уровень заряда батареи будет 100%, то при такой настройке монитора будет генерироваться алерт, так как сравниваются строковые значения (100 < 50), что конечно же неправильно с точки зрения нужного нам мониторинга.
Для того, чтобы монитор работал правильно, нужно выполнить следующее:
- Экспортировать пакет управления, в котором сохранен монитор;
- Открыть пакет в любом редакторе и найти монитор, который мы настраивали для мониторинга уровня заряда батареи;
- Изменить тип параметров на «Integer»:
Старая версия:
<Monitors>
<UnitMonitor ID="UIGeneratedMonitor8c0a807d32664af08ed14b10d0160171" Accessibility="Public" Enabled="true" Target="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="SystemNetworkManagementLibrary7095380!System.NetworkManagement.SnmpProbe.2SingleEvent2StateMonitorType" ConfirmDelivery="false">
<Category>Custom</Category>
<AlertSettings AlertMessage="UIGeneratedMonitor8c0a807d32664af08ed14b10d0160171_AlertMessageResourceID">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/SnmpVarBinds/SnmpVarBind[1]/Value$</AlertParameter1>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="UIGeneratedOpStateId08d764fad20f4260bbc1d6a5b7de3a92" MonitorTypeStateID="SecondEventRaised" HealthState="Success" />
<OperationalState ID="UIGeneratedOpStateId22579aee95124c5da5c9d11d1c72f3c7" MonitorTypeStateID="FirstEventRaised" HealthState="Error" />
</OperationalStates>
<Configuration>
<FirstInterval>60</FirstInterval>
<FirstIP>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/SNMPAddress$</FirstIP>
<FirstVersion>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/SNMPVersion$</FirstVersion>
<FirstSnmpVarBinds>
<SnmpVarBind>
<OID> .1.3.6.1.4.1.318.1.1.1.2.2.1.0</OID>
<Syntax>0</Syntax>
<Value VariantType="8" />
</SnmpVarBind>
</FirstSnmpVarBinds>
<FirstExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
</ValueExpression>
<Operator>Less</Operator>
<ValueExpression>
<Value Type="String">50</Value>
</ValueExpression>
</SimpleExpression>
</FirstExpression>
<SecondInterval>120</SecondInterval>
<SecondIP>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/SNMPAddress$</SecondIP>
<SecondVersion>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/SNMPVersion$</SecondVersion>
<SecondSnmpVarBinds>
<SnmpVarBind>
<OID>.1.3.6.1.4.1.318.1.1.1.2.2.1.0</OID>
<Syntax>0</Syntax>
<Value VariantType="8" />
</SnmpVarBind>
</SecondSnmpVarBinds>
<SecondExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
</ValueExpression>
<Operator>GreaterEqual</Operator>
<ValueExpression>
<Value Type="String">50</Value>
</ValueExpression>
</SimpleExpression>
</SecondExpression>
<NoOfRetries>3</NoOfRetries>
<Timeout>500</Timeout>
<Port>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/PortNumber$</Port>
</Configuration>
</UnitMonitor>
Новая версия:
<Monitors>
<UnitMonitor ID="UIGeneratedMonitor8c0a807d32664af08ed14b10d0160171" Accessibility="Public" Enabled="true" Target="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="SystemNetworkManagementLibrary7095380!System.NetworkManagement.SnmpProbe.2SingleEvent2StateMonitorType" ConfirmDelivery="false">
<Category>Custom</Category>
<AlertSettings AlertMessage="UIGeneratedMonitor8c0a807d32664af08ed14b10d0160171_AlertMessageResourceID">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/SnmpVarBinds/SnmpVarBind[1]/Value$</AlertParameter1>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="UIGeneratedOpStateId08d764fad20f4260bbc1d6a5b7de3a92" MonitorTypeStateID="SecondEventRaised" HealthState="Success" />
<OperationalState ID="UIGeneratedOpStateId22579aee95124c5da5c9d11d1c72f3c7" MonitorTypeStateID="FirstEventRaised" HealthState="Error" />
</OperationalStates>
<Configuration>
<FirstInterval>60</FirstInterval>
<FirstIP>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/SNMPAddress$</FirstIP>
<FirstVersion>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/SNMPVersion$</FirstVersion>
<FirstSnmpVarBinds>
<SnmpVarBind>
<OID>.1.3.6.1.4.1.318.1.1.1.2.2.1.0</OID>
<Syntax>0</Syntax>
<Value VariantType="8" />
</SnmpVarBind>
</FirstSnmpVarBinds>
<FirstExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
</ValueExpression>
<Operator>Less</Operator>
<ValueExpression>
<Value Type="Integer">50</Value>
</ValueExpression>
</SimpleExpression>
</FirstExpression>
<SecondInterval>120</SecondInterval>
<SecondIP>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/SNMPAddress$</SecondIP>
<SecondVersion>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/SNMPVersion$</SecondVersion>
<SecondSnmpVarBinds>
<SnmpVarBind>
<OID>.1.3.6.1.4.1.318.1.1.1.2.2.1.0</OID>
<Syntax>0</Syntax>
<Value VariantType="8" />
</SnmpVarBind>
</SecondSnmpVarBinds>
<SecondExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
</ValueExpression>
<Operator>GreaterEqual</Operator>
<ValueExpression>
<Value Type="Integer">50</Value>
</ValueExpression>
</SimpleExpression>
</SecondExpression>
<NoOfRetries>3</NoOfRetries>
<Timeout>500</Timeout>
<Port>$Target/Property[Type="SystemNetworkManagementLibrary7095380!System.NetworkManagement.Node"]/PortNumber$</Port>
</Configuration>
</UnitMonitor>
4. Установить исправленный пакет управления;
5. Убедиться, что теперь монитор работает исправно.
Похожая ситуация наблюдается и с типом монитора «Timed Script Monitor». Если в выводе скрипта вы хотите сравнить числа, то обязательно после сохранения монитора в консоли Operations Manager внесите изменения в тип переменных, как это было показано на примере выше.
Команда System Center PFE Russia.


