none
Two state monitor powershell script for multiple instances RRS feed

  • Вопрос

  • Добрый день, создал структуру классов:

    MSA Array (Host Relationship) Enclosure (Host Relationship) Physical Disk

    MSA Array (Host Relationship) vDisk (Host Relationship) Volume.

    Дискавери нашел все инстансы каждого класса, необходимо теперь с помошью скрипта отслеживать состояние здоровья каждого отдельного инстанса. Как это можно сделать?


    28 сентября 2011 г. 14:37
    Отвечающий

Ответы

  • Да, фильтры могут быть с несколькими условиями. Конкретный состав фильтра сильно зависит от того, что используется как таргет для скрипта, какие именно данные выдает скрипт и как.


    http://OpsMgr.ru/
    4 октября 2011 г. 13:54
    Отвечающий

Все ответы

  • речь о cookdown скрипте который выщемит все статусы за раз?

    не получается сам скипт написать или завернуть его под ском?

    29 сентября 2011 г. 11:29
  • Доброй ночи,

    Да, хотелось бы именно Cookdown, т.к. все параметры уже описаны в xml, с которого я забираю статистику. Я написал скрипт, который парсит xml:

    #param([string]$remotehost, [string]port, [string]$input, [string]$object, [string]key, [string]$property, [string]$username, [string]$password)
    $remotehost = '10.192.11.66'
    $port = '23'
    $input='show enclosures'
    $object='enclosures'
    $key='durable-id'
    $property='health'
    $description='health-reason'
    $username='monitor'
    $password='!monitor'

    $socket = new-object System.Net.Sockets.TcpClient($remotehost, $port)
    if($socket -eq $null) {write-host 'connection not established'; return}
    $stream = $socket.GetStream()
    $writer = new-object System.IO.StreamWriter($stream)
    $encoding = new-object System.Text.AsciiEncoding
    $buffer = new-object System.Byte[] 1024

    function sendCommand
    {
    param($command)
    $writer.WriteLine($command)
    $writer.Flush()
    Start-Sleep -m 500
    while($session -notmatch '# '){
    $read = $stream.Read($buffer, 0, 1024)
    $session=$session+($encoding.GetString($buffer, 0, $read))
    if ($session -match ': ') {return $session}
    }
    $session=$session -replace "$command`r`n","" -replace "`r`n#",""
    return $session
    }

    # authentication

    [string]$terminal=SendCommand($username)
    $terminal=SendCommand($password)
    $terminal=SendCommand('set cli-parameters api-embed pager off brief on')
    if ($terminal -match 'login') {Write-Host 'credentials is incorrect'; $stream.Close(); return}
    [xml]$xd=SendCommand($input)

    # parse xml and create property bag

    $api=new-object -comObject 'MOM.ScriptAPI'
    $bag=$api.CreatePropertyBag()
    $nodes=$xd.SelectNodes("RESPONSE/OBJECT[@name='$object']")
    foreach ($node in $nodes) {
    $instance=$node.SelectSingleNode("PROPERTY[@name='$key']")."#text"
    $value=$node.SelectSingleNode("PROPERTY[@name='$property']")."#text"
    $desc=$node.SelectSingleNode("PROPERTY[@name='$description']")."#text"
    $bag.addValue('Instance', $instance)
    $bag.addValue('Status', $value)
    $bag.addValue('Desc', $desc)
    $api.Return($bag)
    #$bag
    }

    # disconnect

    $stream.Close()

    В общем-то пытаюсь написать мониторинг MSA 2000, тем более, что с G3 можно собирать статистику по IOPS, Disk Queue и т.д. Скрипт просто телнетится к MSA и парсит XML. Не уверен, что правильно возвращаю данные в Property bag и вообще, это ли мне нужно передавать. У класса 3 инстанса. Пока читаю форумы, перечитываю доки.

    29 сентября 2011 г. 22:51
    Отвечающий
  • Переделал часть скрипта, которая передает PropertyBag:

    # parse xml and create property bag

    $api=new-object -comObject 'MOM.ScriptAPI'
    $nodes=$xd.SelectNodes("RESPONSE/OBJECT[@name='$object']")
    foreach ($node in $nodes) {
    $bag=$api.CreatePropertyBag()
    $instance=$node.SelectSingleNode("PROPERTY[@name='$key']")."#text"
    $value=$node.SelectSingleNode("PROPERTY[@name='$property']")."#text"
    $desc=$node.SelectSingleNode("PROPERTY[@name='$description']")."#text"
    $bag.addValue('Instance', $instance)
    $bag.addValue('Status', $value)
    $bag.addValue('Desc', $desc)
    $api.Return($bag)
    #$bag
    }

    # disconnect

    $stream.Close()

    В итоге получилось:

    <DataItem type="System.PropertyBagData" time="2011-09-30T11:41:10.2598765+04:00" sourceHealthServiceId="287A276F-6015-BD39-B7E5-7165C1C8AE0D">
     <Property Name="Instance" VariantType="8">enclosure_0</Property>
     <Property Name="Status" VariantType="8">OK</Property>
     <Property Name="Desc" VariantType="0"></Property>
    </DataItem>
    <DataItem type="System.PropertyBagData" time="2011-09-30T11:41:10.2618297+04:00" sourceHealthServiceId="287A276F-6015-BD39-B7E5-7165C1C8AE0D">
     <Property Name="Instance" VariantType="8">enclosure_1</Property>
     <Property Name="Status" VariantType="8">OK</Property>
     <Property Name="Desc" VariantType="0"></Property>
    </DataItem>
    <DataItem type="System.PropertyBagData" time="2011-09-30T11:41:10.2637829+04:00" sourceHealthServiceId="287A276F-6015-BD39-B7E5-7165C1C8AE0D">
     <Property Name="Instance" VariantType="8">enclosure_2</Property>
     <Property Name="Status" VariantType="8">OK</Property>
     <Property Name="Desc" VariantType="0"></Property>
    </DataItem>

    30 сентября 2011 г. 7:47
    Отвечающий
  • Pavel, меня интересует вопрос, как эти данные прикрутить к моим инстансам? Как вообще SCOM поймет кому эти данные принадлежат.

    Сейчас попробывал собрать монитор. Язык скриптов - PoSH, соответственно каких либо визардов нет. Процесс проходит в 3 этапа:

    1. Я создал ProbeAction на базе Microsoft.Windows.PowerShellPropertyBagProbe. Это как раз тот скрипт, который я привел выше. (Правильно ли я выбрал? Это Probe Action или Data Source?)

    2. Я создаю Monitor Type - тут как раз начинаются все сложности. Как мне полученные данные привязать к инстансу. Закладки Member Modules и Regular пока для меня вообще темный лес.


    3. Создание Unit Monitor.
    30 сентября 2011 г. 12:45
    Отвечающий
  • а выложи свой MP с описанием class'ов, xml output(ты его парсишь) и какие мониторы хочешь сделать.

    посморим, что можно сделать



    30 сентября 2011 г. 14:28
  •       <DataSourceModuleType ID="EVA.Virtual.Disk.Performance.DataSource" Accessibility="Internal" Batching="false">
            <Configuration>
              <xsd:element minOccurs="1" name="Name" type="xsd:string" />
            </Configuration>
            <OverrideableParameters>
              <OverrideableParameter ID="DiskName" Selector="$Config/Name$" ParameterType="string" />
            </OverrideableParameters>
            <ModuleImplementation Isolation="Any">
              <Composite>
                <MemberModules>
                  <DataSource ID="TimedScriptPropBagProvider" TypeID="MicrosoftWindowsLibrary6062780!Microsoft.Windows.TimedScript.PropertyBagProvider">
                    <IntervalSeconds>120</IntervalSeconds>
                    <SyncTime>00:01</SyncTime>
                    <ScriptName>EVA_Virtual_Disk_Performance_Provider.vbs</ScriptName>
                    <Arguments />
                    <ScriptBody><![CDATA[
    ScriptHere
    
    ]]></ScriptBody>
                    <TimeoutSeconds>60</TimeoutSeconds>
                  </DataSource>
    <strong>              <ConditionDetection ID="EF" TypeID="System!System.ExpressionFilter">
                    <Expression>
                      <SimpleExpression>
                        <ValueExpression>
                          <XPathQuery Type="String">Property[@Name='Name']</XPathQuery>
                        </ValueExpression>
                        <Operator>Equal</Operator>
                        <ValueExpression>
                          <Value Type="String">$Config/Name$</Value>
                        </ValueExpression>
                      </SimpleExpression>
                    </Expression>
                  </ConditionDetection></strong>
                </MemberModules>
                <Composition>
                  <Node ID="EF">
                    <Node ID="TimedScriptPropBagProvider" />
                  </Node>
                </Composition>
              </Composite>
            </ModuleImplementation>
            <OutputType>System!System.PropertyBagData</OutputType>
          </DataSourceModuleType>
    

    DS со встроенным condition detection. Полностью пакет для примера можно взять здесь: http://www.systemcentercentral.com/PackCatalog/PackCatalogDetails/tabid/145/IndexID/87420/Default.aspx?cItemId=87420
    http://OpsMgr.ru/
    1 октября 2011 г. 18:34
    Отвечающий
  • Алексей, спасибо, я как раз именно этим MP и руководствовался. Правда 2й версией, который еще был до вашей модификации. Я просто пока не совсем могу понять, как маппером пользоваться, вроде как с Expression Filtering более менее понял, хотя, уверен, что не все еще раскопал. Также скорее всего дискавери не совсем оптимальный. Сейчас перестраиваю классы в своем пакете, т.к. слишком много объектов для мониторинга, может даже имеет смысл не разбивать дискавери для каждого класса, а одним скриптом передавать ключевые и неключевые параметры каждого класса. Имеющиеся классы:

    MSA.Controller, MSA.Enclosure, MSA.PSU, MSA.Fan, MSA.Drive, MSA.vDisk, MSA.Volume. В качестве базового класса - абстракный класс MSA.Array.

    MSA.Controller имеет ключевой параметр - IPaddress, также есть параметр Managed (true/false), для того, чтобы знать, через какой контроллер мы подключаемся к массиву MSA.

    MSA.Controller с Managed: true является хостом для классов MSA.Enclosure, MSA.vDisk, которые имеют несколько инстансов. MSA.Enclosure является хостом для MSA.Drive, MSA.Fan, MSA.PSU, у которых также несколько инстансов. MSA.vDisk является хостом для класса MSA.vDisk является хостом для MSA.Volume, у которого также несколько инстансов. MSA.Controller с Managed: false просто мониторится на наличие ошибок, но он также относится к классу MSA.Controller.

    MSA возвращает примерно такие XML:

    команда show disks

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RESPONSE VERSION="L100">
    <COMP G="0" P="1"/>  <OBJECT basetype="drives" name="drive" oid="1" format="rows">
      <PROPERTY name="durable-id" type="string" size="20" draw="false" sort="string" display-name="Durable ID">disk_2.1</PROPERTY>
      <PROPERTY name="enclosure-id" type="uint32" size="4" draw="false" sort="string" display-name="Enclosure ID">2</PROPERTY>
      <PROPERTY name="slot" type="uint32" size="4" draw="false" sort="integer" display-name="Slot">1</PROPERTY>
      <PROPERTY name="location" key="true" type="string" size="8" draw="true" sort="diskslot" display-name="Location">2.1</PROPERTY>
      <PROPERTY name="port" type="uint32" size="3" draw="false" sort="integer" display-name="Ports">0</PROPERTY>
      <PROPERTY name="scsi-id" type="uint32" size="2" draw="false" sort="integer" display-name="SCSI ID">32</PROPERTY>
      <PROPERTY name="blocks" blocksize="512" type="uint64" size="1" draw="false" sort="integer" display-name="Blocks">585937500</PROPERTY>
      <PROPERTY name="serial-number" type="string" size="21" draw="true" sort="string" display-name="Serial Number">6SE02QH100009032QS7E</PROPERTY>
      <PROPERTY name="vendor" type="string" size="8" draw="true" sort="string" display-name="Vendor">HP</PROPERTY>
      <PROPERTY name="model" type="string" size="16" draw="false" sort="string" display-name="Model">EG0300FAWHV</PROPERTY>
      <PROPERTY name="revision" type="string" size="16" draw="true" sort="string" display-name="Revision">HPDE</PROPERTY>
      <PROPERTY name="state" type="string" size="10" draw="true" sort="string" display-name="How Used">VDISK</PROPERTY>
      <PROPERTY name="secondary-channel" type="uint32" size="1" draw="false" sort="integer" display-name="SCSI ID (2)">1</PROPERTY>
      <PROPERTY name="container-index" type="uint32" size="1" draw="false" sort="integer" display-name="Container">0</PROPERTY>
      <PROPERTY name="member-index" type="uint32" size="1" draw="false" sort="integer" display-name="Member">0</PROPERTY>
      <PROPERTY name="type" type="string" size="6" draw="true" sort="string" display-name="Type">SAS</PROPERTY>
      <PROPERTY name="type-numeric" type="uint32" size="6" draw="true" sort="string" display-name="Type">4</PROPERTY>
      <PROPERTY name="job-running" type="string" size="1" draw="false" sort="string" display-name="Current Job"></PROPERTY>
      <PROPERTY name="job-running-numeric" type="uint32" size="1" draw="false" sort="string" display-name="Current Job">0</PROPERTY>
      <PROPERTY name="blink" type="uint32" size="1" draw="false" sort="integer" display-name="Blinking">0</PROPERTY>
      <PROPERTY name="speed" type="uint32" size="1" draw="false" sort="integer" display-name="Speed">0</PROPERTY>
      <PROPERTY name="lun" type="uint32" size="1" draw="false" sort="integer" display-name="LUN">0</PROPERTY>
      <PROPERTY name="smart" type="string" size="6" draw="false" sort="integer" display-name="SMART">Enabled</PROPERTY>
      <PROPERTY name="smart-numeric" type="uint32" size="6" draw="false" sort="integer" display-name="SMART">1</PROPERTY>
      <PROPERTY name="dual-port" type="uint32" size="2" draw="false" sort="integer" display-name="Dual Port">1</PROPERTY>
      <PROPERTY name="error" type="uint32" size="1" draw="false" sort="integer" display-name="Error">0</PROPERTY>
      <PROPERTY name="fc-p1-channel" type="uint32" size="1" draw="false" sort="integer" display-name="Port 1 Channel Number">0</PROPERTY>
      <PROPERTY name="fc-p1-device-id" type="uint32" size="1" draw="false" sort="integer" display-name="Port 1 Device ID">32</PROPERTY>
      <PROPERTY name="fc-p1-node-wwn" type="string" size="16" draw="false" sort="string" display-name="FC-P1 NWWN">5000c5001a99d123</PROPERTY>
      <PROPERTY name="fc-p1-port-wwn" type="string" size="16" draw="false" sort="string" display-name="FC-P1 PWWN">0000000000000000</PROPERTY>
      <PROPERTY name="fc-p1-unit-number" type="uint32" size="1" draw="false" sort="integer" display-name="FC-P1 Unit">0</PROPERTY>
      <PROPERTY name="fc-p2-channel" type="uint32" size="1" draw="false" sort="integer" display-name="FC-P2 CH">1</PROPERTY>
      <PROPERTY name="fc-p2-device-id" type="uint32" size="1" draw="false" sort="integer" display-name="FC-P2 Dev ID">32</PROPERTY>
      <PROPERTY name="fc-p2-node-wwn" type="string" size="1" draw="false" sort="string" display-name="FC-P2 NWWN"></PROPERTY>
      <PROPERTY name="fc-p2-port-wwn" type="string" size="1" draw="false" sort="string" display-name="FC-P2 PWWN"></PROPERTY>
      <PROPERTY name="fc-p2-unit-number" type="uint32" size="1" draw="false" sort="integer" display-name="FC-P2 Unit">0</PROPERTY>
      <PROPERTY name="drive-down-code" type="uint8" size="1" draw="false" sort="integer" display-name="Drive Down Code">0</PROPERTY>
      <PROPERTY name="owner" type="string" size="1" draw="false" sort="string" display-name="Current Owner">A</PROPERTY>
      <PROPERTY name="owner-numeric" type="uint32" size="1" draw="false" sort="string" display-name="Current Owner">1</PROPERTY>
      <PROPERTY name="index" type="uint32" size="1" draw="false" sort="integer" display-name="Index">0</PROPERTY>
      <PROPERTY name="rpm" units="K" type="uint32" size="1" draw="false" sort="integer" display-name="RPM (x 1000)">10</PROPERTY>
      <PROPERTY name="size" units="GB" type="string" size="16" draw="true" sort="size" display-name="Size">300.0GB</PROPERTY>
      <PROPERTY name="size-numeric" units="blocks512" type="uint32" size="16" draw="true" sort="size" display-name="Size">585937500</PROPERTY>
      <PROPERTY name="transfer-rate" units="gbps" type="string" size="11" draw="true" sort="string" display-name="Transfer Rate">3.0</PROPERTY>
      <PROPERTY name="transfer-rate-numeric" units="gbps" type="uint32" size="11" draw="true" sort="string" display-name="Transfer Rate">11</PROPERTY>
      <PROPERTY name="attributes" type="string" size="2" draw="true" sort="string" display-name="Single Pathed"></PROPERTY>
      <PROPERTY name="attributes-numeric" type="uint32" size="2" draw="true" sort="string" display-name="Single Pathed">11</PROPERTY>
      <PROPERTY name="virtual-disk-serial" type="string" size="32" draw="false" sort="string" display-name="Vdisk Serial Number">00c0ff127f030000799a824e00000000</PROPERTY>
      <PROPERTY name="enclosure-wwn" type="string" size="16" draw="false" sort="string" display-name="Enclosure WWN">500143800943b080</PROPERTY>
      <PROPERTY name="status" type="string" size="9" draw="false" sort="string" display-name="Status">Up</PROPERTY>
      <PROPERTY name="health" type="string" size="10" draw="true" sort="string" display-name="Health">OK</PROPERTY>
      <PROPERTY name="health-numeric" type="uint32" size="10" draw="true" sort="string" display-name="Health">0</PROPERTY>
      <PROPERTY name="health-reason" type="string" size="400" draw="true" sort="string" display-name="Health Reason"></PROPERTY>
      <PROPERTY name="led-status" type="string" size="32" draw="false" sort="string" display-name="LED Status"> Online</PROPERTY>
      <PROPERTY name="led-status-numeric" type="uint32" size="32" draw="false" sort="string" display-name="LED Status">1</PROPERTY>
      <PROPERTY name="disk-dsd-count" type="uint32" size="10" draw="false" sort="integer" display-name="Drive Spin Down Count">1</PROPERTY>
    </OBJECT>

    .............

    Команда show enclosures

     

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RESPONSE VERSION="L100">
    <COMP G="0" P="1"/>  <OBJECT basetype="enclosures" name="enclosures" oid="1" format="rows">
      <PROPERTY name="durable-id" type="string" size="20" draw="false" sort="string" display-name="Durable ID">enclosure_0</PROPERTY>
      <PROPERTY name="enclosure-id" type="uint8" size="4" draw="true" sort="integer" display-name="Enclosure ID">1</PROPERTY>
      <PROPERTY name="enclosure-wwn" type="string" size="16" draw="true" sort="string" display-name="Enclosure WWN">500c0ff0127d5a3c</PROPERTY>
      <PROPERTY name="name" type="string" size="21" draw="true" sort="string" display-name="Name"></PROPERTY>
      <PROPERTY name="location" type="string" size="21" draw="true" sort="string" display-name="Location"></PROPERTY>
      <PROPERTY name="rack-number" type="uint8" size="4" draw="true" sort="string" display-name="Rack Number">0</PROPERTY>
      <PROPERTY name="rack-position" type="uint8" size="4" draw="true" sort="string" display-name="Rack Position">0</PROPERTY>
      <PROPERTY name="number-of-coolings-elements" type="uint8" size="4" draw="false" sort="integer" display-name="Fans">2</PROPERTY>
      <PROPERTY name="number-of-disks" type="uint8" size="5" draw="true" sort="integer" display-name="Disk Slots">24</PROPERTY>
      <PROPERTY name="number-of-power-supplies" type="uint8" size="5" draw="false" sort="integer" display-name="Power Supplies">2</PROPERTY>
      <PROPERTY name="status" type="string" size="6" draw="true" sort="integer" display-name="Status">Up</PROPERTY>
      <PROPERTY name="status-numeric" type="uint32" size="6" draw="true" sort="integer" display-name="Status">1</PROPERTY>
      <PROPERTY name="midplane-serial-number" type="string" size="33" draw="true" sort="string" display-name="Midplane Serial Number">2S6121B458</PROPERTY>
      <PROPERTY name="health" type="string" size="10" draw="true" sort="string" display-name="Health">OK</PROPERTY>
      <PROPERTY name="health-numeric" type="uint32" size="10" draw="true" sort="string" display-name="Health">0</PROPERTY>
      <PROPERTY name="health-reason" type="string" size="80" draw="true" sort="string" display-name="Health Reason"></PROPERTY>
      <PROPERTY name="health-blame" type="string" size="8" draw="false" sort="string" display-name="Health Component">none</PROPERTY>
      <PROPERTY name="health-blame-numeric" type="uint32" size="8" draw="false" sort="string" display-name="Health Component">0</PROPERTY>
      <PROPERTY name="vendor" type="string" size="8" draw="true" sort="string" display-name="Vendor">HP</PROPERTY>
      <PROPERTY name="model" type="string" size="16" draw="true" sort="string" display-name="Model">SPS-CHASSIS</PROPERTY>
      <PROPERTY name="fru-shortname" type="string" size="16" draw="false" sort="nosort" display-name="FRU Shortname">Midplane/Chassis</PROPERTY>
      <PROPERTY name="fru-location" type="string" size="32" draw="false" sort="nosort" display-name="FRU Location">MID-PLANE SLOT</PROPERTY>
      <PROPERTY name="part-number" type="string" size="32" draw="true" sort="nosort" display-name="Part Number">582939-001</PROPERTY>
      <PROPERTY name="mfg-date" type="string" size="32" draw="true" sort="nosort" display-name="Manufacturing Date">2011-04-27 07:43:32</PROPERTY>
      <PROPERTY name="mfg-date-numeric" type="uint32" size="32" draw="true" sort="nosort" display-name="Manufacturing Date">1303890212</PROPERTY>
      <PROPERTY name="mfg-location" type="string" size="64" draw="true" sort="nosort" display-name="Manufacturing Location">Longhua,Shenzhen,CN</PROPERTY>
      <PROPERTY name="description" type="string" size="64" draw="false" sort="nosort" display-name="Description">SPS-CHASSIS 2U24 6G w/MIDPLANE</PROPERTY>
      <PROPERTY name="revision" type="string" size="16" draw="true" sort="nosort" display-name="Revision">C</PROPERTY>
      <PROPERTY name="dash-level" type="string" size="4" draw="false" sort="nosort" display-name="Dash Level"></PROPERTY>
      <PROPERTY name="emp-a-rev" type="string" size="4" draw="true" sort="nosort" display-name="EMP A Revision">1123</PROPERTY>
      <PROPERTY name="emp-b-rev" type="string" size="4" draw="true" sort="nosort" display-name="EMP B Revision">1123</PROPERTY>
      <PROPERTY name="rows" type="uint8" size="4" draw="false" sort="nosort" display-name="Rows">1</PROPERTY>
      <PROPERTY name="columns" type="uint8" size="4" draw="false" sort="nosort" display-name="Columns">24</PROPERTY>
      <PROPERTY name="slots" type="uint8" size="5" draw="false" sort="nosort" display-name="Slots">24</PROPERTY>
      <PROPERTY name="drive-orientation" type="string" size="11" draw="false" sort="nosort" display-name="Disk Orientation">vertical</PROPERTY>
      <PROPERTY name="drive-orientation-numeric" type="uint32" size="11" draw="false" sort="nosort" display-name="Disk Orientation">0</PROPERTY>
      <PROPERTY name="enclosure-arrangement" type="string" size="11" draw="false" sort="nosort" display-name="Enclosure Arrangement">vertical</PROPERTY>
      <PROPERTY name="enclosure-arrangement-numeric" type="uint32" size="11" draw="false" sort="nosort" display-name="Enclosure Arrangement">0</PROPERTY>
      <PROPERTY name="emp-a-busid" type="string" size="4" draw="true" sort="nosort" display-name="EMP A Bus ID">00</PROPERTY>
      <PROPERTY name="emp-a-targetid" type="string" size="4" draw="true" sort="nosort" display-name="EMP A Target ID">031</PROPERTY>
      <PROPERTY name="emp-b-busid" type="string" size="4" draw="true" sort="nosort" display-name="EMP B Bus ID">01</PROPERTY>
      <PROPERTY name="emp-b-targetid" type="string" size="4" draw="true" sort="nosort" display-name="EMP B Target ID">031</PROPERTY>
      <PROPERTY name="emp-a" type="string" size="5" draw="false" sort="nosort" display-name="EMP A"></PROPERTY>
      <PROPERTY name="emp-a-ch-id-rev" type="string" size="15" draw="false" sort="nosort" display-name="CH:ID  Rev">00:031 1123</PROPERTY>
      <PROPERTY name="emp-b" type="string" size="5" draw="false" sort="nosort" display-name="EMP B"></PROPERTY>
      <PROPERTY name="emp-b-ch-id-rev" type="string" size="15" draw="false" sort="nosort" display-name="CH:ID  Rev">01:031 1123</PROPERTY>
      <PROPERTY name="midplane-type" type="string" size="8" draw="true" sort="nosort" display-name="Midplane Type">2U24-6G</PROPERTY>
      <PROPERTY name="midplane-type-numeric" type="uint32" size="8" draw="true" sort="nosort" display-name="Midplane Type">3</PROPERTY>
      <PROPERTY name="enclosure-power" type="string" size="16" draw="true" sort="nosort" display-name="Enclosure Power (watts)">123.34</PROPERTY>
      <PROPERTY name="pcie2-capable" type="string" size="16" draw="true" sort="string" display-name="PCIe 2-Capable">Off</PROPERTY>
      <PROPERTY name="pcie2-capable-numeric" type="uint32" size="16" draw="true" sort="string" display-name="PCIe 2-Capable">0</PROPERTY>
    </OBJECT>

    .......

    Примерно в таком формате. Я не стал копировать всё, что выдает MSA, т.к. таких колонок от 20 до 100+, в зависимости от команды, если действительно интересно и нужны сами XML, то могу собрать в один архив и где нибудь выложить. Скрипт, который делает запрос и парсит работает не дольше 5-10 секунд, так что в плане производительности нареканий не вызывает. Используемые команды - show disks, show vdisks, show controllers, show enclosures, show disk-statistics, show vdisk-statistics, show volumes, show volume-statistics.

    3 октября 2011 г. 6:33
    Отвечающий
  • Я что-то не понимаю или в EVA Performance Monitor ошибка. Я открыл EVA.Disk.Group.Write.Latency.MonitorType и вижу

    OverFilter:

     <Expression>
        <SimpleExpression>
          <ValueExpression>
            <XPathQuery Type="Double">Property[@Name='AverageWriteLatency']</XPathQuery>
          </ValueExpression>
          <Operator>Equal</Operator>
          <ValueExpression>
            <Value Type="Double">$Config/Treshold$</Value>
          </ValueExpression>
        </SimpleExpression>
      </Expression>

    UnderFilter:

      <Expression>
        <SimpleExpression>
          <ValueExpression>
            <XPathQuery Type="Double">Property[@Name='AverageWriteLatency']</XPathQuery>
          </ValueExpression>
          <Operator>Equal</Operator>
          <ValueExpression>
            <Value Type="Double">$Config/Treshold$</Value>
          </ValueExpression>
        </SimpleExpression>
      </Expression>

    Визуально не вижу разницы.

    P.S.: Видимо действительно ошибка, т.к. в 2х других вроде как оператор меняется.

    3 октября 2011 г. 10:54
    Отвечающий
  • Да, это опечатка. Я опубликую исправленную версию на этой неделе.
    http://OpsMgr.ru/
    3 октября 2011 г. 13:26
    Отвечающий
  • В общем пока сделал как-то так... На сколько я понял каждый инстанс нужно через ExpressionFilter выделять? Если класс имеет несколько инстансов и этот класс хостит класс, у которого также несколько инстансов, то все их нужно через ExpressionFilter пропускать?

    Пока монитор по контроллерам, не знаю на сколько верно.

    https://docs.google.com/uc?id=0B0xp47qQMk0fNzhhMWM0OWMtMDk4Ny00NGU1LTkxMzYtZjhjZWE5YWVmZTJm&export=download&hl=en_US

    3 октября 2011 г. 14:54
    Отвечающий
  • Фильтр в DS служит для того, чтобы каждый монитор получил только свою порцию данных.

    >Если класс имеет несколько инстансов и этот класс хостит класс, у которого также несколько инстансов, то все их нужно через ExpressionFilter пропускать?

    Зависимости здесь не при чем. Монитор (или правило) нацелен на конкретный класс. Если скрипт получает данные для всех экземпляров класса, то получается примерно так:

    - Мониторы стартуют все в одно время. Это важно! Более того, ВСЕ мониторы передают скрипту одинаковый набор параметров. Если все условия соблюдены - скрипт запускается один раз и выдает весь свой блок данных.

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

     

     

     


    http://OpsMgr.ru/
    3 октября 2011 г. 17:28
    Отвечающий
  • Так вот именно этот момент меня и интересует. Допустим, взять тот же самый SQL Server. Допустим, что мы имеем несколько инстансов - MSSQLSERVER и SQLEXPRESS, оба этих инстанса содержат базы данных, среди которых 100% есть повторяющиеся master, tempdb. Как отфильтровать что этот master принадлежит MSSQLSERVER, а другой master - SQLEXPRESS. Значит мы должны как-то передать через параметры имена инстансов и по ним фильтровать + фильтровать имена баз данных, в Data Stream соответственно должны передаться Instance, Database, State? Это как пример... Или я ошибаюсь и есть какие-то свои внутренние механизмы?

    4 октября 2011 г. 8:12
    Отвечающий
  • Да, фильтры могут быть с несколькими условиями. Конкретный состав фильтра сильно зависит от того, что используется как таргет для скрипта, какие именно данные выдает скрипт и как.


    http://OpsMgr.ru/
    4 октября 2011 г. 13:54
    Отвечающий
  • Всё, разобрался... Высасываю данные из MSA в мониторы и правила :) Скорее всего следующие вопросы будут по репортам и вьюхам.
    5 октября 2011 г. 9:07
    Отвечающий