Пропустить до основного содержимого

Записки о мониторинге инфраструктуры на русском языке

Найти
Домашняя
  

Записки о мониторинге инфраструктуры на русском языке > Записи > Наблюдение за устройствами, поддерживающими SNMP. Часть 1
Наблюдение за устройствами, поддерживающими SNMP. Часть 1
symetra   Наверное, самый популярный вопрос касательно OpsMgr: “Для многих програмных продуктов существуют менеджмент паки, как же быть с устройствами?”.
Действительно, когда речь заходит об устройствах выбор готовых пакетов достаточно невелик. В основном он сводится к продуктам Quest или Jalasoft. Я не хочу сказать ничего плохого об этих производителях, их решения вполне хороши, а Quest к тому же охватывает своими “расширениями” (management extensions) достаточно большое количество продуктов и устройств.

Но у всех подобных продуктов есть одно общее свойство, которое делает их использование довольно затруднительным, особенно в России. Они весьма недешевы.

В случае множества устройств в сети организации и достаточно больших требований к функциональности (количеству наблюдаемых параметров) покупка подобных решений может быть оправдана. Но для десятка ИБП, пары маршрутизаторов и еще небольшого набора устройств, на которых нужно наблюдать лишь за базовыми параметрами, суммарная стоимость таких решений может быть черезмерной.~~~

Что же делать?

Cap Разрабатывать собственный менеджмент пак.

Мне нравятся решения с коннекторами (когда отдельное ПО “собирает” данные по SNMP и конвертирует эти данные в форму, “понятную” OpsMgr). Это позволяет заметно разгрузить RMS или агенты с которых запускаются SNMP-модули. Но написание коннекторов требует навыков программирования, а написание хороших коннекторов – хороших навыков и опыта программирования, поэтому мы ограничимся написанием менеджмент пака стандартными средствами.
Для демонстрации я буду использовать ИБП компании APC, а конкретно – Symmetra. Потому что во-первых, ИБП данной компании широко распространены, во-вторых конкретно модели Symmetra обладают всеми нужными для демонстрации компонентами. Например, в них много

отдельных батарей. Я не буду описывать все компоненты (написание модулей для них), а только опишу принципы и подходы с примерами, на базе которых можно будет впоследствии разрабатывать другие менеджмент паки для любых устройств, поддерживающих SNMP.

В первой части я покажу как создать классы и дискавери для них.

Классы

В классах OpsMgr для SNMP-устройств нет ничего особенного или отличного от классов для ПО, компонент ПО или компьютеров. У нас будет три класса:

  • APC Device
  • APC UPS Generic
  • APC UPS Symmetra 3 Phase
<ClassType ID="OpsMgr.RU.APC.SNMP.APCDevice" Accessibility="Internal" 
Abstract="false" 
Base="SCNetDevLib!Microsoft.SystemCenter.NetworkDevice" 
Hosted="false" Singleton="false" />
<ClassType ID="OpsMgr.RU.APC.SNMP.UPS.Generic" Accessibility="Internal" Abstract="false" 
Base="OpsMgr.RU.APC.SNMP.APCDevice" Hosted="false" Singleton="false" />
<ClassType ID="OpsMgr.RU.APC.SNMP.APCDevice.Symmetra3phaseUPS" Accessibility="Internal" 
Abstract="false" Base="SystemHardwareLibrary!System.HardwareEnclosure" Hosted="true"

Singleton="false" />

На что сразу нужно обратить внимание – класс APC UPS Symmetra 3 Phase

(OpsMgr.RU.APC.SNMP.APCDevice.Symmetra3phaseUPS) не наследуется ни из одного из двух

других классов, которые я создаю. Поэтому я делаю Hosting-зависимость отдельно.

<RelationshipType ID="OpsMgr.RU.APC.SNMP.APCDevice.Hosts.Symmetra3phaseUPS" 

Accessibility="Internal" Abstract="false" Base="System!System.Hosting"> <Source>OpsMgr.RU.APC.SNMP.UPS.Generic</Source> <Target>OpsMgr.RU.APC.SNMP.APCDevice.Symmetra3phaseUPS</Target>

</RelationshipType>

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

<DataSourceModuleType ID="OpsMgr.RU.APC.SNMP.QuerySysOID.DataSource" 
Accessibility="Internal" Batching="false">
        <Configuration>
          <xsd:element minOccurs="1" name="IP" type="xsd:string" />
          <xsd:element minOccurs="1" name="CommunityString" type="xsd:string" />
          <xsd:element minOccurs="1" name="ClassId" type="xsd:string" />
          <xsd:element minOccurs="1" name="Pattern" type="xsd:string" />
        </Configuration>
        <OverrideableParameters>
          <OverrideableParameter ID="IP" Selector="$Config/IP$" 
ParameterType="string" />
          <OverrideableParameter ID="CommunityString" Selector="$Config/CommunityString$"
 ParameterType="string" />
          <OverrideableParameter ID="DiscoveredClass" Selector="$Config/ClassId$"
 ParameterType="string" />
          <OverrideableParameter ID="Pattern" Selector="$Config/Pattern$"
 ParameterType="string" />
        </OverrideableParameters>
        <ModuleImplementation Isolation="Any">
          <Composite>
            <MemberModules>
              <DataSource ID="DS" TypeID="SystemSnmpLibrary!System.SnmpQueryProvider">
                <Interval>15</Interval>
                <IsWriteAction>true</IsWriteAction>
                <IP>$Config/IP$</IP>
                <CommunityString>$Config/CommunityString$</CommunityString>
                <SnmpVarBinds>
                  <SnmpVarBind>
                    <OID>1.3.6.1.2.1.1.2.0</OID>
                    <Syntax>0</Syntax>
                    <Value VariantType="8" />
                  </SnmpVarBind>
                </SnmpVarBinds>
              </DataSource>
