Push-агент
-
Виктор, вы как всегда правы

Заменил короткое имя сервера на длинное и всё срослось.Правильно выглядит так:
nxpush.exe -vv -u admin -P password -H monitor MONITOR.mydomain.ru:Test=6666
процессуальный вопрос: сейчас если я правильно понял push-алгоритм реализован таким образом, что он пассивно принимает значения от внешнего источника. я думаю, что было бы гораздо удобнее, если бы push-агент мог иметь возможность работать по указанному ему заранее расписанию и САМОСТОЯТЕЛЬНО запускать указанные ему скрипты и программы и работать с их выхлопом.
тогда не понадобилось бы городить огород из дополнительных зашедулленых задач. всё бы управлялось из единого центра...
-
вот, хотел попробовать ещё один способ, но...
пример: опрашиваем через SNMP на удалённой windows-машине сервис Task Shceduler.
штатными средствами этого пока ПРАВИЛЬНО сделать нельзя, поскольку как только сервис будет остановлен, его OID пропадёт из общего списка и DCI встаент в позу Not supported. а значит мониторить сервисы на запущено\не запущено не получается.
испытывал такое решение:
@echo off
nxsnmpget -c public -p 161 имя_опрашиваемого_сервера 1.3.6.1.4.1.77.1.2.3.1.1.14.84.97.115.107.32.83.99.104.101.100.117.108.101.114
nxpush -u admin -P password -H сервер_мониторинга "полное_имя_сервера_мониторинга:Task Scheduler Checker"=%errorlevel%где errorlevel'ы (nxsnmpget'а):
0 - и OK, и если OID не найден
3 - request timed outПроблема: nxsnmpget отдаёт errorlevel 0 одинаково и на "сервер доступен-OID есть" и на "сервер доступен-OID'а нет"
в принципе можно эту проблему решить при помощи такой конструкции (поможет возвращаемое значение [04] (получено, порядок) и [05] (не получено, проблема)):
@echo off
nxsnmpget -c public -p 161 имя_опрашиваемого_сервера 1.3.6.1.4.1.77.1.2.3.1.1.14.84.97.115.107.32.83.99.104.101.100.117.108.101.114 | find /I "[04]"
nxpush -u admin -P password -H сервер_мониторинга "полное_имя_сервера_мониторинга:Task Scheduler Checker"=%errorlevel%где %errorlevel%'ы (find'а):
0 - всё ок, получили [04]
1 - всё плохо, получили не [04] (скорее всего [05]) -
@anth0ny said in Push-агент:
процессуальный вопрос: сейчас если я правильно понял push-алгоритм реализован таким образом, что он пассивно принимает значения от внешнего источника. я думаю, что было бы гораздо удобнее, если бы push-агент мог иметь возможность работать по указанному ему заранее расписанию и САМОСТОЯТЕЛЬНО запускать указанные ему скрипты и программы и работать с их выхлопом.
A chem eto otlichaetsja ot obichnogo parametra agenta, kotorij vizivaet script cherez ExternalParameter? Rabotaet po raspisaniju, vozvraschaet rezul'tat raboti scripta...
-
-
NetXMS агент может запускать любой скрипт и результат его работы использовать как значение запрошенного DCI. Например, если у меня есть скрипт
@echo 1и я в конфиг агента добавлю
ExternalParameter = MyParameter:cmd /c c:\myscript.cmdто у агента появится новый параметр с именем MyParameter, и если я создам на него DCI, то при каждом запросе сервера к агенту на значение этого параметра агент будет запускать указанный скрипт и как значение возвращать первую строку, выведенную скриптом на экран (в нашем примере всегда 1).
-
спасибо, интересное решение

это равносильно ExternalParameter = MyParameter:cmd /c @echo 1
т.е. можно однострочные скрипты использовать без создания скриптофайла.или же пользоваться опять же в простых случаях сцеплением && для многострочных скриптов с простым выводом...
вот интересный пример:
for /f "tokens=2" %i in ('"nslookup www.microsoft.com 2>nul | find /i /n "address" | find /i /v "[2]" & if errorlevel 1 echo Address Not-Found"') do echo %i -
и вот пример на злобу дня
:
ищем записи одного и тот же сервера на 2 DNS.@echo off for /f "tokens=2" %%i in ('"nslookup server1.mydomain.ru dnsserver1.mydomain.ru 2>nul | find /i /n "address" | find /i /v "[2]" & if errorlevel 1 echo Error DNS-Query-Error"') do set dns1=%%i for /f "tokens=2" %%i in ('"nslookup server1.mydomain.ru dnsserver2.mydomain.ru 2>nul | find /i /n "address" | find /i /v "[2]" & if errorlevel 1 echo Error DNS-Query-Error"') do set dns2=%%i if %dns1% equ 10.200.1.1 (set dns1=0) else set dns1=1 if %dns2% equ 10.200.1.1 (set dns2=0) else set dns2=2 set /a overall=%dns1%+%dns2% @echo %overall%таким образом если нет записей или не ответил сервер dnsserver1 мы получаем на выходе 1, если не получили данные от dnsserver2, то 2, а если не в курсе или не ответили оба, то 3. нормальное состояние = 0.
-
nxpush.exe -vv -u admin -P password -H monitor MONITOR.mydomain.ru:Test=6666
Nado ukazivat' libo imja hosta tak, kak ono propisano v NetXMS'e, libo ego ID.
А возможно ли немного допилить nxpush, чтобы можно было указывать ему IP-адрес вместо имени ноды?
А то у меня PowerCLI-скрипт, периодически запускаемый на сервере NetXMS, извлекает с ESXi-гипервизора разную статистику. Эта статистика передаётся в нужные DCI через nxpush. И необходимость скрипту, помимо IP-адресов, откуда-то ещё брать внутренние NetXMS-овские идентификаторы нод выглядит неестественным усложнением.
-
Допиливать в данном случае надо сервер. Я добавил возможность использования IP адреса или DNS имени вместо имени объекта - их надо будет указывать после символа @, например:
nxpush.exe -u admin -P password -H monitor @10.0.0.2:Test=1
Эти изменения войдут в релиз 1.1.1. Если вы используете 1.0.11 и не планируете переход на ветку 1.1.x, то я могу прислать патч для сервера 1.0.11.
-
Кстати, а скриптом можете поделиться? У меня тоже есть ESXi, которые было бы полезно подключить к мониторингу, и другим может пригодится.
-
Спасибо. Наверно по такому поводу перейду на 1.1 ветку

