none
SNMP GET Replace string value RRS feed

  • Вопрос

  • Коллеги, доброго дня всем! Имеется следующая проблема, есть железка с которой необходимо получать GET запросом температуру, вообщем все как обычно, но проблема заключается в том что сама железка возвращает значение температуры не просто в виде цифр, а строку "цифры + единица измерения" выглядит это так: "33.000 Celsius"

    в результате чего при попытке создания правила или монитора получаем следующую ошибку:

    Модулю не удалось преобразовать параметр в двойное значение.

    Исходный параметр: "$Data/SnmpVarBinds/SnmpVarBind[1]/Value$"

    Параметр после замены $Data: "33.000 Celsius"

    каким образом можно научить "обрезать" получаемое значение от букв?

    предполагаю что есть какой то модуль который возможно нужно подключить в MP к данному правилу\монитору, и в нем указать параметры замены?

    27 июля 2017 г. 9:15

Ответы

  • Один из простых способов это после получения данных типа System.SnmpData добавить probe action модуль Microsoft.Windows.PowerShellPropertyBagProbe и передать в его параметры требуемый параметр SnmpVarBind. Далее в скрипте сделать нужные преобразования и уже обработанные данные отправить в ExpressionFilter.
    2 августа 2017 г. 15:43

Все ответы

  • Привет,

    К сожалению не могу дать точното ответа на поставленный вопрос, посмотрите статью внизу как пример и попробуйте настройть мониторинг по ней, возможно тогда значение будет выведно как Вы хотите:

    Monitor UPS temperature using SCOM and SNMP


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий. Не забывайте помечать сообщения как ответы и полезные, если они Вам помогли.

    28 июля 2017 г. 8:47
    Модератор
  • К сожалению даже в данной статье предусматривается что устройство (а в том случае UPS) выдает температуру без "лишних" символов. Поэтому такой вариант хоть и правильный, но в данном случае он неработоспособен, необходима его доработка.
    31 июля 2017 г. 7:59
  • Один из простых способов это после получения данных типа System.SnmpData добавить probe action модуль Microsoft.Windows.PowerShellPropertyBagProbe и передать в его параметры требуемый параметр SnmpVarBind. Далее в скрипте сделать нужные преобразования и уже обработанные данные отправить в ExpressionFilter.
    2 августа 2017 г. 15:43
  • Спасибо, а можно кинуть ссылкой как правильно подключаются модули к MP ?

    просто не приходилось ещё пока настолько глубоко влезать в настройку ОМ

    на всякий случай кусок моего МП с теми самыми правилами:

    <Rules>
          <Rule ID="MomUIGeneratedRule1d782b5922694abe8500ec81473b6d8c" Enabled="false" Target="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
            <Category>PerformanceCollection</Category>
            <DataSources>
              <DataSource ID="DS" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpPerformanceDataSource">
                <Interval>300</Interval>
                <NoOfRetries>3</NoOfRetries>
                <Timeout>500</Timeout>
                <Port>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/PortNumber$</Port>
                <IP>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPAddress$</IP>
                <Version>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPVersion$</Version>
                <SnmpVarBinds>
                  <SnmpVarBind>
                    <OID>1.3.6.1.4.1.2011.2.82.1.82.4.1.2001.1.2.13.67.80.85.49.32.67.111.114.101.32.82.101.109</OID>
                    <Syntax>0</Syntax>
                    <Value VariantType="8" />
                  </SnmpVarBind>
                </SnmpVarBinds>
                <ObjectName>Snmp Performance Object</ObjectName>
                <CounterName>$Data/SnmpVarBinds/SnmpVarBind[1]/OID$</CounterName>
              </DataSource>
            </DataSources>
            <WriteActions>
              <WriteAction ID="WriteToDB" TypeID="SystemCenter!Microsoft.SystemCenter.CollectPerformanceData" />
              <WriteAction ID="WriteToDW" TypeID="SCDW!Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData" />
            </WriteActions>
          </Rule>

    22 августа 2017 г. 11:18
  • Один из простых способов

    1. Добавляете reference alias Perf на библиотеку System.Performance.Library
    2. Создаете свой DataSouce, аналогичный тому что используете и добавляете ProbeAction модуль с powershell. Вместо 'NewValue' выполняете нужные преобразования.
    <DataSourceModuleType ID="System.NetworkManagement.SnmpPerformanceDataSourceReplace" Accessibility="Public">
            <Configuration>
              <IncludeSchemaTypes>
                <SchemaType>System!System.ParamListSchema</SchemaType>
                <SchemaType>System!System.ExpressionEvaluatorSchema</SchemaType>
                <SchemaType>SSL!System.SnmpVarBindsSchema</SchemaType>
              </IncludeSchemaTypes>
              <xsd:element name="Interval" type="xsd:integer" />
              <xsd:element name="NoOfRetries" type="xsd:unsignedInt" default="3" />
              <xsd:element name="Timeout " type="xsd:unsignedInt" default="500" />
              <xsd:element name="Port" type="xsd:unsignedInt" default="161" />
              <xsd:element name="IP" type="xsd:string" />
              <xsd:element minOccurs="0" maxOccurs="1" name="Version" type="xsd:string" />
              <xsd:element name="SnmpVarBinds" type="SnmpVarBindsType" />
              <xsd:element minOccurs="1" name="ObjectName" type="xsd:string" />
              <xsd:element minOccurs="1" name="CounterName" type="xsd:string" />
            </Configuration>
            <OverrideableParameters>
              <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
              <OverrideableParameter ID="NoOfRetries" Selector="$Config/NoOfRetries$" ParameterType="int" />
              <OverrideableParameter ID="Timeout" Selector="$Config/Timeout$" ParameterType="int" />
              <OverrideableParameter ID="Port" Selector="$Config/Port$" ParameterType="int" />
            </OverrideableParameters>
            <ModuleImplementation>
              <Composite>
                <MemberModules>
                  <DataSource ID="SnmpDataSource" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpDataSource">
                    <Scheduler>
                      <SimpleReccuringSchedule>
                        <Interval Unit="Seconds">$Config/Interval$</Interval>
                      </SimpleReccuringSchedule>
                      <ExcludeDates />
                    </Scheduler>
                    <NoOfRetries>$Config/NoOfRetries$</NoOfRetries>
                    <Timeout>$Config/Timeout$</Timeout>
                    <Port>$Config/Port$</Port>
                    <SNMPv3UserName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/UserName$</SNMPv3UserName>
                    <SNMPv3AuthProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationProtocol$</SNMPv3AuthProtocol>
                    <SNMPv3AuthPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationKey$</SNMPv3AuthPassword>
                    <SNMPv3PrivProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyProtocol$</SNMPv3PrivProtocol>
                    <SNMPv3PrivPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyKey$</SNMPv3PrivPassword>
                    <SNMPv3ContextName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/ContextName$</SNMPv3ContextName>
                    <IP>$Config/IP$</IP>
                    <CommunityString>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Snmp.MonitoringAccount"]/CommunityString$</CommunityString>
                    <Version>$Config/Version$</Version>
                    <SnmpVarBinds>$Config/SnmpVarBinds$</SnmpVarBinds>
                    <OutputOnError>false</OutputOnError>
                  </DataSource>
                  <ProbeAction ID="PSScript" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe">
                    <ScriptName>ReplaceValue.ps1</ScriptName>
                    <ScriptBody>
    <![CDATA[Param($Value)
    $oAPI = new-object -comObject "MOM.ScriptAPI"
    $Value='NewValue'
    $pb = $oAPI.CreatePropertyBag()
    $pb.AddValue("ReplacedValue",$Value)
    $pb
    ]]>
    		</ScriptBody>
                    <SnapIns />
                    <Parameters>
                      <Parameter>
                        <Name>Value</Name>
                        <Value>$Data/SnmpVarBinds/SnmpVarBind[1]/Value$</Value>
                      </Parameter>
                    </Parameters>
                    <TimeoutSeconds>60</TimeoutSeconds>
                  </ProbeAction>
                  <ConditionDetection ID="Mapper" TypeID="Perf!System.Performance.DataGenericMapper">
                    <ObjectName>$Config/ObjectName$</ObjectName>
                    <CounterName>$Config/CounterName$</CounterName>
                    <InstanceName />
                    <Value>$Data/Property[@Name='ReplacedValue']$</Value>
                  </ConditionDetection>
                </MemberModules>
                <Composition>
                  <Node ID="Mapper">
                    <Node ID="PSScript">
                    <Node ID="SnmpDataSource" />
                    </Node>
                  </Node>
                </Composition>
              </Composite>
            </ModuleImplementation>
            <OutputType>Perf!System.Performance.Data</OutputType>
          </DataSourceModuleType>
    3. Меняете DataSource у правила на вновь созданный
    13 сентября 2017 г. 21:58
  • добавил алиас и DataSource, а так же заменил в правиле DataSource ID (указал) ="SnmpDataSource"

    но во время импорта вылезала ошибка:

    Cannot resolve identifier SSL!System.SnmpVarBindsSchema in the context of management pack 

    Unknown alias: SSL

    поправил SSL на Snmp и добавил тоже к алиасам, вроде дало импортировать нормально.

    но потом аналогично ругнулся на:

    Cannot resolve identifier Windows!Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe

    Unknown alias: Windows

    добавил - Microsoft.Windows.Library, в итоге все встало нормально, но похоже что то я делаю не так, т.к. после импорта, в логах по прежнему вижу:

    Module was unable to convert parameter to a double value 
    Original parameter: '$Data/SnmpVarBinds/SnmpVarBind[1]/Value$' 
    Parameter after $Data replacement: '45.000 Celsius' 
    Error: 0x80020005 
    Details: Type mismatch.

    вот как выглядит мой МП (его основная часть)

    <?xml version="1.0" encoding="utf-8"?><ManagementPack ContentReadable="true" SchemaVersion="2.0" OriginalSchemaVersion="1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <Manifest>
        <Identity>
          <ID>BladeHosts</ID>
          <Version>1.0.0.0</Version>
        </Identity>
        <Name>_Blade_Hosts</Name>
        <References>
    	  <Reference Alias="Windows">
            <ID>Microsoft.Windows.Library</ID>
            <Version>7.5.8501.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="MicrosoftSystemCenterNetworkDeviceLibrary71102260">
            <ID>Microsoft.SystemCenter.NetworkDevice.Library</ID>
            <Version>7.1.10226.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="SCDW">
            <ID>Microsoft.SystemCenter.DataWarehouse.Library</ID>
            <Version>7.1.10226.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="SystemNetworkManagementLibrary71102260">
            <ID>System.NetworkManagement.Library</ID>
            <Version>7.1.10226.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="MicrosoftSystemCenterInstanceGroupLibrary7585010">
            <ID>Microsoft.SystemCenter.InstanceGroup.Library</ID>
            <Version>7.5.8501.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="System">
            <ID>System.Library</ID>
            <Version>7.5.8501.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="SystemCenter">
            <ID>Microsoft.SystemCenter.Library</ID>
            <Version>7.0.8433.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="Health">
            <ID>System.Health.Library</ID>
            <Version>7.0.8433.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
    	  <Reference Alias="Perf">
            <ID>System.Performance.Library</ID>
            <Version>7.0.8433.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
    	   <Reference Alias="Snmp">
            <ID>System.Snmp.Library</ID>
            <Version>7.0.8427.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
        </References>
      </Manifest>
      <TypeDefinitions>
        <EntityTypes>
          <ClassTypes>
            <ClassType ID="UINameSpaceeeb5025fbd254633900c0cd969bd4e0f.Group" Accessibility="Public" Abstract="false" Base="MicrosoftSystemCenterInstanceGroupLibrary7585010!Microsoft.SystemCenter.InstanceGroup" Hosted="false" Singleton="true" Extension="false" />
          </ClassTypes>
        </EntityTypes>
      <ModuleTypes>
    		<DataSourceModuleType ID="System.NetworkManagement.SnmpPerformanceDataSourceReplace" Accessibility="Public">
            <Configuration>
              <IncludeSchemaTypes>
                <SchemaType>System!System.ParamListSchema</SchemaType>
                <SchemaType>System!System.ExpressionEvaluatorSchema</SchemaType>
                <SchemaType>Snmp!System.SnmpVarBindsSchema</SchemaType>
              </IncludeSchemaTypes>
              <xsd:element name="Interval" type="xsd:integer" />
              <xsd:element name="NoOfRetries" type="xsd:unsignedInt" default="3" />
              <xsd:element name="Timeout " type="xsd:unsignedInt" default="500" />
              <xsd:element name="Port" type="xsd:unsignedInt" default="161" />
              <xsd:element name="IP" type="xsd:string" />
              <xsd:element minOccurs="0" maxOccurs="1" name="Version" type="xsd:string" />
              <xsd:element name="SnmpVarBinds" type="SnmpVarBindsType" />
              <xsd:element minOccurs="1" name="ObjectName" type="xsd:string" />
              <xsd:element minOccurs="1" name="CounterName" type="xsd:string" />
            </Configuration>
            <OverrideableParameters>
              <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
              <OverrideableParameter ID="NoOfRetries" Selector="$Config/NoOfRetries$" ParameterType="int" />
              <OverrideableParameter ID="Timeout" Selector="$Config/Timeout$" ParameterType="int" />
              <OverrideableParameter ID="Port" Selector="$Config/Port$" ParameterType="int" />
            </OverrideableParameters>
            <ModuleImplementation>
              <Composite>
                <MemberModules>
                  <DataSource ID="SnmpDataSource" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpDataSource">
                    <Scheduler>
                      <SimpleReccuringSchedule>
                        <Interval Unit="Seconds">$Config/Interval$</Interval>
                      </SimpleReccuringSchedule>
                      <ExcludeDates />
                    </Scheduler>
                    <NoOfRetries>$Config/NoOfRetries$</NoOfRetries>
                    <Timeout>$Config/Timeout$</Timeout>
                    <Port>$Config/Port$</Port>
                    <SNMPv3UserName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/UserName$</SNMPv3UserName>
                    <SNMPv3AuthProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationProtocol$</SNMPv3AuthProtocol>
                    <SNMPv3AuthPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationKey$</SNMPv3AuthPassword>
                    <SNMPv3PrivProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyProtocol$</SNMPv3PrivProtocol>
                    <SNMPv3PrivPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyKey$</SNMPv3PrivPassword>
                    <SNMPv3ContextName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/ContextName$</SNMPv3ContextName>
                    <IP>$Config/IP$</IP>
                    <CommunityString>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Snmp.MonitoringAccount"]/CommunityString$</CommunityString>
                    <Version>$Config/Version$</Version>
                    <SnmpVarBinds>$Config/SnmpVarBinds$</SnmpVarBinds>
                    <OutputOnError>false</OutputOnError>
                  </DataSource>
                  <ProbeAction ID="PSScript" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe">
                    <ScriptName>ReplaceValue.ps1</ScriptName>
                    <ScriptBody>
    <![CDATA[Param($Value)
    $oAPI = new-object -comObject "MOM.ScriptAPI"
    $Value='$Data/SnmpVarBinds/SnmpVarBind[1]/Value$' -replace ".000 Celsius"
    $pb = $oAPI.CreatePropertyBag()
    $pb.AddValue("ReplacedValue",$Value)
    $pb
    ]]>
    		</ScriptBody>
                    <SnapIns />
                    <Parameters>
                      <Parameter>
                        <Name>Value</Name>
                        <Value>$Data/SnmpVarBinds/SnmpVarBind[1]/Value$</Value>
                      </Parameter>
                    </Parameters>
                    <TimeoutSeconds>60</TimeoutSeconds>
                  </ProbeAction>
                  <ConditionDetection ID="Mapper" TypeID="Perf!System.Performance.DataGenericMapper">
                    <ObjectName>$Config/ObjectName$</ObjectName>
                    <CounterName>$Config/CounterName$</CounterName>
                    <InstanceName />
                    <Value>$Data/Property[@Name='ReplacedValue']$</Value>
                  </ConditionDetection>
                </MemberModules>
                <Composition>
                  <Node ID="Mapper">
                    <Node ID="PSScript">
                    <Node ID="SnmpDataSource" />
                    </Node>
                  </Node>
                </Composition>
              </Composite>
            </ModuleImplementation>
            <OutputType>Perf!System.Performance.Data</OutputType>
    	</DataSourceModuleType>
    	</ModuleTypes>
      </TypeDefinitions>
      <Monitoring>
        <Discoveries>
          <Discovery ID="UINameSpaceeeb5025fbd254633900c0cd969bd4e0f.Group.DiscoveryRule" Enabled="true" Target="UINameSpaceeeb5025fbd254633900c0cd969bd4e0f.Group" ConfirmDelivery="false" Remotable="true" Priority="Normal">
            <Category>Discovery</Category>
            <DiscoveryTypes>
              <DiscoveryRelationship TypeID="MicrosoftSystemCenterInstanceGroupLibrary7585010!Microsoft.SystemCenter.InstanceGroupContainsEntities" />
            </DiscoveryTypes>
            <DataSource ID="GroupPopulationDataSource" TypeID="SystemCenter!Microsoft.SystemCenter.GroupPopulator">
              <RuleId>$MPElement$</RuleId>
              <GroupInstanceId>$MPElement[Name="UINameSpaceeeb5025fbd254633900c0cd969bd4e0f.Group"]$</GroupInstanceId>
              <MembershipRules>
                <MembershipRule>
                  <MonitoringClass>$MPElement[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]$</MonitoringClass>
                  <RelationshipClass>$MPElement[Name="MicrosoftSystemCenterInstanceGroupLibrary7585010!Microsoft.SystemCenter.InstanceGroupContainsEntities"]$</RelationshipClass>
                  <IncludeList>
                    <MonitoringObjectId>47ab0e4c-f072-2f63-07c5-f6708e6e7836</MonitoringObjectId>
                    <MonitoringObjectId>0fc90ac3-86ea-4b8f-b14b-56524c99cb56</MonitoringObjectId>
                  </IncludeList>
                </MembershipRule>
              </MembershipRules>
            </DataSource>
          </Discovery>
        </Discoveries>
        <Rules>
          <Rule ID="MomUIGeneratedRule1d782b5922694abe8500ec81473b6d8c" Enabled="false" Target="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
            <Category>PerformanceCollection</Category>
            <DataSources>
              <DataSource ID="SnmpDataSource" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpPerformanceDataSource">
                <Interval>300</Interval>
                <NoOfRetries>3</NoOfRetries>
                <Timeout>500</Timeout>
                <Port>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/PortNumber$</Port>
                <IP>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPAddress$</IP>
                <Version>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPVersion$</Version>
                <SnmpVarBinds>
                  <SnmpVarBind>
                    <OID>1.3.6.1.4.1.2011.2.82.1.82.4.1.2001.1.2.13.67.80.85.49.32.67.111.114.101.32.82.101.109</OID>
                    <Syntax>0</Syntax>
                    <Value VariantType="8" />
                  </SnmpVarBind>
                </SnmpVarBinds>
                <ObjectName>Snmp Performance Object</ObjectName>
                <CounterName>$Data/SnmpVarBinds/SnmpVarBind[1]/OID$</CounterName>
              </DataSource>
            </DataSources>
            <WriteActions>
              <WriteAction ID="WriteToDB" TypeID="SystemCenter!Microsoft.SystemCenter.CollectPerformanceData" />
              <WriteAction ID="WriteToDW" TypeID="SCDW!Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData" />
            </WriteActions>
          </Rule>

    14 сентября 2017 г. 12:41
  • 1. Да reference alias надо добавить

    2. Поменяйте CounterName в правиле на какое нибудь имя

    3. в скрипте, переменная $Value уже должна иметь разрешенное значение типа "33.000 Celsius"

    т.е имелось ввиду сделать что то вроде этого 

    $value=$value.Substring(0,2)

    отсюда $value будет равно 33, что примерно Вам и требуется

    14 сентября 2017 г. 12:53
  • что то не совсем понимаю что делаю не так, какое можно добавить имя в CounterName в правиле?  Прописал там Temp, что бы понять что измениться - ничего не поменялось, понимаю что там должно быть имя параметра.

    в скрипте уже перепробовал все варианты, в итоге последний был предложенный вами, но результат все равно один.

    Module was unable to convert parameter to a double value 
    Original parameter: '$Data/SnmpVarBinds/SnmpVarBind[1]/Value$' 
    Parameter after $Data replacement: '48.000 Celsius' 
    Error: 0x80020005 
    Details: Type mismatch.

    снова прилагаю основную часть моего МП

        <References>
          <Reference Alias="Windows">
            <ID>Microsoft.Windows.Library</ID>
            <Version>7.5.8501.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="MicrosoftSystemCenterNetworkDeviceLibrary71102260">
            <ID>Microsoft.SystemCenter.NetworkDevice.Library</ID>
            <Version>7.1.10226.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="SCDW">
            <ID>Microsoft.SystemCenter.DataWarehouse.Library</ID>
            <Version>7.1.10226.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="SystemNetworkManagementLibrary71102260">
            <ID>System.NetworkManagement.Library</ID>
            <Version>7.1.10226.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="MicrosoftSystemCenterInstanceGroupLibrary7585010">
            <ID>Microsoft.SystemCenter.InstanceGroup.Library</ID>
            <Version>7.5.8501.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="System">
            <ID>System.Library</ID>
            <Version>7.5.8501.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="SystemCenter">
            <ID>Microsoft.SystemCenter.Library</ID>
            <Version>7.0.8433.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="Health">
            <ID>System.Health.Library</ID>
            <Version>7.0.8433.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="Perf">
            <ID>System.Performance.Library</ID>
            <Version>7.0.8433.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="Snmp">
            <ID>System.Snmp.Library</ID>
            <Version>7.0.8427.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
        </References>
      </Manifest>
      <TypeDefinitions>
        <EntityTypes>
          <ClassTypes>
            <ClassType ID="UINameSpaceeeb5025fbd254633900c0cd969bd4e0f.Group" Accessibility="Public" Abstract="false" Base="MicrosoftSystemCenterInstanceGroupLibrary7585010!Microsoft.SystemCenter.InstanceGroup" Hosted="false" Singleton="true" Extension="false" />
          </ClassTypes>
        </EntityTypes>
        <ModuleTypes>
    	<DataSourceModuleType ID="System.NetworkManagement.SnmpPerformanceDataSourceReplace" Accessibility="Public">
            <Configuration>
              <IncludeSchemaTypes>
                <SchemaType>System!System.ParamListSchema</SchemaType>
                <SchemaType>System!System.ExpressionEvaluatorSchema</SchemaType>
                <SchemaType>Snmp!System.SnmpVarBindsSchema</SchemaType>
              </IncludeSchemaTypes>
              <xsd:element name="Interval" type="xsd:integer" />
              <xsd:element name="NoOfRetries" type="xsd:unsignedInt" default="3" />
              <xsd:element name="Timeout " type="xsd:unsignedInt" default="500" />
              <xsd:element name="Port" type="xsd:unsignedInt" default="161" />
              <xsd:element name="IP" type="xsd:string" />
              <xsd:element minOccurs="0" maxOccurs="1" name="Version" type="xsd:string" />
              <xsd:element name="SnmpVarBinds" type="SnmpVarBindsType" />
              <xsd:element minOccurs="1" name="ObjectName" type="xsd:string" />
              <xsd:element minOccurs="1" name="CounterName" type="xsd:string" />
            </Configuration>
            <OverrideableParameters>
              <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
              <OverrideableParameter ID="NoOfRetries" Selector="$Config/NoOfRetries$" ParameterType="int" />
              <OverrideableParameter ID="Timeout" Selector="$Config/Timeout$" ParameterType="int" />
              <OverrideableParameter ID="Port" Selector="$Config/Port$" ParameterType="int" />
            </OverrideableParameters>
            <ModuleImplementation>
              <Composite>
                <MemberModules>
                  <DataSource ID="SnmpDataSource" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpDataSource">
                    <Scheduler>
                      <SimpleReccuringSchedule>
                        <Interval Unit="Seconds">$Config/Interval$</Interval>
                      </SimpleReccuringSchedule>
                      <ExcludeDates />
                    </Scheduler>
                    <NoOfRetries>$Config/NoOfRetries$</NoOfRetries>
                    <Timeout>$Config/Timeout$</Timeout>
                    <Port>$Config/Port$</Port>
                    <SNMPv3UserName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/UserName$</SNMPv3UserName>
                    <SNMPv3AuthProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationProtocol$</SNMPv3AuthProtocol>
                    <SNMPv3AuthPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationKey$</SNMPv3AuthPassword>
                    <SNMPv3PrivProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyProtocol$</SNMPv3PrivProtocol>
                    <SNMPv3PrivPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyKey$</SNMPv3PrivPassword>
                    <SNMPv3ContextName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/ContextName$</SNMPv3ContextName>
                    <IP>$Config/IP$</IP>
                    <CommunityString>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Snmp.MonitoringAccount"]/CommunityString$</CommunityString>
                    <Version>$Config/Version$</Version>
                    <SnmpVarBinds>$Config/SnmpVarBinds$</SnmpVarBinds>
                    <OutputOnError>false</OutputOnError>
                  </DataSource>
                  <ProbeAction ID="PSScript" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe">
                    <ScriptName>ReplaceValue.ps1</ScriptName>
                    <ScriptBody>
    <![CDATA[Param($Value)
    $oAPI = new-object -comObject "MOM.ScriptAPI"
    $Value=$value.Substring(0,2)
    $pb = $oAPI.CreatePropertyBag()
    $pb.AddValue("ReplacedValue",$Value)
    $pb
    ]]>
    		</ScriptBody>
                    <SnapIns />
                    <Parameters>
                      <Parameter>
                        <Name>Value</Name>
                        <Value>$Data/SnmpVarBinds/SnmpVarBind[1]/Value$</Value>
                      </Parameter>
                    </Parameters>
                    <TimeoutSeconds>60</TimeoutSeconds>
                  </ProbeAction>
                  <ConditionDetection ID="Mapper" TypeID="Perf!System.Performance.DataGenericMapper">
                    <ObjectName>$Config/ObjectName$</ObjectName>
                    <CounterName>$Config/CounterName$</CounterName>
                    <InstanceName />
                    <Value>$Data/Property[@Name='ReplacedValue']$</Value>
                  </ConditionDetection>
                </MemberModules>
                <Composition>
                  <Node ID="Mapper">
                    <Node ID="PSScript">
                    <Node ID="SnmpDataSource" />
                    </Node>
                  </Node>
                </Composition>
              </Composite>
            </ModuleImplementation>
            <OutputType>Perf!System.Performance.Data</OutputType>
          </DataSourceModuleType>
        </ModuleTypes>
      </TypeDefinitions>
      <Monitoring>
        <Discoveries>
          <Discovery ID="UINameSpaceeeb5025fbd254633900c0cd969bd4e0f.Group.DiscoveryRule" Enabled="true" Target="UINameSpaceeeb5025fbd254633900c0cd969bd4e0f.Group" ConfirmDelivery="false" Remotable="true" Priority="Normal">
            <Category>Discovery</Category>
            <DiscoveryTypes>
              <DiscoveryRelationship TypeID="MicrosoftSystemCenterInstanceGroupLibrary7585010!Microsoft.SystemCenter.InstanceGroupContainsEntities" />
            </DiscoveryTypes>
            <DataSource ID="GroupPopulationDataSource" TypeID="SystemCenter!Microsoft.SystemCenter.GroupPopulator">
              <RuleId>$MPElement$</RuleId>
              <GroupInstanceId>$MPElement[Name="UINameSpaceeeb5025fbd254633900c0cd969bd4e0f.Group"]$</GroupInstanceId>
              <MembershipRules>
                <MembershipRule>
                  <MonitoringClass>$MPElement[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]$</MonitoringClass>
                  <RelationshipClass>$MPElement[Name="MicrosoftSystemCenterInstanceGroupLibrary7585010!Microsoft.SystemCenter.InstanceGroupContainsEntities"]$</RelationshipClass>
                  <IncludeList>
                    <MonitoringObjectId>47ab0e4c-f072-2f63-07c5-f6708e6e7836</MonitoringObjectId>
                    <MonitoringObjectId>0fc90ac3-86ea-4b8f-b14b-56524c99cb56</MonitoringObjectId>
                  </IncludeList>
                </MembershipRule>
              </MembershipRules>
            </DataSource>
          </Discovery>
        </Discoveries>
        <Rules>
          <Rule ID="MomUIGeneratedRule1d782b5922694abe8500ec81473b6d8c" Enabled="false" Target="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
            <Category>PerformanceCollection</Category>
            <DataSources>
              <DataSource ID="SnmpDataSource" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpPerformanceDataSource">
                <Interval>300</Interval>
                <NoOfRetries>3</NoOfRetries>
                <Timeout>500</Timeout>
                <Port>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/PortNumber$</Port>
                <IP>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPAddress$</IP>
                <Version>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPVersion$</Version>
                <SnmpVarBinds>
                  <SnmpVarBind>
                    <OID>1.3.6.1.4.1.2011.2.82.1.82.4.1.2001.1.2.13.67.80.85.49.32.67.111.114.101.32.82.101.109</OID>
                    <Syntax>0</Syntax>
                    <Value VariantType="8" />
                  </SnmpVarBind>
                </SnmpVarBinds>
                <ObjectName>Snmp Performance Object</ObjectName>
                <CounterName>TEMP</CounterName>
              </DataSource>
            </DataSources>
            <WriteActions>
              <WriteAction ID="WriteToDB" TypeID="SystemCenter!Microsoft.SystemCenter.CollectPerformanceData" />
              <WriteAction ID="WriteToDW" TypeID="SCDW!Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData" />
            </WriteActions>
          </Rule>


    • Изменено Swepper 15 сентября 2017 г. 8:32
    15 сентября 2017 г. 8:31
  • 1. Про countername не важно это в целях более простого debug

    2. Установлены ли последние обновления?

    Похожий случай был с linux/unix MP

    https://social.technet.microsoft.com/Forums/en-US/09e3e15b-18b0-4f08-9d2b-e0a54359c815/scom-2016-agents-162337-module-was-unable-to-convert-parameter-to-a-double-value?forum=operationsmanagerunixandlinux

    И также $Data replacement: содержал цифровое значение с точкой вначале. Но далее идет string и возможно это путает SCOM. 

    $Data replacement: '1.#QNAN'

    3. Какое железо опрашиваете? есть ли MIB файл?

    4. Как вариант попробовать использовать кавычки и в скрипте сделать смещение

    ProbeAction

    <Value>"$Data/SnmpVarBinds/SnmpVarBind[1]/Value$"</Value>

    Script

    $Value=$value.Substring(1,2)


    15 сентября 2017 г. 12:42
  • 2. версия 10226.1177

    3. это блейд шасси от хуавей (e9000), мибов нету, но есть кое как понятная документация, благодаря которой и удалось найти данные OIDы, snmp тестер (от Paessler) выполняемый с данного сервера возвращает внятное значение в том же виде в котором его получает SCOM.

    4. только что попробовал данный вариант, на выходе в итоге тоже самое:

     

    Module was unable to convert parameter to a double value 
    Original parameter: '$Data/SnmpVarBinds/SnmpVarBind[1]/Value$' 
    Parameter after $Data replacement: '46.000 Celsius' 
    Error: 0x80020005 
    Details: Type mismatch.

    причем, обратил внимание что данное сообщение об ошибке возникает не каждые 60 секунд (как я в итоге задал в интервале в самом правиле) а почему то каждые ~300 секунд, что довольно сильно отличается от правила. Подозреваю что ввиду не отработающего корректно правила, задается определенный таймаут.

    Но вот вывод всегда один и тот же, как бы я не пытался изменить скрипт. Может где то наврал с SnmpDataSource ?

    хотя в правиле, как вы и сказали, я заменил его 

    <DataSources>
              <DataSource ID="SnmpDataSource"

    вместо стандартного "DS"


    • Изменено Swepper 15 сентября 2017 г. 13:00
    15 сентября 2017 г. 12:59
  • 1. DataSource ID SnmpDataSource это внутри модуля так что тут все ок

    2. Может какое то другое правило у вас осталось еще?

    3. Добавьте лог в скрипт и посмотрите данные которые поступают в скрипт вначале и после обработки

    $SCRIPTNAME="replaceValue.ps1"

    $EVENT_ID=100

    $SEVERITY_ERROR=1

    $oAPI = new-object -comObject "MOM.ScriptAPI"

    $oAPI.LogScriptEvent($SCRIPTNAME, $EVENT_ID, $SEVERITY_ERROR, "Script Value before Replace:Value=" + $Value) $Value=$value.Substring(0,2)

    $oAPI.LogScriptEvent($SCRIPTNAME, $EVENT_ID+1, $SEVERITY_ERROR, "Script Value Replaced:Value=" + $Value) $pb = $oAPI.CreatePropertyBag() $pb.AddValue("ReplacedValue",$Value) $pb

    15 сентября 2017 г. 13:20
  • 2. в том то и дело что удалил все похожие правила назначенные на данное устройство, а в эвентлоге Workflow name явно соответствует тому одному правилу которое я назначил.

    3. только что добавил:

    <ProbeAction ID="PSScript" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe">
                    <ScriptName>ReplaceValue.ps1</ScriptName>
                    <ScriptBody>
    <![CDATA[Param($Value)
    $SCRIPTNAME="replaceValue.ps1"
    
    $EVENT_ID=100
    
    $SEVERITY_ERROR=1
    
    $oAPI = new-object -comObject "MOM.ScriptAPI"
    
    $oAPI.LogScriptEvent($SCRIPTNAME, $EVENT_ID, $SEVERITY_ERROR, "Script Value before Replace:Value=" + $Value)
    $Value=$value.Substring(0,2)
    
    $oAPI.LogScriptEvent($SCRIPTNAME, $EVENT_ID+1, $SEVERITY_ERROR, "Script Value Replaced:Value=" + $Value)
    $pb = $oAPI.CreatePropertyBag()
    $pb.AddValue("ReplacedValue",$Value)
    $pb
    ]]>
    		</ScriptBody>
                    <SnapIns />

    так понимаю после выполнения правила я должен в эвентлоге искать событие с id=100, но ни с таким, ни с каким другим я не нашел ничего что могло бы вообще хоть как то указывать на выполнение скрипта. Может он и вовсе по какой то причине не выполняется?


    • Изменено Swepper 15 сентября 2017 г. 13:42
    15 сентября 2017 г. 13:40
  • Если вместо $Data/SnmpVarBinds/SnmpVarBind[1]/Value$ как я понимаю явно укажите 46.000 Celsius то скрипт выполняется и видны события в event viewer?
    15 сентября 2017 г. 13:50
  • В общем проверил у себя на стенде (scom 2016 UR3) c oid который возвращает значение 46.000 Celsius и все работает корректно без ошибок. Т.е получаю значение типа integer (46) и нормально строится график производительности в scom.
    15 сентября 2017 г. 17:15
  • Если вместо $Data/SnmpVarBinds/SnmpVarBind[1]/Value$ как я понимаю явно укажите 46.000 Celsius то скрипт выполняется и видны события в event viewer?

    Добрый день. К сожалению нет, тоже был удивлен данным обстоятельством, т.к. ожидал явного соответствия.

    в результате:

    Module was unable to convert parameter to a double value 
    Original parameter: '$Data/SnmpVarBinds/SnmpVarBind[1]/Value$' 
    Parameter after $Data replacement: '43.000 Celsius' 
    Error: 0x80020005 
    Details: Type mismatch.
     
    One or more workflows were affected by this.  

    Workflow name: MomUIGeneratedRule4d97541319a74f009772318f6ed9d509 

    после чего ещё раз проверил соответствует ли Workflow name правила, созданному мною, все в норме... 

    возможно ли такое что у меня ошибка в самом МП и ProbeAction где то не там стоит в модуле?

    если надо могу полностью его выложить.

    Устройства добавлены по ICMP + SNMP, никаких правил и мониторов на них не назначено, все что было до этого даже специально удалил, что те же логи подтверждают, что ошибка генерируется именно тем самым единственно существующим правилом

    18 сентября 2017 г. 12:30
  • Да, лучше полностью выложить где нибудь. Опять же, если Вы заменили $Data/SnmpVarBinds/SnmpVarBind[1]/Value$  на конкретное значение 46.000 Celsius то ошибки связанной с $Data/SnmpVarBinds/SnmpVarBind[1]/Value$ не должно быть в рамках данного модуля так как данной строки в MP быть не должно. 
    18 сентября 2017 г. 12:58
  • вроде он не такой большой, думаю можно попробовать выложить и тут:

    вот последняя импортируемая мною версия (без переназначений, оверайд делаю каждый раз после импорта, но это думаю не существенно)

    <?xml version="1.0" encoding="utf-8"?><ManagementPack ContentReadable="true" SchemaVersion="2.0" OriginalSchemaVersion="1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <Manifest>
        <Identity>
          <ID>TestBladeMP</ID>
          <Version>1.0.0.0</Version>
        </Identity>
        <Name>TestBladeMP</Name>
        <References>
          <Reference Alias="SCDW">
            <ID>Microsoft.SystemCenter.DataWarehouse.Library</ID>
            <Version>7.1.10226.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="SystemNetworkManagementLibrary71102260">
            <ID>System.NetworkManagement.Library</ID>
            <Version>7.1.10226.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="System">
            <ID>System.Library</ID>
            <Version>7.5.8501.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="SystemCenter">
            <ID>Microsoft.SystemCenter.Library</ID>
            <Version>7.0.8433.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="Windows">
            <ID>Microsoft.Windows.Library</ID>
            <Version>7.5.8501.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="Perf">
            <ID>System.Performance.Library</ID>
            <Version>7.0.8433.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>
          <Reference Alias="Snmp">
            <ID>System.Snmp.Library</ID>
            <Version>7.0.8427.0</Version>
            <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
          </Reference>	  
        </References>
      </Manifest>
      <TypeDefinitions>
        <ModuleTypes>
    <DataSourceModuleType ID="System.NetworkManagement.SnmpPerformanceDataSourceReplace" Accessibility="Public">
            <Configuration>
              <IncludeSchemaTypes>
                <SchemaType>System!System.ParamListSchema</SchemaType>
                <SchemaType>System!System.ExpressionEvaluatorSchema</SchemaType>
                <SchemaType>Snmp!System.SnmpVarBindsSchema</SchemaType>
              </IncludeSchemaTypes>
              <xsd:element name="Interval" type="xsd:integer" />
              <xsd:element name="NoOfRetries" type="xsd:unsignedInt" default="3" />
              <xsd:element name="Timeout " type="xsd:unsignedInt" default="500" />
              <xsd:element name="Port" type="xsd:unsignedInt" default="161" />
              <xsd:element name="IP" type="xsd:string" />
              <xsd:element minOccurs="0" maxOccurs="1" name="Version" type="xsd:string" />
              <xsd:element name="SnmpVarBinds" type="SnmpVarBindsType" />
              <xsd:element minOccurs="1" name="ObjectName" type="xsd:string" />
              <xsd:element minOccurs="1" name="CounterName" type="xsd:string" />
            </Configuration>
            <OverrideableParameters>
              <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
              <OverrideableParameter ID="NoOfRetries" Selector="$Config/NoOfRetries$" ParameterType="int" />
              <OverrideableParameter ID="Timeout" Selector="$Config/Timeout$" ParameterType="int" />
              <OverrideableParameter ID="Port" Selector="$Config/Port$" ParameterType="int" />
            </OverrideableParameters>
            <ModuleImplementation>
              <Composite>
                <MemberModules>
                  <DataSource ID="SnmpDataSource" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpDataSource">
                    <Scheduler>
                      <SimpleReccuringSchedule>
                        <Interval Unit="Seconds">$Config/Interval$</Interval>
                      </SimpleReccuringSchedule>
                      <ExcludeDates />
                    </Scheduler>
                    <NoOfRetries>$Config/NoOfRetries$</NoOfRetries>
                    <Timeout>$Config/Timeout$</Timeout>
                    <Port>$Config/Port$</Port>
                    <SNMPv3UserName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/UserName$</SNMPv3UserName>
                    <SNMPv3AuthProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationProtocol$</SNMPv3AuthProtocol>
                    <SNMPv3AuthPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationKey$</SNMPv3AuthPassword>
                    <SNMPv3PrivProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyProtocol$</SNMPv3PrivProtocol>
                    <SNMPv3PrivPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyKey$</SNMPv3PrivPassword>
                    <SNMPv3ContextName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/ContextName$</SNMPv3ContextName>
                    <IP>$Config/IP$</IP>
                    <CommunityString>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Snmp.MonitoringAccount"]/CommunityString$</CommunityString>
                    <Version>$Config/Version$</Version>
                    <SnmpVarBinds>$Config/SnmpVarBinds$</SnmpVarBinds>
                    <OutputOnError>false</OutputOnError>
                  </DataSource>
                  <ProbeAction ID="PSScript" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe">
                    <ScriptName>ReplaceValue.ps1</ScriptName>
                    <ScriptBody>
    <![CDATA[Param($Value)
    $SCRIPTNAME="replaceValue.ps1"
    
    $EVENT_ID=100
    
    $SEVERITY_ERROR=1
    
    $oAPI = new-object -comObject "MOM.ScriptAPI"
    
    $oAPI.LogScriptEvent($SCRIPTNAME, $EVENT_ID, $SEVERITY_ERROR, "Script Value before Replace:Value=" + $Value)
    $Value=$value.Substring(0,2)
    
    $oAPI.LogScriptEvent($SCRIPTNAME, $EVENT_ID+1, $SEVERITY_ERROR, "Script Value Replaced:Value=" + $Value)
    $pb = $oAPI.CreatePropertyBag()
    $pb.AddValue("ReplacedValue",$Value)
    $pb
    ]]>
    		</ScriptBody>
                    <SnapIns />
                    <Parameters>
                      <Parameter>
                        <Name>Value</Name>
                        <Value>46.000 Celsius</Value>
                      </Parameter>
                    </Parameters>
                    <TimeoutSeconds>60</TimeoutSeconds>
                  </ProbeAction>
                  <ConditionDetection ID="Mapper" TypeID="Perf!System.Performance.DataGenericMapper">
                    <ObjectName>$Config/ObjectName$</ObjectName>
                    <CounterName>$Config/CounterName$</CounterName>
                    <InstanceName />
                    <Value>$Data/Property[@Name='ReplacedValue']$</Value>
                  </ConditionDetection>
                </MemberModules>
                <Composition>
                  <Node ID="Mapper">
                    <Node ID="PSScript">
                    <Node ID="SnmpDataSource" />
                    </Node>
                  </Node>
                </Composition>
              </Composite>
            </ModuleImplementation>
            <OutputType>Perf!System.Performance.Data</OutputType>
          </DataSourceModuleType>
        </ModuleTypes>
      </TypeDefinitions>  
      <Monitoring>
        <Rules>
          <Rule ID="MomUIGeneratedRule4d97541319a74f009772318f6ed9d509" Enabled="false" Target="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
            <Category>PerformanceCollection</Category>
            <DataSources>
              <DataSource ID="SnmpDataSource" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpPerformanceDataSource">
                <Interval>60</Interval>
                <NoOfRetries>3</NoOfRetries>
                <Timeout>90</Timeout>
                <Port>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/PortNumber$</Port>
                <IP>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPAddress$</IP>
                <Version>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPVersion$</Version>
                <SnmpVarBinds>
                  <SnmpVarBind>
                    <OID>1.3.6.1.4.1.2011.2.82.1.82.4.1.2001.1.2.13.67.80.85.49.32.67.111.114.101.32.82.101.109</OID>
                    <Syntax>0</Syntax>
                    <Value VariantType="8" />
                  </SnmpVarBind>
                </SnmpVarBinds>
                <ObjectName>Snmp Performance Object</ObjectName>
                <CounterName>ContName</CounterName>
              </DataSource>
            </DataSources>
            <WriteActions>
              <WriteAction ID="WriteToDB" TypeID="SystemCenter!Microsoft.SystemCenter.CollectPerformanceData" />
              <WriteAction ID="WriteToDW" TypeID="SCDW!Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData" />
            </WriteActions>
          </Rule>
        </Rules>
      </Monitoring>
      <Presentation>
        <Folders>
          <Folder ID="Folder_715454cbd60e4ce6b588d0c9350164ac" Accessibility="Public" ParentFolder="SystemCenter!Microsoft.SystemCenter.Monitoring.ViewFolder.Root" />
        </Folders>
      </Presentation>
      <LanguagePacks>
        <LanguagePack ID="ENU" IsDefault="false">
          <DisplayStrings>
            <DisplayString ElementID="TestBladeMP">
              <Name>TestBladeMP</Name>
            </DisplayString>
            <DisplayString ElementID="Folder_715454cbd60e4ce6b588d0c9350164ac">
              <Name>TestBladeMP</Name>
            </DisplayString>
            <DisplayString ElementID="MomUIGeneratedRule4d97541319a74f009772318f6ed9d509">
              <Name>Test Blade 1 slot cpu1 core rem</Name>
            </DisplayString>
          </DisplayStrings>
        </LanguagePack>
        <LanguagePack ID="RUS" IsDefault="false">
          <DisplayStrings>
            <DisplayString ElementID="MomUIGeneratedRule4d97541319a74f009772318f6ed9d509">
              <Name>Test Blade 1 slot cpu1 core rem</Name>
            </DisplayString>
          </DisplayStrings>
        </LanguagePack>
      </LanguagePacks>
    </ManagementPack>

    18 сентября 2017 г. 13:16
  • two issues I can see 

    1. Rule is disabled

    2. You don't use new datasource in Rule

        <DataSource ID="SnmpDataSource" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpPerformanceDataSource">
           

    instead of 

        <DataSource ID="SnmpDataSource" TypeID="System.NetworkManagement.SnmpPerformanceDataSourceReplace">
            


    18 сентября 2017 г. 14:03
  • 2. You don't use new datasource in Rule

    Спасибо большое за помощь, это было именно оно, в DataSource ID прописал, а дальше забыл. Да теперь все работает как часы, данные получаются, и графики строятся.

    Если можно ещё вопрос в продолжение, как данный DS правильно подключить в монитор?

    если сам монитор в МП имеет вид:

    <Monitors>
          <UnitMonitor ID="UIGeneratedMonitord23c016393ed4354b17cc0864860b31e" Accessibility="Public" Enabled="false" Target="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpProbe.2SingleEvent2StateMonitorType" ConfirmDelivery="false">
            <Category>Custom</Category>
            <AlertSettings AlertMessage="UIGeneratedMonitord23c016393ed4354b17cc0864860b31e_AlertMessageResourceID">
              <AlertOnState>Error</AlertOnState>
              <AutoResolve>true</AutoResolve>
              <AlertPriority>Normal</AlertPriority>
              <AlertSeverity>Error</AlertSeverity>
            </AlertSettings>
            <OperationalStates>
              <OperationalState ID="UIGeneratedOpStateId180dba94efae4be78fd99764d1da7d42" MonitorTypeStateID="SecondEventRaised" HealthState="Error" />
              <OperationalState ID="UIGeneratedOpStateId7e6812cfc6fa41e3850f029eff2d6ffc" MonitorTypeStateID="FirstEventRaised" HealthState="Success" />
            </OperationalStates>
            <Configuration>
              <FirstInterval>300</FirstInterval>
              <FirstIP>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPAddress$</FirstIP>
              <FirstVersion>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPVersion$</FirstVersion>
              <FirstSnmpVarBinds>
                <SnmpVarBind>
                  <OID>1.3.6.1.4.1.2011.2.82.1.82.4.1.2001.1.2.13.67.80.85.49.32.67.111.114.101.32.82.101.109</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">40</Value>
                  </ValueExpression>
                </SimpleExpression>
              </FirstExpression>
              <SecondInterval>300</SecondInterval>
              <SecondIP>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPAddress$</SecondIP>
              <SecondVersion>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPVersion$</SecondVersion>
              <SecondSnmpVarBinds>
                <SnmpVarBind>
                  <OID>1.3.6.1.4.1.2011.2.82.1.82.4.1.2001.1.2.13.67.80.85.49.32.67.111.114.101.32.82.101.109</OID>
                  <Syntax>0</Syntax>
                  <Value VariantType="8" />
                </SnmpVarBind>
              </SecondSnmpVarBinds>
              <SecondExpression>
                <SimpleExpression>
                  <ValueExpression>
                    <XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                  </ValueExpression>
                  <Operator>Greater</Operator>
                  <ValueExpression>
                    <Value Type="String">50</Value>
                  </ValueExpression>
                </SimpleExpression>
              </SecondExpression>
              <NoOfRetries>3</NoOfRetries>
              <Timeout>500</Timeout>
              <Port>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/PortNumber$</Port>
    		</Configuration>
          </UnitMonitor>
    20 сентября 2017 г. 6:42
  • Это еще проще, добавить UnitMonitorType, в нем использовать созданный datasource

    https://msdn.microsoft.com/en-us/library/ee533935.aspx

    20 сентября 2017 г. 14:09
  • И снова возвращаюсь к вопросу, так и не удалось победить последнее, понимаю что вроде бы всё и просто, но первый раз как..... вообщем 

    было создано для теста 2 отдельных через UI монитора

    вот для примера один из них:

          <UnitMonitor ID="UIGeneratedMonitor2595b3fdfe554ee8a314b55bcdbc536e" Accessibility="Public" Enabled="false" Target="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpProbe.2SingleEvent2StateMonitorType" ConfirmDelivery="false">
            <Category>Custom</Category>
            <AlertSettings AlertMessage="UIGeneratedMonitor2595b3fdfe554ee8a314b55bcdbc536e_AlertMessageResourceID">
              <AlertOnState>Error</AlertOnState>
              <AutoResolve>true</AutoResolve>
              <AlertPriority>Normal</AlertPriority>
              <AlertSeverity>Error</AlertSeverity>
            </AlertSettings>
            <OperationalStates>
              <OperationalState ID="UIGeneratedOpStateIdd692fdb3faa24a2194f2f154964165c8" MonitorTypeStateID="SecondEventRaised" HealthState="Success" />
              <OperationalState ID="UIGeneratedOpStateIdf740ce3c361b44ba8a6eadba6cadc4d1" MonitorTypeStateID="FirstEventRaised" HealthState="Error" />
            </OperationalStates>
            <Configuration>
              <FirstInterval>300</FirstInterval>
              <FirstIP>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPAddress$</FirstIP>
              <FirstVersion>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPVersion$</FirstVersion>
              <FirstSnmpVarBinds>
                <SnmpVarBind>
                  <OID>1.3.6.1.4.1.2011.2.82.1.82.4.1.2001.1.2.13.67.80.85.50.32.67.111.114.101.32.82.101.109</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">40</Value>
                  </ValueExpression>
                </SimpleExpression>
              </FirstExpression>
              <SecondInterval>300</SecondInterval>
              <SecondIP>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPAddress$</SecondIP>
              <SecondVersion>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/SNMPVersion$</SecondVersion>
              <SecondSnmpVarBinds>
                <SnmpVarBind>
                  <OID>1.3.6.1.4.1.2011.2.82.1.82.4.1.2001.1.2.13.67.80.85.50.32.67.111.114.101.32.82.101.109</OID>
                  <Syntax>0</Syntax>
                  <Value VariantType="8" />
                </SnmpVarBind>
              </SecondSnmpVarBinds>
              <SecondExpression>
                <SimpleExpression>
                  <ValueExpression>
                    <XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                  </ValueExpression>
                  <Operator>Greater</Operator>
                  <ValueExpression>
                    <Value Type="String">50</Value>
                  </ValueExpression>
                </SimpleExpression>
              </SecondExpression>
              <NoOfRetries>3</NoOfRetries>
              <Timeout>500</Timeout>
              <Port>$Target/Property[Type="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Node"]/PortNumber$</Port>
            </Configuration>
          </UnitMonitor>
        </Monitors>

    но опять же не обладая знаниями, и отсутствием опыта, по мануалам ms сложно что то сотворить...

    в   <TypeDefinitions> добавил <UnitMonitorType> получилось как то так:

       <UnitMonitorType>
    <UnitMonitorType ID=”Company.Product.MonitorTypeID” Comment=”Comment” Accessibility=”Public/Internal” RunAs=”RunAsProfileID”>
      <MonitorTypeStates>
        <MonitorTypeState ID="FirstEventRaised" />
        <MonitorTypeState ID="SecondEventRaised" />
      </MonitorTypeStates>
            <Configuration> сюда подставил то что было в Configuration основного монитора (что в примере выше)</Configuration>   
       <MonitorImplementation><MemberModules>но вот тут я так понимаю я в непонятном пока для меня формате должен подставить мой DataSource</MemberModules></MonitorImplementation>
    </UnitMonitorType>
          </UnitMonitorType>

    и что тогда должно произойти с изначально созданными мониторами, их можно удалить? или каким то образом опять же "привязать" к этому UnitMonitorType?

    заранее спасибо)


    29 ноября 2017 г. 14:51
  • Попробуйте сделать так:

      <TypeDefinitions>
        <EntityTypes>
          <ClassTypes>
            <ClassType ID="UINameSpaceeeb5025fbd254633900c0cd969bd4e0f.Group" Accessibility="Public" Abstract="false" Base="MicrosoftSystemCenterInstanceGroupLibrary7585010!Microsoft.SystemCenter.InstanceGroup" Hosted="false" Singleton="true" Extension="false" />
          </ClassTypes>
        </EntityTypes>
        <ModuleTypes>
    	<DataSourceModuleType ID="System.NetworkManagement.SnmpPerformanceDataSourceReplace" Accessibility="Public">
            <Configuration>
              <IncludeSchemaTypes>
                <SchemaType>System!System.ParamListSchema</SchemaType>
                <SchemaType>System!System.ExpressionEvaluatorSchema</SchemaType>
                <SchemaType>Snmp!System.SnmpVarBindsSchema</SchemaType>
              </IncludeSchemaTypes>
              <xsd:element name="Interval" type="xsd:integer" />
              <xsd:element name="NoOfRetries" type="xsd:unsignedInt" default="3" />
              <xsd:element name="Timeout " type="xsd:unsignedInt" default="500" />
              <xsd:element name="Port" type="xsd:unsignedInt" default="161" />
              <xsd:element name="IP" type="xsd:string" />
              <xsd:element minOccurs="0" maxOccurs="1" name="Version" type="xsd:string" />
              <xsd:element name="SnmpVarBinds" type="SnmpVarBindsType" />
              <xsd:element minOccurs="1" name="ObjectName" type="xsd:string" />
            </Configuration>
            <OverrideableParameters>
              <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
              <OverrideableParameter ID="NoOfRetries" Selector="$Config/NoOfRetries$" ParameterType="int" />
              <OverrideableParameter ID="Timeout" Selector="$Config/Timeout$" ParameterType="int" />
              <OverrideableParameter ID="Port" Selector="$Config/Port$" ParameterType="int" />
            </OverrideableParameters>
            <ModuleImplementation>
              <Composite>
                <MemberModules>
                  <DataSource ID="SnmpDataSource" TypeID="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpDataSource">
                    <Scheduler>
                      <SimpleReccuringSchedule>
                        <Interval Unit="Seconds">$Config/Interval$</Interval>
                      </SimpleReccuringSchedule>
                      <ExcludeDates />
                    </Scheduler>
                    <NoOfRetries>$Config/NoOfRetries$</NoOfRetries>
                    <Timeout>$Config/Timeout$</Timeout>
                    <Port>$Config/Port$</Port>
                    <SNMPv3UserName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/UserName$</SNMPv3UserName>
                    <SNMPv3AuthProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationProtocol$</SNMPv3AuthProtocol>
                    <SNMPv3AuthPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/AuthenticationKey$</SNMPv3AuthPassword>
                    <SNMPv3PrivProtocol>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyProtocol$</SNMPv3PrivProtocol>
                    <SNMPv3PrivPassword>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/PrivacyKey$</SNMPv3PrivPassword>
                    <SNMPv3ContextName>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.SnmpV3.MonitoringAccount"]/ContextName$</SNMPv3ContextName>
                    <IP>$Config/IP$</IP>
                    <CommunityString>$RunAs[Name="SystemNetworkManagementLibrary71102260!System.NetworkManagement.Snmp.MonitoringAccount"]/CommunityString$</CommunityString>
                    <Version>$Config/Version$</Version>
                    <SnmpVarBinds>$Config/SnmpVarBinds$</SnmpVarBinds>
                    <OutputOnError>false</OutputOnError>
                  </DataSource>
                  <ProbeAction ID="PSScript" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagTriggerOnlyProbe">
                    <ScriptName>ReplaceValue.ps1</ScriptName>
                    <ScriptBody>
    <![CDATA[Param(
    	$Value
    )
    $oAPI = new-object -comObject "MOM.ScriptAPI"
    $Regex = New-Object System.Text.RegularExpressions.Regex("(\d+\.d+)\s(\w+)")
    $Match = $Regex.Match($Value)
    $pb = $oAPI.CreatePropertyBag()
    $pb.AddValue("Value",$Match.Groups[1].Value)
    $pb.AddValue("CounterName",$Match.Groups[2].Value)
    $pb
    ]]>
    		</ScriptBody>
                    <SnapIns />
                    <Parameters>
                      <Parameter>
                        <Name>Value</Name>
                        <Value>$Data/SnmpVarBinds/SnmpVarBind[1]/Value$</Value>
                      </Parameter>
                    </Parameters>
                    <TimeoutSeconds>60</TimeoutSeconds>
                  </ProbeAction>
                  <ConditionDetection ID="Mapper" TypeID="Perf!System.Performance.DataGenericMapper">
                    <ObjectName>$Config/ObjectName$</ObjectName>
                    <CounterName>$Data/Property[@Name='CounterName']$</CounterName>
                    <InstanceName />
                    <Value>$Data/Property[@Name='Value']$</Value>
                  </ConditionDetection>
                </MemberModules>
                <Composition>
                  <Node ID="Mapper">
                    <Node ID="PSScript">
                    <Node ID="SnmpDataSource" />
                    </Node>
                  </Node>
                </Composition>
              </Composite>
            </ModuleImplementation>
            <OutputType>Perf!System.Performance.Data</OutputType>
          </DataSourceModuleType>
        </ModuleTypes>
      </TypeDefinitions>


    Vladimir Zelenov | http://systemcenter4all.wordpress.com

    17 апреля 2018 г. 9:11
    Отвечающий