<ConditionDetection ID="FIlteredMapper" 
TypeID="System!System.Discovery.FilteredClassSnapshotDataMapper">
                <Expression>
                  <RegExExpression>
                    <ValueExpression>
                      <XPathQuery>/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
                    </ValueExpression>
                    <Operator>ContainsSubstring</Operator>
                    <Pattern>$Config/Pattern$</Pattern>
                  </RegExExpression>
                </Expression>
                <ClassId>$Config/ClassId$</ClassId>
                <InstanceSettings>
                  <Settings>
                    <Setting>
<Name>$MPElement[Name="SCNetDevLib!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</Name>
                      <Value>$Data/Source$</Value>
                    </Setting>
                    <Setting>
                      <Name>$MPElement[Name="System!System.Entity"]/DisplayName$</Name>
                      <Value>$Data/Source$</Value>
                    </Setting>
                  </Settings>
                </InstanceSettings>
              </ConditionDetection>
            </MemberModules>
            <Composition>
              <Node ID="FIlteredMapper">
                <Node ID="DS" />
              </Node>
            </Composition>
          </Composite>
        </ModuleImplementation>
        <OutputType>System!System.Discovery.Data</OutputType>
      </DataSourceModuleType>

Композитный модуль состоит из трех частей (модулей). Первый (System.Snmp.Query) запрашивает по SNMP данные, содержащиеся в SystemOID, второй (System.Discovery.FilteredClassSnapshotDataMapper) проверяет содержится ли в  полученных первым модулем данных некая строка (конкретный паттерн указывается уже в правиле для дискавери) и если содержится – конвертирует SNMP-данные в данные для дискавери-пакета.

Теперь на базе этого композитного модуля напишем правило для дискавери:

<Discovery ID="OpsMgr.RU.APC.SNMP.APCDevice.Discovery" Enabled="true" 
Target="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice" 
ConfirmDelivery="true" Remotable="true" Priority="Normal">
        <Category>Discovery</Category>
        <DiscoveryTypes>
          <DiscoveryClass TypeID="OpsMgr.RU.APC.SNMP.APCDevice" />
        </DiscoveryTypes>
        <DataSource ID="DS" TypeID="OpsMgr.RU.APC.SNMP.QuerySysOID.DataSource">
          <IP>$Target/Property[Type="SCNetDevLib!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IP>
<CommunityString>$Target/Property[Type="SCNetDevLib!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</CommunityString>
          <ClassId>$MPElement[Name='OpsMgr.RU.APC.SNMP.APCDevice']$</ClassId>
          <Pattern>1.3.6.1.4.1.318</Pattern>
        </DataSource>
      </Discovery>

В качестве паттерна указываем OID, который выделен для компании APC (он будет почти у всех устройств APC).

Теперь дискавери для трехфазного Symmetra:

<Discovery ID="OpsMgr.RU.APC.SNMP.APCDevice.Symmetra3phase.Discovery" Enabled="true" 
Target="OpsMgr.RU.APC.SNMP.APCDevice" ConfirmDelivery="true" Remotable="true" Priority="Normal">
        <Category>Discovery</Category>
        <DiscoveryTypes>
          <DiscoveryClass TypeID="OpsMgr.RU.APC.SNMP.APCDevice.Symmetra3phaseUPS" />
        </DiscoveryTypes>
        <DataSource ID="DS" TypeID="OpsMgr.RU.APC.SNMP.QuerySysOID.DataSource">
          <IP>$Target/Property[Type="SCNetDevLib!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IP>
<CommunityString>
$Target/Property[Type="SCNetDevLIb!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$
</CommunityString>
          <ClassId>$MPElement[Name='OpsMgr.RU.APC.SNMP.APCDevice.Symmetra3phaseUPS']$</ClassId>
          <Pattern>1.3.6.1.4.1.318.1.3.13</Pattern>
        </DataSource>
      </Discovery>

В качестве паттерна указываем OID класса Symmetra3phaseUPS.

Все OID вы можете найти в MIB-файлах или на интернет-ресурсах, таких как OIDView.com. Антон Гриценко написал хорошую статью об основах SNMP и о том как пользоваться MIB-браузером.

Заметки

инфо - супер!

Спасибо за Вашу статью. И здесь, и в статье Антона Гриценко кучу полезной инфы для себя нашел! Все мои обучалки с http://rapidpedia.com (рапидшара поисковика) и близко не валялись!
Петька в 19.03.2010 13:35

НА: Наблюдение за устройствами, поддерживающими SNMP. Часть 1

Пожалуйста.
Alexey Zhuravlev в 19.03.2010 19:03

Добавить заметку

Автор *


Название


Основной текст *


StopSpam *


Введите, пожалуйста, в этом поле указанные цифры. Это помогает нам бороться со спамерами. 1414
Вложения