Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Ethril

#31
Поменял * на (.*) - всё работает. Спасибо.
#32
Не восстанавливается окно Object Browser. Попробовал несколько раз по-всякому - глюк вроде стабильный, остальные окна восстанавливаются нормально. Все компоненты версии 0.2.26.
#33
При восстановлении сохранённой ранее раскладки окон в NetXMS,восстанавливается только одно окно. Бага?
#34
Расскажите, плиз, подробнее про <event param="1"> в парсере.
Для начала хочу передавать в NetXMS текст эвента ошибки из виндового System Log.
Сделал простейший парсер:

<parser>
<file>*System</file>
<rules>
<rule>
<level>1</level>
<match>*</match>
<event params="1">100012</event>
</rule>
</rules>
</parser>

Теперь при появлении ошибки в System Log, в NetXMS Event Browser'е появляется эвент, но без текста ошибки, хотя Message Template у него стоит %1. Что-то недокрутил?

P.S. И ещё вопросик вдогонку: не планируется ли доработать в будущем модуль для update/deploy клиентов, чтобы заодно распространять на них файлики с парсерами? Чтобы не копировать ручками .xml-файлик на 20 серверов.
#35
В общем, сделал так - завёл в шаблоне ещё один DCI, впихнул ему в thresholds скрипт:

sub main()
{
if ( GetDCIValue($node, FindDCIByDescription($node, "1SensorLocale")) == "ambient" )
return GetDCIValue($node, FindDCIByDescription($node, "1SensorData"));
if ( GetDCIValue($node, FindDCIByDescription($node, "2SensorLocale")) == "ambient" )
return GetDCIValue($node, FindDCIByDescription($node, "2SensorData"));
if ( GetDCIValue($node, FindDCIByDescription($node, "3SensorLocale")) == "ambient" )
return GetDCIValue($node, FindDCIByDescription($node, "3SensorData"));
if ( GetDCIValue($node, FindDCIByDescription($node, "4SensorLocale")) == "ambient" )
return GetDCIValue($node, FindDCIByDescription($node, "4SensorData"));
if ( GetDCIValue($node, FindDCIByDescription($node, "5SensorLocale")) == "ambient" )
return GetDCIValue($node, FindDCIByDescription($node, "5SensorData"));
return 0;
}

Ну и в Event Processing просто отслеживаю только его состояние.

Осталось научиться заводить переменные и делать циклы типа for на вашем NXSL, чтобы скрипт свернуть до 3-х строк :)
#36
Имеется зоопарк серверов серии HP Proliant, с которых NetXMS'ом по SNMP собираются температуры с внутренних датчиков. Сервера разных времён и моделей, поэтому у них разный состав этих датчиков. Где-то их 3 штуки, где-то 5, где-то первый датчик мониторит cpu, а где-то - powersupply...
(Местоположение датчика нумер N можно получить SNMP-запросом по OID .1.3.6.1.4.1.232.6.2.6.8.1.3.0.[N]. Затем запросом по OID .1.3.6.1.4.1.232.6.2.6.8.1.4.0.[N] получить температуру.)

На первых порах интересуют только данные датчиков с местоположением ambient.

Хотелось бы, не вдаваясь в подробности установки датчиков на каждой модели, получать полный список их значений с каждого сервера, находить там тот, который ambient, и слать алерт при превышении порога, скажем, 20 гр.

Завёл шаблон, перенёс в него все Пролианты, завёл в нём пары датчиков ([N]SensorLocale, [N]SensorData) ; N=1..5.
Во всех датчиках [N]SensorData вобью Thresholds, при превышении которых сработает некий эвент.
На некоем полу-NXSL, полу-псевдоязыке попытался накропать скрипт, который хочу вставить в Event Processing Policy:

set i=1;             //define integer variable

while ( i < 6 )     //cycle from 1Sensor[Locale/Data] to 5Sensor[Locale/Data]
{
if ( GetDCIValue($node, FindDCIByDescription($node, right("SensorLocale", 13, i))) == "ambient" )   // is [N]SensorLocale == "ambient" ?
{
if ( GetDCIValue($node, FindDCIByDescription($node, right("SensorData", 11, i))) > 20 )     // is ambient sensor overheat?
{
return GetDCIValue($node, FindDCIByDescription($node, right("SensorData", 11, i))); // if true, true then get data from ambient sensor
};
};
i++;
};

return 0;         // return current temperature from overheated ambient sensor, or 0.

, т.е., при срабатывании эвента отрабатывает скрипт, который перепроверяет, какой же это эвент сработал. Уж не ambient ли? Если ambient, то ахтунг. Как-то это всё криво. Может можно лучше? И заодно скрипт причесать... ::)