Ad Widget

Collapse

Агент на Windows возвращает []

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Andrey Dyukin
    Junior Member
    • Jul 2015
    • 22

    #1

    Агент на Windows возвращает []

    Всем доброго времени суток. Такая проблема:
    Сервер 3.0.3, агент 3.0.0 на Win.
    Иногда случается такая проблема - агент начинает вместо данных посылать пустое значение. В расширенных логах вот такое:
    Code:
    5520:20160621:234216.879 EXECUTE_STR() command:'PowerShell.exe -ExecutionPolicy UnRestricted -File C:\Zabbix\soft\soft.ps1 & type C:\zabbix\soft\result.txt' len:0 cmd_result:''
    5520:20160621:234216.879 for key [soft] received value []
    Если дернуть скрипт вручную, получаю нормальное значение.
    Проблема пока появлялась на Win 10 и Win Server 2012R2.

    Перезапуск службы не помогает, только ребут. Но потом проблема проявляется снова.
    Сталкивался кто-нибудь еще с таким?
    Спасибо!
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #2
    Originally posted by Andrey Dyukin
    Всем доброго времени суток. Такая проблема:
    Сервер 3.0.3, агент 3.0.0 на Win.
    Иногда случается такая проблема - агент начинает вместо данных посылать пустое значение.
    Если дернуть скрипт вручную, получаю нормальное значение.
    Так и, как вы пишете, [] у вас приходит иногда, а не всегда. Банальная теория вероятности.

    Но, для начала, я бы обратил внимание на & type C:\zabbix\soft\result.txt - всегда ли он формируется. И нужно ли вообще стримить в файл, который потом стримить в stdout.

    Таймауты исключили, полагаю?

    Comment

    • glebs.ivanovskis
      Senior Member
      • Jul 2015
      • 237

      #3
      Я слышал об одном случае, когда агент вроде бы запускал cmd, а cmd тупо не запускалась... Система была очень нагруженная. Тоже помог ребут системы, больше вроде бы проблема не появлялась. Windows

      Comment

      • Andrey Dyukin
        Junior Member
        • Jul 2015
        • 22

        #4
        Так и, как вы пишете, [] у вас приходит иногда, а не всегда. Банальная теория вероятности.
        Ну не столько теория. Когда начинает приходить [], реальное значение уже не приходит до ребута.

        Но, для начала, я бы обратил внимание на & type C:\zabbix\soft\result.txt - всегда ли он формируется. И нужно ли вообще стримить в файл, который потом стримить в stdout.
        Согласен, надо наверное переделать, но это только один из айтемов по которому приходит пустое значение. В других айтемах есть и просто ps скрипты и vbs скрипты, результат один и тот же.

        Таймауты исключили, полагаю?
        Да, 30 на стороне сервера и 30 на стороне агента

        Comment

        • Andrey Dyukin
          Junior Member
          • Jul 2015
          • 22

          #5
          Originally posted by glebs.ivanovskis
          Я слышал об одном случае, когда агент вроде бы запускал cmd, а cmd тупо не запускалась... Система была очень нагруженная. Тоже помог ребут системы, больше вроде бы проблема не появлялась. Windows
          МНе бы так) После первого ребута, тоже было ощущение, что больше не повторится.

          Может где-то есть уже скомпилированный агент версии 3.0.3?
          Мне вот стойко кажется что проблема на стороне агента.

          Comment

          • sadman
            Senior Member
            • Dec 2010
            • 1611

            #6
            Проблема может быть на стороне агента, но не в нем самом.
            Если ошибка воспроизводима или, во всяком случае стабильна, то я бы, в общем случае, влепил в в начало и конец test.cmd выводы в log-файл таймштампы и результат работы скрипта. Из них можно будет судить - отваливается по таймауту ли или просто значения не формирует.

            Сами же понимаете, что о абстрактно-сферическом .ps1, находящемся в абсолютном Windows можно предполагать что угодно и заниматься этим бесконечно. Я сталкивался с затыками, когда начинал плотно опрашивать WSUS через Zabbix-агента и POSH. Просто WSUS неторопливый, а если его начать в десяток потоков атаковать, то кончается это плачевно. А так-то разок запущенный скрипт рисовал всё очень красиво. В итоге пришлось реже опрашивать.

            Comment

            • Andrey Dyukin
              Junior Member
              • Jul 2015
              • 22

              #7
              Проверил скрипт, отрабатывает корректно. Только Агент все еще не видит значения.
              Last edited by Andrey Dyukin; 22-06-2016, 17:45. Reason: ошибки

              Comment

              • fafhrd
                Junior Member
                • Mar 2016
                • 15

                #8
                попробуй увеличить в конфиге:
                /etc/zabbix/zabbix_server.conf
                Timeout=15

                Comment

                • sadman
                  Senior Member
                  • Dec 2010
                  • 1611

                  #9
                  Originally posted by Andrey Dyukin
                  Проверил скрипт, отрабатывает корректно. Только Агент все еще не видит значения.
                  Если рядом положить скрипт с 'echo 1' и читать их одновременно - будут значения пропадать так же?

                  Comment

                  • Andrey Dyukin
                    Junior Member
                    • Jul 2015
                    • 22

                    #10
                    попробуй увеличить в конфиге:
                    /etc/zabbix/zabbix_server.conf
                    Timeout=15
                    Таймауты по 30 на обеих сторонах

                    Если рядом положить скрипт с 'echo 1' и читать их одновременно - будут значения пропадать так же?
                    Если в конфиге даже прописать к параметру команду "echo 1", все равно приходит пустое значение.
                    НО! Если запускать агент из cmd с параметрами, он выдает нужные значения.
                    Дико странная какая то ситуация

                    Comment

                    • Andrey Dyukin
                      Junior Member
                      • Jul 2015
                      • 22

                      #11
                      Еще момент - если перезапустить службу под учеткой с правами локального админа, данные тут же приходят. Если тут уже перезапустить из под системы, снова пустота.

                      Comment

                      • sadman
                        Senior Member
                        • Dec 2010
                        • 1611

                        #12
                        Originally posted by Andrey Dyukin
                        Если в конфиге даже прописать к параметру команду "echo 1", все равно приходит пустое значение.
                        НО! Если запускать агент из cmd с параметрами, он выдает нужные значения.
                        Дико странная какая то ситуация
                        Ничего странного нет. Возможно вы помните, что в MS-DOS в памяти всегда болтался command.com. При запуске исполняемого файла он выгружался практически весь (за исключением маленького резидентного модуля), а при завершении работы вгружался вновь. Поэтому казалось, что команды MS-DOS выполняются всегда. Но это не так - их работу обеспечивала командный интерпретатор, который располагался в UserSpace, так сказать.

                        В Windows всё схоже. cmd.exe - он, конечно, echo выполняет. Но проблема в том, что он так же, как и command.com не располагается в ядре, а представляет собой равноправную с остальными процессами программу.

                        Теперь давайте обратимся к скрижалям:
                        Code:
                        int	zbx_execute(const char *command, char **buffer, char *error, size_t max_error_len, int timeout) {
                        ...
                        #ifdef _WINDOWS
                        ...
                        	if (0 == CreateProcess(NULL, wcmd, NULL, NULL, TRUE, CREATE_SUSPENDED, NULL, NULL, &si, &pi))
                        	{
                        		zbx_snprintf(error, max_error_len, "unable to create process [%s]: %s",
                        				cmd, strerror_from_system(GetLastError()));
                        		goto close;
                        	}
                        ...
                        #else	/* not _WINDOWS */
                        ...
                        #endif	/* _WINDOWS */
                        }
                        Как можно видеть - никакого командного интерпретатора тут не упоминается. Поэтому и echo не работает. А вот cmd.exe /c echo 1 - просто не может не работать.

                        Возникает резонный вопрос - а почему под Linux работает без ужимок и прыжков? Я вижу две причины:
                        1) Иначе организован запуск команды
                        Code:
                        static int	zbx_popen(pid_t *pid, const char *command) {
                        	execl("/bin/sh", "sh", "-c", command, NULL);
                        
                        }
                        2) Команда - сама по себе исполняемый файл, а не интерпретируемое интерпретатором схожее сочетание букв.
                        Code:
                        $ which echo
                        /bin/echo
                        Поэтому возвращайтесь на первую базу и снова попробуйте echo 1

                        Comment

                        • sadman
                          Senior Member
                          • Dec 2010
                          • 1611

                          #13
                          Originally posted by Andrey Dyukin
                          Еще момент - если перезапустить службу под учеткой с правами локального админа, данные тут же приходят. Если тут уже перезапустить из под системы, снова пустота.
                          Как видите - решение вопроса при наличии абстрактного .ps1 невозможно.

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

                          Comment

                          Working...