Доброе время суток...
Есть скрипт, который написал. При запуске руками скрипт отрабатывает на ура.. Вызов из агента производится нормально. Данные от скрипт агент получает. Проблема заключается в консоли, которая говорит что с 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%)
Написал вместо скрипта на 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
И еще выяснилось то, что 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
Добрый день!
3 раза - это retry. Если сервер получает тайм-аут в ответ на запрос параметра, он сбрасывает соединение, создает новое, и пробует получить параметр еще раз. Всего попыток делается 3. Похоже что скрипт исполняется слишком долго, и сервер не дожидается ответа от агента. Надо либо увеличить тайм-аут для запроса параметров (параметр сервера AgentCommandTimeout, default 2000 миллисекунд), или как-то переделать скрипт, чтобы он укладывался в 2 секунды.
Best regards,
Victor
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
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 секунды. Неужели агент плевать хотел на выставленный параметр? Можно как-то это еще проверить?
А сервер перезапустили после изменения параметра? Он читается только при старте. Еще я забыл про параметр агента ExecTimeout - время ожидания результата внешней программы. Он тоже по умолчанию 2 секунды. Попробуйте поставить
ExecTimeout = 5000
в nxagentd.conf.
Best regards,
Victor
Да, именно этот параметр помог. Спасибо Виктор...
Кстати почему-то в исходных файлах я его не увидел ((( Это задумка на будущее или же просто недокументированная фишка?
Этот параметр существует очень давно, просто его очень редко надо менять, только если внешние скрипты не укладываются по времени исполнения в тайм-аут по умолчанию. Он даже перечислен в User Manual'е в списке параметров агента, правда без особых комментариев по использованию :)
Спасибо Виктор за помощь. Дальше буду разбираться уже сам, почему часть скриптов не отрабатывает так, как надо :)))