Коллеги, а возможно ли сделать вот такое:
- NetXMS сервер стоит на линукс-сервере;
- На Windows 2003 сервере рядом в стойке работает некий сервис. На этом сервере стоит NetXMS-агент;
Необходимо при достижении потребления виртуальной памяти определенным процессом (этим сервисом) одного гигабайта перестартовать сервис.
примерно так:
1) Сделать пару эвентов, например "ИмяПроцесса VMSize ОК" и "ИмяПроцесса VMSize Problem".
2) DCI:
Description: Virtual memory used by process ИмяПроцесса
Data: Process.VMSize(имяпроцесса.exe)
В трэшолды (пороговые значения) добавить кондишены: ИмяПроцесса VMSize Problem - включать если VMSize > гига, если меньше, то откат на "ИмяПроцесса VMSize ОК".
3) Сделать в Реакциях (Action) запись типа: Name: Restart ИмяПроцесса Service \ Type: Execute Action on remote agent \ Remote host: %a \ Action: RezetИмяПроцессаService
4) В Обработке Эвентов (Event processing Policy) в строку обработки для эвентов "ИмяПроцесса VMSize ОК" и "ИмяПроцесса VMSize Problem" в столбец Action выбрать из списка и добавить запись: Restart ИмяПроцесса Service
5) Финальный штрих: в конфиг Агента на нужном сервере добавить строку:
если сервис останавливается сам, корректно:
ActionShellExec = RezetИмяПроцессаService:net stop "Имя процесса"&&net start "Имя процесса"
если сервис НЕ останавливается сам, мы его сначала прибиваем:
ActionShellExec = RezetИмяПроцессаService:taskkill /IM имяпроцесса.exe /F && net stop "Имя процесса"&& net start "Имя процесса"
в принципе тут возможен ещё один вариант: можно сделать только один эвент, "ИмяПроцесса VMSize Max Reached", привязать к нему Action "Restart ИмяПроцесса Service" и в процессе конфигурирования только поставить цапку "Write to Event Log" и не менять Severity с Normal на другое. Тогда если сработает данный Эвент, он не пометит ноду как сбойную и не понадобится двойной обработки состояния.
Если что - помогу комментариями.
Спасибо, сегодня попробую!
скрипт трансформации (в DCI) для перевода исходных байт в гигабайты:
(int64($1)/1024)/1024)/1024