Скрипт:
Add-PSSnapin VMware.VimAutomation.Core $UserName = "root" $UserPWD = "password" $InFilePath = "C:\ESXi-stats\ESXi-list.txt" Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Confirm:$False Get-Content $InFilePath | Foreach { Connect-VIServer $_ -User $UserName -Password $UserPWD $VMHost = Get-VMHost -Server $_ $VMHostNetwork = 0 $VMHostNetwork = Get-VMHostNetwork $_ $VMDatastoreList = '' Get-Datastore -Server $_ | Foreach { $VMDatastoreList += $_.Name + ' ' $ExecParameters = $VMHostNetwork.HostName + "." + $VMHostNetwork.DomainName + ":" + $_.Name + "=" + (1 - $_.FreeSpaceMB / $_.CapacityMB) & "$env:ProgramFiles\NetXMS\bin\nxpush.exe" -u pushagent -H SERVICE $ExecParameters } Disconnect-VIServer -Server $_ -Force -Confirm:$False $ExecParameters = $VMHostNetwork.HostName + "." + $VMHostNetwork.DomainName + ":MemUse=" + ($VMHost.MemoryUsageMB / $VMHost.MemoryTotalMB) & "$env:ProgramFiles\NetXMS\bin\nxpush.exe" -u pushagent -H SERVICE $ExecParameters $ExecParameters = $VMHostNetwork.HostName + "." + $VMHostNetwork.DomainName + ":CpuUse=" + ($VMHost.CpuUsageMhz / $VMHost.CpuTotalMhz) & "$env:ProgramFiles\NetXMS\bin\nxpush.exe" -u pushagent -H SERVICE $ExecParameters $ExecParameters = $VMHostNetwork.HostName + "." + $VMHostNetwork.DomainName + ":DatastoreList=" + $VMDatastoreList & "$env:ProgramFiles\NetXMS\bin\nxpush.exe" -u pushagent -H SERVICE $ExecParameters }(имя сервера NetXMS - SERVICE - не вынесено в переменную, во входном файле ESXi-list.txt находятся IP-адреса ESXi-гипервизоров в столбик, имена ESXi-гипервизоров в NetXMS соответствуют их DNS-именам, после вашего патча скрипт можно будет упростить)
Запускается из стандартного виндового шедулера батником:
%PSMODULEPATH%\..\powershell.exe -PSConsoleFile "%ProgramFiles%\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -WindowStyle Minimized -Command ".\Get-AllVMHostStats.ps1"Из-за общей неторопливости PowerCLI отрабатывает довольно долго - у меня на 6 ESXi прокручивается ~3-4 минут. Поэтому часто делать отсчёты не получится.
Результат работы - http://img847.imageshack.us/i/89160342.jpg/ -
Кстати, раз уж речь зашла про интеграцию NetXMS с ESXi, то есть ещё полезные фишки:
Можно включить на ESXi поддержку SNMP (только на бесплатной версии нужно её включать ДО лицензирования, пока ещё ESXi крутится на 30-дневной триалке). После этого появится возможность мониторить кое-какие параметры гипервизора (например, у меня TotalMemSize мониторится запросом на OID .1.3.6.1.4.1.6876.3.2.1.0), но в целом список этих параметров невелик и не очень интересен.
Значительно ценнее возможность получать кликом в консоли по ноде гипервизора список его виртуалок, для этого заходим в NetXMS->Control Panel->Object Tools->New->SNMP Table и там сооружаем табличку примерно такого вида: http://img828.imageshack.us/i/81835416.jpg/
Заодно можно добавить в Object Tools возможность запуска VIClient.Также можно форвардить на NetXMS syslog-и гипервизоров, и фильтровать их на предмет ошибок.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login