Возможность использования скриптов на сервере

Started by Alex, August 09, 2007, 10:50:28 AM

Previous topic - Next topic

Victor Kirhenshtein

Проблема в том, что этот скрипт долго работает. На моем компе это выглядит так:


victor@stone:~/netxms$ date && /usr/local/sbin/e1_ms.sh 10.0.0.2 && date
Thu Apr 10 10:12:18 EEST 2008
1
Thu Apr 10 10:12:22 EEST 2008
victor@stone:~/netxms$


У агента есть тайм-аут на выполнение внешних команд, по умолчанию 2 секунды. Если команда не успевает завершиться за это время, то агент возвращает ошибку. Это время можно увеличить, изменив значение параметра ExecTimeout в конфиге агента (значения в миллисекундах). Кроме того, у сервера тоже есть тайм-аут на ожидание ответа на запрос к агенту - те-же 2 секунды по умолчанию. Меняется настройкой параметра сервера AgentCommandTimeout.

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

Victor Kirhenshtein

Кстати, а почему бы для пингов не использовать PING субагент? Он специально для этого предназначен...

Alex

2 Виктор, по-моему Вы через чур правы о PING SubAgent-е :)
По поводу отработки скрипта долго. Разумеется будет долго отрабатывать, ибо в коде посылается 5 пакетов для проверки узла. В среднем уходит 1-1.5 секунды на один запрос.

2 isherim. А я как раз на linux-е и тестил скрипт. У меня для тестов стоит Ubuntu 7. На ней и тестил скрипт.

isherim

спасибо
да, причина именно в этом.
А субагент не использовал сугубо по причине первого машинального телодвижения в сторону стандартных средств ОС-и.
а & и говорит об отправке вывода результата в нуль.
Оставил 2 пакета - работает.

Alex

Quote from: isherim on April 10, 2008, 10:34:22 AM
спасибо
да, причина именно в этом.
А субагент не использовал сугубо по причине первого машинального телодвижения в сторону стандартных средств ОС-и.
а & и говорит об отправке вывода результата в нуль.
Оставил 2 пакета - работает.

Мне всю жизнь казалось что > и >> это и есть перенаправление куда-либо, хоть в тот же /dev/null. :( Пойду учить МАТЧАСТЬ значится.

isherim

Кто бы еще подсказал, как сделать, чтобы алармы навешанные на разные dci(однотипные) не укладывались в один аларм(т.е. хотя dci разные, просто увеличивается счетчик алармов). Есть ли способ помимо создания отдельных эвентов на каждый dci? 

Alex

На сколько я понимаю это можно. Необходимо насоздавать алармов и затем указывать ноды в Source-ах. Т.е. на сколько я помню можно для каждой ноды свои алармы создать на все случаи жизни.

Victor Kirhenshtein

Счетчик алармов увеличивается если у алармов совпадают ключи. Надо делать ключ на основе DCI ID, скажем добавлять _%5 к ключу.

isherim

Спасибо, понятно.
Алексу:
Насоздавать алармов и кучу нод - коряво.
Наряднее подключать сразу контейнерами. Через префикс ключа нормально отрабатывает.

Alex

isherim я предложил может и бредовый вариант, но это тот, который первым пришел мне в голову.. Может есть и другие, не знаю.. Может Виктор подскажет?

isherim

Не бредовый. Просто громоздкий.
Виктор уже предложил более правильный и компактный - добавлением префикса к ключу. Иначе и пришлось бы делать как ты предложил.

Alex

Вылезла не понятная проблема.
Есть 4 Cisco. Есть внешний скрипт. На всех 4-х прописан Trusted Node сервер с NetXMS-ом (у меня и агент и сервер на одном хосте), а в trusted hosts netxms node-ы, прописал все эти 4 Cisco на всякий случай. в nxagentd.conf прописаны строки:
ExternalParameter = SipOrig(*):/usr/bin/perl /root/scripts/sip_stat/originate.pl $1
ExternalParameter = SipAnswer(*):/usr/bin/perl /root/scripts/sip_stat/answer.pl $1

Самое интересное вот в чем. На двух Cisco работает все и данные получаются, а на оставшихся двух нет. Настройки идентичны. Пытался включить дебаг и агента и сервера, нет данных по вызову.
Прописал в скрипте строчку, чтоб в отдельный файл писал ключ-значение (где ключ это IP ноды, а значение число полученное при выполнении скрипта). Так вот, запросы к скриптам даже не приходят. В чем может быть дело? Есть какое-то ограничение или что-то в этом роде?

Victor Kirhenshtein


isherim

Quote from: Alex on November 20, 2008, 10:40:26 AM
Вылезла не понятная проблема.
Есть 4 Cisco. Есть внешний скрипт. На всех 4-х прописан Trusted Node сервер с NetXMS-ом (у меня и агент и сервер на одном хосте), а в trusted hosts netxms node-ы, прописал все эти 4 Cisco на всякий случай. в nxagentd.conf прописаны строки:
ExternalParameter = SipOrig(*):/usr/bin/perl /root/scripts/sip_stat/originate.pl $1
ExternalParameter = SipAnswer(*):/usr/bin/perl /root/scripts/sip_stat/answer.pl $1

Самое интересное вот в чем. На двух Cisco работает все и данные получаются, а на оставшихся двух нет. Настройки идентичны. Пытался включить дебаг и агента и сервера, нет данных по вызову.
Прописал в скрипте строчку, чтоб в отдельный файл писал ключ-значение (где ключ это IP ноды, а значение число полученное при выполнении скрипта). Так вот, запросы к скриптам даже не приходят. В чем может быть дело? Есть какое-то ограничение или что-то в этом роде?
А тело скриптов не покажешь? Тоже нужно количество звонков смотреть, а времени нету совсем...

Alex

Да скрипты очень простые. Я не стал делать все в одном файлике, сделал разделение по разным. Чтоб проще было.

Скрипт на терминацию:

#!/usr/bin/perl

if ($#ARGV != 0) {
print "usage: $0 host_ip\n";
  exit;
}

$host = $ARGV[0];

open(rsh, "/usr/bin/rsh $host \"show sip-ua calls | i UAS\" |");
while (<rsh>) {
    $str=$_;
    $str = (/calls: (\d+)/);
    $num = $1;
    $num = 0 if ($num eq "");
}
close (rsh);
print "$num\n";


Скрипт на Оригинацию:

#!/usr/bin/perl

if ($#ARGV != 0) {
print "usage: $0 host_ip\n";
  exit;
}

$host = $ARGV[0];

open(rsh, "/usr/bin/rsh $host \"show sip-ua calls | i UAC\" |");
while (<rsh>) {
    $str=$_;
    $str = (/calls: (\d+)/);
    $num = $1;
    $num = 0 if ($num eq "");
}
close (rsh);
print "$num\n";


Скрипты идентичны, за исключением поисковой строки. Можно чуток увеличить код, и сделать все в одном файлике. Может тока путь до rsh тебе придется поменять. Ибо кто как ставит называется :)