И снова DCI с ExternalParameter :(

Started by Alex, October 21, 2010, 12:03:40 PM

Previous topic - Next topic

Alex

Доброе время суток...
Есть скрипт, который написал. При запуске руками скрипт отрабатывает на ура.. Вызов из агента производится нормально. Данные от скрипт агент получает. Проблема заключается в консоли, которая говорит что с 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%)

Alex

#1
Написал вместо скрипта на 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


Alex

И еще выяснилось то, что 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

Victor Kirhenshtein

Добрый день!

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

Best regards,
Victor

Victor Kirhenshtein

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

Alex

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 секунды. Неужели агент плевать хотел на выставленный параметр? Можно как-то это еще проверить?

Victor Kirhenshtein

А сервер перезапустили после изменения параметра? Он читается только при старте. Еще я забыл про параметр агента ExecTimeout - время ожидания результата внешней программы. Он тоже по умолчанию 2 секунды. Попробуйте поставить

ExecTimeout = 5000

в nxagentd.conf.

Best regards,
Victor

Alex

Да, именно этот параметр помог. Спасибо Виктор...
Кстати почему-то в исходных файлах я его не увидел ((( Это задумка на будущее или же просто недокументированная фишка?

Victor Kirhenshtein

Этот параметр существует очень давно, просто его очень редко надо менять, только если внешние скрипты не укладываются по времени исполнения в тайм-аут по умолчанию. Он даже перечислен в User Manual'е в списке параметров агента, правда без особых комментариев по использованию :)

Alex

Спасибо Виктор за помощь. Дальше буду разбираться уже сам, почему часть скриптов не отрабатывает так, как надо :)))