NetXMS Support Forum

Russian Support => Общие вопросы => Topic started by: Alex on October 21, 2010, 12:03:40 PM

Title: И снова DCI с ExternalParameter :(
Post by: Alex on October 21, 2010, 12:03:40 PM
Доброе время суток...
Есть скрипт, который написал. При запуске руками скрипт отрабатывает на ура.. Вызов из агента производится нормально. Данные от скрипт агент получает. Проблема заключается в консоли, которая говорит что с 1970-го года DCI не опрашивался. Хотя в дебаге видно что опрашивается. При перенаправлении в другой файл данных, данные видны.. Т.е. скрипт с агентом дружит, но почему в консоли нет данных, понять не могу :(
Вызов в агенте осуществляется так:
ExternalParameter = PGW_Act_Calls(*):/users/scripts/pgw_stats/check_active_calls.sh $1 >> /tmp/pgw_error_log_netxms 2>&1
В консоли прописано
PGW_Act_Calls(host_ip_address)

P.S.> Кстати, можно как-то сделать универсально, чтоб использовать данный вызов из темплейтов, а не прописывать руками на каждый хост? Типа PGW_Act_Calls(%host_ip%)
Title: Re: И снова DCI с ExternalParameter :(
Post by: Alex on October 21, 2010, 12:41:43 PM
Написал вместо скрипта на sh, на перле...
Из дебага
[21-Oct-2010 09:49:37] H_ExternalParameter called for "PGW_Act_Calls(ip_host)" "E/usr/bin/perl /root/scripts/pgw_stats/check_active_call.pl $1"
[21-Oct-2010 09:49:37] H_ExternalParameter: command line is "/usr/bin/perl /root/scripts/pgw_stats/check_active_call.pl ip_host"
[21-Oct-2010 09:49:37] H_ExternalParameter (shell exec): worker thread created
[21-Oct-2010 09:49:41] H_ExternalParameter (shell exec): execution status 2
[21-Oct-2010 09:49:41] H_ExternalParameter/POpenWorker: worker thread pipe read result: 5

Title: Re: И снова DCI с ExternalParameter :(
Post by: Alex on October 21, 2010, 05:32:31 PM
И еще выяснилось то, что Agent почему-то опрашивает три раза подряд один и тот же скрипт.. Зачем понять не могу... Это дает нагрузку на опрашиваемое устройство.

[21-Oct-2010 14:24:00] [session:1] Sending message CMD_REQUEST_COMPLETED (size 48)
[21-Oct-2010 14:24:02] [session:1] Received message CMD_GET_PARAMETER
[21-Oct-2010 14:24:02] [session:1] Requesting parameter "PGW_Act_Calls(ip_host)"
[21-Oct-2010 14:24:02] H_ExternalParameter called for "PGW_Act_Calls(ip_host)" "E/usr/bin/perl /users/scripts/pgw_stats/check_active_call.pl $1"
[21-Oct-2010 14:24:02] H_ExternalParameter: command line is "/usr/bin/perl /users/scripts/pgw_stats/check_active_call.pl ip_host"
[21-Oct-2010 14:24:04] Incoming connection from NetXMS
[21-Oct-2010 14:24:04] Connection from NetXMS accepted
[21-Oct-2010 14:24:04] [session:0] Received control message CMD_GET_NXCP_CAPS
[21-Oct-2010 14:24:04] [session:0] Sending message CMD_NXCP_CAPS (size 16)
[21-Oct-2010 14:24:04] [session:0] Received message CMD_KEEPALIVE
[21-Oct-2010 14:24:04] [session:0] Sending message CMD_REQUEST_COMPLETED (size 32)
[21-Oct-2010 14:24:04] [session:0] Received message CMD_ENABLE_AGENT_TRAPS
[21-Oct-2010 14:24:04] [session:0] Sending message CMD_REQUEST_COMPLETED (size 32)
[21-Oct-2010 14:24:04] [session:0] Received message CMD_GET_PARAMETER
[21-Oct-2010 14:24:04] [session:0] Requesting parameter "PGW_Act_Calls(ip_host)"
[21-Oct-2010 14:24:04] H_ExternalParameter called for "PGW_Act_Calls(ip_host)" "E/usr/bin/perl /root/scripts/pgw_stats/check_active_call.pl $1"
[21-Oct-2010 14:24:04] H_ExternalParameter: command line is "/usr/bin/perl /users/scripts/pgw_stats/check_active_call.pl ip_host"
[21-Oct-2010 14:24:04] H_ExternalParameter (shell exec): worker thread created
[21-Oct-2010 14:24:04] H_ExternalParameter (shell exec): execution status 2
[21-Oct-2010 14:24:04] [session:1] Session with NetXMS closed
[21-Oct-2010 14:24:05] H_ExternalParameter/POpenWorker: worker thread pipe read result: 3
[21-Oct-2010 14:24:06] Incoming connection from NetXMS
[21-Oct-2010 14:24:06] Connection from NetXMS accepted
[21-Oct-2010 14:24:06] [session:1] Received control message CMD_GET_NXCP_CAPS
[21-Oct-2010 14:24:06] [session:1] Sending message CMD_NXCP_CAPS (size 16)
[21-Oct-2010 14:24:06] [session:1] Received message CMD_KEEPALIVE
[21-Oct-2010 14:24:06] [session:1] Sending message CMD_REQUEST_COMPLETED (size 32)
[21-Oct-2010 14:24:06] [session:1] Received message CMD_ENABLE_AGENT_TRAPS
[21-Oct-2010 14:24:06] [session:1] Sending message CMD_REQUEST_COMPLETED (size 32)
[21-Oct-2010 14:24:06] [session:1] Received message CMD_GET_PARAMETER
[21-Oct-2010 14:24:06] [session:1] Requesting parameter "PGW_Act_Calls(ip_host)"
[21-Oct-2010 14:24:06] H_ExternalParameter called for "PGW_Act_Calls(ip_host)" "E/usr/bin/perl /users/scripts/pgw_stats/check_active_call.pl $1"
[21-Oct-2010 14:24:06] H_ExternalParameter: command line is "/usr/bin/perl /users/scripts/pgw_stats/check_active_call.pl ip_host"
[21-Oct-2010 14:24:06] H_ExternalParameter (shell exec): worker thread created
[21-Oct-2010 14:24:06] H_ExternalParameter (shell exec): execution status 2
[21-Oct-2010 14:24:06] [session:0] Session with NetXMS closed
[21-Oct-2010 14:24:07] H_ExternalParameter/POpenWorker: worker thread pipe read result: 3


Версия NetXMS 1.0.3
Title: Re: И снова DCI с ExternalParameter :(
Post by: Victor Kirhenshtein on October 21, 2010, 11:13:53 PM
Добрый день!

3 раза - это retry. Если сервер получает тайм-аут в ответ на запрос параметра, он сбрасывает соединение, создает новое, и пробует получить параметр еще раз. Всего попыток делается 3. Похоже что скрипт исполняется слишком долго, и сервер не дожидается ответа от агента. Надо либо увеличить тайм-аут для запроса параметров (параметр сервера AgentCommandTimeout, default 2000 миллисекунд), или как-то переделать скрипт, чтобы он укладывался в 2 секунды.

Best regards,
Victor
Title: Re: И снова DCI с ExternalParameter :(
Post by: Victor Kirhenshtein on October 21, 2010, 11:17:13 PM
Quote from: Alex on October 21, 2010, 12:03:40 PM
P.S.> Кстати, можно как-то сделать универсально, чтоб использовать данный вызов из темплейтов, а не прописывать руками на каждый хост? Типа PGW_Act_Calls(%host_ip%)

Можно. Если в темплейте указать макрос %{node_primary_ip}, то при наложении на хост вместо него будет подставлен IP адрес хоста. Все макросы описаны в мануале в разделе 5.3.6.

Best regards,
Victor
Title: Re: И снова DCI с ExternalParameter :(
Post by: Alex on October 21, 2010, 11:38:33 PM
Quote from: Victor Kirhenshtein on October 21, 2010, 11:13:53 PM
(параметр сервера AgentCommandTimeout, default 2000 миллисекунд), или как-то переделать скрипт, чтобы он укладывался в 2 секунды.

Виктор, установил AgentCommandTimeout в 10000. Все равно судя по дебагу запрос производится 3-жды... Выставил для проверке в скрипте time(). Судя по отчету скрипт выполняется 2-2,5 секунды. Думается мне 10 секунд должно хватить. Также в дебаге вижу, что ретрейн осуществляется все те же 2 секунды. Неужели агент плевать хотел на выставленный параметр? Можно как-то это еще проверить?
Title: Re: И снова DCI с ExternalParameter :(
Post by: Victor Kirhenshtein on October 22, 2010, 01:54:42 PM
А сервер перезапустили после изменения параметра? Он читается только при старте. Еще я забыл про параметр агента ExecTimeout - время ожидания результата внешней программы. Он тоже по умолчанию 2 секунды. Попробуйте поставить

ExecTimeout = 5000

в nxagentd.conf.

Best regards,
Victor
Title: Re: И снова DCI с ExternalParameter :(
Post by: Alex on October 22, 2010, 03:04:10 PM
Да, именно этот параметр помог. Спасибо Виктор...
Кстати почему-то в исходных файлах я его не увидел ((( Это задумка на будущее или же просто недокументированная фишка?
Title: Re: И снова DCI с ExternalParameter :(
Post by: Victor Kirhenshtein on October 22, 2010, 05:45:49 PM
Этот параметр существует очень давно, просто его очень редко надо менять, только если внешние скрипты не укладываются по времени исполнения в тайм-аут по умолчанию. Он даже перечислен в User Manual'е в списке параметров агента, правда без особых комментариев по использованию :)
Title: Re: И снова DCI с ExternalParameter :(
Post by: Alex on October 22, 2010, 10:11:07 PM
Спасибо Виктор за помощь. Дальше буду разбираться уже сам, почему часть скриптов не отрабатывает так, как надо :)))