none
Alert Description и Diagnostic Task RRS feed

  • Вопрос

  • Всем здравствуйте, такоей вопрос а есть ли относительно простой способо добавить в Alert Description что генерит монитор вывод скрипта или команды что запускается при диагностике. Например мониторю счетчик производительности Memory - Availible MBytes по достижению какого то значения Alert и запускается диагностика с командой tasklist /FI "memusage gt 10000" вот чтоб он мне вывод этой команды присылал вместе с алертом можно как то сделать ? Перерыл уже кучу инфы нашел какой то вариант вроде с CreateObject("MOM.ScriptAPI")  и дальше созданием переменной которая будет выступать как свойство и которую можно будет потом в дескрипшон вставить но что то пока не получается может кто знает проще способ. Заранее спасибо.

Все ответы

  • Ладно вопрос поставим иначе ) точнее это немного другой вопрос но все про тоже
    Погуглив немного нашел про такую вещь как Property Bag, т.е я в монитор в раздел diagnostic могу засунуть скрипт который выполнит то что мне надо по достижению алерта а потом результат достижим будет через след Xpath запрос $data\context\dataitem\property[@name='bag']$ Ну вот как я делал
    Сам скрипт взял тот что в примере приводился

    Set oAPI = CreateObject("MOM.ScriptAPI")set bag= oAPI.CreatePropertyBag()
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Set WshSysEnv = WshShell.Environment("SYSTEM")
    call bag.AddValue("Num", WshSysEnv("NUMBER_OF_PROCESSORS"))
    call oAPI.Return(bag)

    Т.е поместив в alert description след XPath $data\context\dataitem\property[@name='Num']$
    Я должен в алерте что на мыло приходит получить вместо него кол-во процессоров на машине в данном случае
    Вобщем приходит пустота, если глядеть через health explorer то там скрипт пишут отработал без ошибок и выдал след output

    <DataItem type="System.PropertyBagData" time="2009-05-10T16:57:42.4195261+04:00" sourceHealthServiceId="DA5C3B02-5EE4-0E3F-B6C9-36DAB33E78FB"><Property Name="Num" VariantType="8">8</Property></DataItem>
    Т.е число 8 и есть то значение что я в письме получить должен, так может кто нибудь знает что я не так сделал ???
  • Это не будет работать. Монитор (и его алерт) и диагностика это разные модули, просто один запускает другой при определенных условиях. Поэтому у них будут разные $data\context\...$. В том контексте (блоке данных), куда "смотрит" алерт, вывода диагностики просто нет.  
    http://OpsMgr.ru/
    Отвечающий
  • Спасибо ) я уже это понял, пару дней назад спросил об этом Кевина Холмана вот его ответ если кому интересно

    "I would run a script - have the script write the diagnostic output to a custom event in the OpsMgr event log - then alert on that event being created."

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

    1 - Создаем монитор который зрегестрирует критическое значение счетчика в данном случае Memory Availible, после он запускает диагностику которая покажет кто жрет память
    2 - Далее скрипт ( можно его отдельно разместить в рекавери сеции или там же в диагностике не важно ) поместит вывод диагностики в эвент лог не той машине что мониторим
    3 - Отдельно созданный монитор нацеленный на опред эвент который создался на шаге 2 пришлет на почту алерт где и будет вывод диагностики

    Все вроде красиво но одна проблема я хз как на шаге 2 в евент лог поместить показания счетчика они прекрасно доступны через Alert description где я просто могу написать $data/context/value$ но в диагностики т.к у нее собственный модуль все это недоступно, т.е ситуация получается обратная :) теперь я не могу из диагностики получить то что есть в алерте, так что опять же непонятно где тут выход.
  • Ответ тот же самый. Диагностика и сам монитор - разные модули, соотвественно никак не заставить их передавать данные контекста друг другу. Способов по сути два:
    1. Переделать исходный монитор и настроить его на запись данных в эвенты. После чего в эвенты пишет свои данные диагностика. И создается второй монитор - коррелирующий. Он смотрит не было ли двух событий (от монитора и диагностики) в эвентах и,соответственно, если они оба есть - выдает алерт.
    2. Отключить исходный монитор и создать полностью свой. Скриптовый. И уже скриптом получать данные о производительности (счетчик), сравнивать с порогом и при "нехорошем" значении делать диагностику. После чего писать ВСЕ данные сразу в эвенты или выдавать в алерт.

    Ну и третий вариант, мне он не очень нравится, но право на жизнь имеет. Дописать скрипт для диагностики, чтобы он снимал данные со счетчика. И уже все вместе писал в лог.
    http://OpsMgr.ru/
    Отвечающий