none
Как мониторить perfomance counter RRS feed

  • Вопрос

  • Собираю я скриптом perfomance counter. Все собирается и графики красиво рисуются. Хочется теперь этот perfomance counter мониторить. Собирается он на самом сервере perfomance скриптом, соответственно указать онитору счетчик не представляется возможным (или я не знаю как это сдеать). Существует ли какая-то возможность этот счетчик мониторить на предмет превышения счетчика какого-то значения?

    16 июля 2008 г. 14:38

Все ответы

  • Судя по описанию, вам нужно создать WMI Preformance Counter монитор или Scripting монитор, смотря что делает ваш скрипт.

    17 июля 2008 г. 4:31
    Отвечающий
  •  

    В общем я так понял что при отсуствии реальных счетчиков, наличие в базе значений производительности никак не отражается на возможности и мониторить. Т.е. нужно писать 2 скрипта - один будет скидывать в логи значения счетчиков, а второй будет запускаться монитором и возвращать монитору значение на основании которого монитор уже будет принимать решение о своем состоянии. Правильно я понимаю?

    Но вотникает вопрос - если у одного счетчика может быть несколько Instance, то мониторов нужно писать столько сколько этих inntance есть?

     

    Ну и для теста наваял я такой скрипт монитор (скрипт чуть ниже). Сделал его отключеным и заенейблил для группы.  Отключаю машину из сетки, скрипт который рисует график доступности  (такой же собственно скрипт практически в правиле собирающем значения производительности) красиво показывает что  машина из сетки вываливалась. Однако алерт не приходит, хотя указано его генерить и не закрывать автоматически.  Критерий доступности для монитора perfValue >=0 , недоступности perfValue < 0. Что я не так сделал?

     

    Code Snippet

    Const EVENT_TYPE_ERROR = 1

    Const EVENT_TYPE_WARNING = 2

    Const EVENT_TYPE_SUCCESS = 4

    Dim intResponse, strServer

    Dim cPingResults, oPingResult, intResult

    Dim hostName, maxxSrv

     

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

    Set colItems = objWMIService.ExecQuery("Select * From Win32_BIOS")

    For Each objItem in colItems

    hostName = objItem.Path_.Server

    Next

     

    massSrv = Array("maxx")

     

    Set oAPI = CreateObject("MOM.ScriptAPI")

    strServer = "maxx"

    Set cPingResults = GetObject("winmgmts://./root/cimv2").ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address = '" & strServer & "'")

    For Each oPingResult In cPingResults

    intResult = oPingResult.ResponseTime

    if IsEmpty(oPingResult.ResponseTime) then

    intResult = -1

    Elseif IsNull(oPingResult.ResponseTime) then

    intResult = -1

    Else

    intResult = cdbl(oPingResult.ResponseTime/5)

    End If

    Set oBag = oAPI.CreatePropertyBag()

    If oPingResult.StatusCode <> 0 then

    intResult = -5

    End If

    Call oBag.AddValue("perfValue",intResult)

    Next

     

    Call oAPI.Return(oBag)

     

     

    17 июля 2008 г. 15:55
  • Теперь понятнее.

    Но вотникает вопрос - если у одного счетчика может быть несколько Instance, то мониторов нужно писать столько сколько этих inntance есть?

    Не обязательно. И в целом даже нежелательно.

     

    Давайте вы опишете задачу, не на игрушечных примерах, а конкретно? И тогда мы попытаемся ее решить максимально красивым способом.

    Скрипт приведенный выше, если честно, вызывает у меня сомнения...На мой взгляд там достаточно лишнего. НАпример, зачем делать запрос к Win32_BIOS если потом его нигде не используют? Время потянуть?

    18 июля 2008 г. 3:09
    Отвечающий
  •  G14 написано:

    Теперь понятнее.

    Но вотникает вопрос - если у одного счетчика может быть несколько Instance, то мониторов нужно писать столько сколько этих inntance есть?

    Не обязательно. И в целом даже нежелательно.

     

    Давайте вы опишете задачу, не на игрушечных примерах, а конкретно? И тогда мы попытаемся ее решить максимально красивым способом.

    Скрипт приведенный выше, если честно, вызывает у меня сомнения...На мой взгляд там достаточно лишнего. НАпример, зачем делать запрос к Win32_BIOS если потом его нигде не используют? Время потянуть?

    В другом месте этот запрос использовался, это просто обрезаный скрипт, который в perfomance counter данные скидывает. .

    Сейчас хочу следующее:

    Есть несколько хостов, хочу при падении хоста получать смску с тем что он упал, при поднятии смску что он поднялся.

     

    ЗЫ Эту задачу хочется решить сейчас, но ping не принципиален. Вместо него может быть любой параметр возвращаемый скриптом. Например стоит у меня на столе аквариум и я хочу знать температуру в нем (датчик уже готов и на компе я ее вижу) ну и уведомления получать если вдруг она станет выше или ниже нормы.

    18 июля 2008 г. 6:38
  • Если на хостах есть агенты OpsMgr, то достаточно настроить подписку на события от Health Service Watcher, при отсутствии пинга на хост watcher выпускает алерт "Computer Not Reachable". Если установите "notify on alert aging", то будете получать алерт и при появлении хоста в сети.

     

    Со скриптами нужно создать scripting монитор и в скрипте в зависимости от результата возвращать в bag значение, например good или bad. И потом сравнивать его с $Data/Property[@Name='ParamName']$

    18 июля 2008 г. 7:34
    Отвечающий
  • Я тут попробывал помониторить темпиратуру через устройства APC. Попытался добавить Monitor->Single Event Monitor-> далее указал Object Identify-eр который выдает темпиратуру(число) и потом задал значение при котором система должна выдавать предупреждение.
    На страничке Alerts Settings-> Generate Alerts for this monitor нажимаю Create. Она мне выдает красивый такой exception. Можно кто сталкивался

    : Verification failed with [1] errors:
    -------------------------------------------------------
    Error 1:
    : Failed to verify Unit monitor with ID: UIGeneratedMonitore1030e0a5b694ebc9bbad4dbd8e79cce
    Host reference error in expression: $Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary6062780!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$
    The specified ClassType was ['Microsoft.SystemCenter.NetworkDevice'] and the resolved ClassType (evaluating the /Host references) was ['UINameSpace3a2202f3937540e9a9ee06be9dbc3b95.Group'].
    Please check the number of '/Host' references in this expression.
    -------------------------------------------------------

    Failed to verify Unit monitor with ID: UIGeneratedMonitore1030e0a5b694ebc9bbad4dbd8e79cceHost reference error in expression: $Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary6062780!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$
    The specified ClassType was ['Microsoft.SystemCenter.NetworkDevice'] and the resolved ClassType (evaluating the /Host references) was ['UINameSpace3a2202f3937540e9a9ee06be9dbc3b95.Group'].
    Please check the number of '/Host' references in this expression.
    : Failed to verify Unit monitor with ID: UIGeneratedMonitore1030e0a5b694ebc9bbad4dbd8e79cce
    H
    18 июля 2008 г. 19:54
  • Скорее всего неверно указан target монитора.

     

    19 июля 2008 г. 4:43
    Отвечающий
  • Сделал тестовый монитор на основе скрипта. Скрипт - проще некуда:

    Code Snippet

    Dim oAPI, oBag

    Set oAPI = CreateObject("MOM.ScriptAPI")

    Set oBag = oAPI.CreatePropertyBag()

    Call oBag.AddValue("Status","BAD")

    Call oAPI.Return(oBag)

     

     

    В качестве Unhealthy Expression стоит  ( $Data/Property[@Name='Status']$ Equals BAD )

    Healthy Expression -   ( $Data/Property[@Name='Status']$ Equals OK )

    Однако монитор не переходит в указанное ему состояние Critical? В чем ошибка?

    22 июля 2008 г. 13:22
  • Синтаксис вида $Data/Property[@Name='Status']$ используется для того, чтобы получить дополнительные параметры (дескрипшн например), для монитора нужно использовать

    Property[@Name='Status']

     

    23 июля 2008 г. 3:08
    Отвечающий
  • Действительно когда я выбрал в Monitor Target - SNMP Network Devices то монитор создался.

    Почему я не могу выбрать конкретную группу для какие устройств применять этот монитор. У меня одна группа где находятся датчики температу которые отдают значения по SNMP.
    24 июля 2008 г. 9:39
  • Потому что нельзя нацелить монитор\правило на группу. Нацеливать нужно на класс. Если хотите нацелить на группу - создайте отключеный монитор, нацельте на класс и затем оверрайдом включите для группы.

    24 июля 2008 г. 9:57
    Отвечающий