Ad Widget

Collapse

Какой тип агента предпочтительнее для за

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Daria B.
    Junior Member
    • Jan 2017
    • 20

    #1

    Какой тип агента предпочтительнее для за

    Добрый день.

    Относительно недавно начали использовать zabbix. Используем версию 3.0.4. Сейчас настроено около 300 хостов, но ожидаемый объем - порядка 2000. Пока использовали исключительно пассивные проверки (элементы данных с типом "Zabbix агент" для мониторинга таких параметров, как CPU, RAM и т.д.).

    Возникла необходимость также выполнять на хостах определенные скрипты, собирающие данные. Планируем их настроить через UserParameter в конфигурационных файлах агентов. Вопрос: какой элемент данных для этой цели лучше всего использовать - "zabbix агент" или "zabbix агент (активный)" и почему ? В официальной документации и прочих источниках в сети, к сожалению, не удалось найти однозначного ответа на это. Большая часть статей сводится к тому, что активные проверки позволяют уменьшить нагрузку на сервер за счет отказа от одной большой общей очереди, обслуживаемой сервером, и возможности буферизации данных перед отправкой в случае активного агента. Действительно ли это так? Если да, то можем ли мы организовать выполнение скриптов через активные проверки на одном хосте с одновременно работающими пассивными проверками (уже настроенными ранее), или правильнее все проверки для нашего сервера заменить на активные ? Или же, наоборот, можно делать все, включая запуск скриптов, через пассивные проверки? Иными словами, исходя из чего нам выбрать тип элементов данных для запуска скриптов?

    И, возможно, кто-то поделится опытом в настройке zabbix для большого числа хостов (1-2 тысячи) - какое архитектурное решение лучше использовать (необходимость прокси-сервера, тип агентов и пр.)?

    Заранее спасибо!
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #2
    Originally posted by Daria B.
    Большая часть статей сводится к тому, что активные проверки позволяют уменьшить нагрузку на сервер за счет отказа от одной большой общей очереди, обслуживаемой сервером, и возможности буферизации данных перед отправкой в случае активного агента. Действительно ли это так?
    Действительно.

    Если да, то можем ли мы организовать выполнение скриптов через активные проверки на одном хосте с одновременно работающими пассивными проверками (уже настроенными ранее)
    Можете.

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

    Вот, тут есть немного информации по поводу активных проверок и всего такого: https://www.zabbix.com/forum/showthread.php?t=53086

    Если кратко, то я бы для себя делал так: все системные параметры, которые получаются быстро (например из реестра или из счетчиков) и не требуют особых периодов обработки (например - ночью опрашивать реже), собирал в активном режиме. Длительные процедуры - от 3-х секунд - в пассивном, чтобы не задерживать собирающий тред. Результаты черезвычайно продолжительных - закидывал бы через Zabbix sender.

    Comment

    • yukra
      Senior Member
      • Apr 2013
      • 1359

      #3
      Originally posted by sadman
      Если кратко, то я бы для себя делал так: все системные параметры, которые получаются быстро (например из реестра или из счетчиков) и не требуют особых периодов обработки (например - ночью опрашивать реже), собирал в активном режиме. Длительные процедуры - от 3-х секунд - в пассивном, чтобы не задерживать собирающий тред. Результаты черезвычайно продолжительных - закидывал бы через Zabbix sender.
      Коллега, либо вы попутали "активные" и "пассивные" проверки, либо у нас взаимнопротивоположные взгляды на этот аспект. Как по мне, так активные проверки как раз следует применять на "тяжелых" скриптах, которые могут отрабатывать 3-5 секунд, а пассивные для выдачи циферки из /proc(или счетчика, если мы про винду), на то, что считается больше 3-5 секунд - согласен, нужно применять трапперы (кстати их отправку можно инициализировать из пассивной проверки: дергается UserParameter, который сразу возвращает условный 1 (задача получена, сервер соединение закрывает и переходит к след. проверкам), а потом выполняются "долгие" вычисления и траппером присылается ответ (правда уже в другой айтем)).

      Comment

      • sadman
        Senior Member
        • Dec 2010
        • 1611

        #4
        Originally posted by yukra
        Коллега, либо вы попутали "активные" и "пассивные" проверки, либо у нас взаимнопротивоположные взгляды на этот аспект. Как по мне, так активные проверки как раз следует применять на "тяжелых" скриптах, которые могут отрабатывать 3-5 секунд, а пассивные для выдачи циферки из /proc(или счетчика, если мы про винду)
        Я уже, с целью разгрузки Zabbix server-а, использовал активные проверки для PowerShell-скриптов, выполняющихся 5..10 секунд. При превышении некоторого числа элементов значения перестали попадать в Zabbix, так как при однопоточной обработке "активных" элементов данных запросы метрик (запуски внешних скриптов) игнорируются, если в момент инициации опроса этот единственный поток уже чем-то занят. Локальной очереди на агенте нет.

        А вот метрики, которые опрашиваются быстро, вполне себе пролетают в этом потоке огромными пачками и такими же пачками вкидываются в траппер (процесс) Zabbix-а. Вижу это на перловом TCP-сервере, который отдает значения метрик в "активные" элементы данных.

        У меня такая практика. Можете поделиться своей.

        Comment

        • Daria B.
          Junior Member
          • Jan 2017
          • 20

          #5
          Спасибо за ответы. Пока склоняемся к пассивным проверкам (разумеется, при длительности менее 30 с), тем более что при сочетании пассивных и активных проверок на одном хосте у нас периодически возникает ошибка (https://www.zabbix.com/forum/showthread.php?t=56711) - не сталкивались с этим ?

          И проконсультируйте, пожалуйста, насчет этого:
          Originally posted by yukra
          (кстати их отправку можно инициализировать из пассивной проверки: дергается UserParameter, который сразу возвращает условный 1 (задача получена, сервер соединение закрывает и переходит к след. проверкам), а потом выполняются "долгие" вычисления и траппером присылается ответ (правда уже в другой айтем)).
          Каким образом организовать выполнение длительных вычислений и вызов sender-а в скрипте уже после возврата результата серверу? Это было бы удобно.

          Comment

          • sadman
            Senior Member
            • Dec 2010
            • 1611

            #6
            Originally posted by Daria B.
            тем более что при сочетании пассивных и активных проверок на одном хосте у нас периодически возникает ошибка
            У меня не возникает. Но сеточка у меня небольшая, так что может просто не дорос ))


            Каким образом организовать выполнение длительных вычислений и вызов sender-а в скрипте уже после возврата результата серверу?
            Мне кажется, что для конкретных примеров уже нужно определяться с OS, под которой мониторите. Админу отфоркнуть процесс в *nix на порядки легче, чем под Windows, к примеру.

            Это было бы удобно.
            Я имею на этот счет противоположное мнение.

            Comment

            • Daria B.
              Junior Member
              • Jan 2017
              • 20

              #7
              Originally posted by sadman
              Мне кажется, что для конкретных примеров уже нужно определяться с OS, под которой мониторите. Админу отфоркнуть процесс в *nix на порядки легче, чем под Windows, к примеру.
              Сейчас интересует настройка скриптов на Windows-хостах.

              Originally posted by sadman
              Я имею на этот счет противоположное мнение.
              Мы просто пытаемся найти вариант запуск sender-а для долгих скриптов без настройки его через Планировщик заданий Windows. Если использовать пассивную проверку, а в UserParameter прописать вызов скрипта, где уже вызывается sender и заполняет нужный нам итем с типом "Траппер" - не удастся обойти ограничение в 30 секунд. Пользователь Yukra как раз упомянул, что в таком случае можно сразу вернуть искусственно созданный результат и продолжить собственно сами вычисления и вызов sender-а. Вот и хотелось бы узнать подробности.

              Comment

              • sadman
                Senior Member
                • Dec 2010
                • 1611

                #8
                Originally posted by Daria B.
                Пользователь Yukra как раз упомянул, что в таком случае можно сразу вернуть искусственно созданный результат и продолжить собственно сами вычисления и вызов sender-а. Вот и хотелось бы узнать подробности.
                Я вспомнил. Есть у командного интерпретатора такая команда: http://ss64.com/nt/start.html - позволяет запустить cmd без ожидания его завершения.

                Т.е. первый cmd, тот что в UserParameter, должен запустить долгий процесс через start, сразу сделать echo 1 и завершиться. Второй же через zabbix sender закидывает результат на Zabbix Server.

                Comment

                • Daria B.
                  Junior Member
                  • Jan 2017
                  • 20

                  #9
                  Спасибо! Попробуем.

                  Comment

                  • yukra
                    Senior Member
                    • Apr 2013
                    • 1359

                    #10
                    Я уже, с целью разгрузки Zabbix server-а, использовал активные проверки для PowerShell-скриптов, выполняющихся 5..10 секунд. При превышении некоторого числа элементов значения перестали попадать в Zabbix, так как при однопоточной обработке "активных" элементов данных запросы метрик (запуски внешних скриптов) игнорируются, если в момент инициации опроса этот единственный поток уже чем-то занят. Локальной очереди на агенте нет.
                    Хм, видимо у нас разные сценарии. У меня на активные проверки вынесено довольно мало айтемов и они с достаточно большим периодом опроса, видимо очередь не успевает образовываться. Буду иметь ввиду на будущее. А эта особенность (один поток для активных проверок) имеется только под windows или под linux ситуация аналогична? (судя по косвенным признакам в документации - аналогична).

                    Originally posted by Daria B.
                    Пользователь Yukra как раз упомянул, что в таком случае можно сразу вернуть искусственно созданный результат и продолжить собственно сами вычисления и вызов sender-а. Вот и хотелось бы узнать подробности.
                    Я, к счастью, с windows дела имею редко, но вариант от sadman'a, кмк, должен сработать.

                    Comment

                    • Kos
                      Senior Member
                      Zabbix Certified SpecialistZabbix Certified Professional
                      • Aug 2015
                      • 3404

                      #11
                      Originally posted by yukra
                      А эта особенность (один поток для активных проверок) имеется только под windows или под linux ситуация аналогична? (судя по косвенным признакам в документации - аналогична).
                      Я как раз недавно ковырялся в исходниках агента именно этой версии (3.0.4) для самообразования. Могу подтвердить/уточнить: для активных проверок используется отдельный тред (реально - процесс), по одному треду на каждый из серверов, перечисленных в конфиге агента в параметре "ServerActive=".

                      Comment

                      • Daria B.
                        Junior Member
                        • Jan 2017
                        • 20

                        #12
                        Originally posted by sadman
                        Я вспомнил. Есть у командного интерпретатора такая команда: http://ss64.com/nt/start.html - позволяет запустить cmd без ожидания его завершения.

                        Т.е. первый cmd, тот что в UserParameter, должен запустить долгий процесс через start, сразу сделать echo 1 и завершиться. Второй же через zabbix sender закидывает результат на Zabbix Server.
                        Что-то не получается настроить. В UserParameter пишем следующее:
                        UserParameter=senderTest2,echo 1 & start "" "powershell" -NoProfile -ExecutionPolicy Bypass -file "C:\ShellScripts\TestScript.ps1"
                        В скрипте TestScript.ps1 искусственно введено ожидание более 30 секунд. В итоге на сервере получаем ошибку "Get value from agent failed: ZBX_TCP_READ() timed out". Т.е. почему-то после возврата 1 ожидается выполнение скрипта, хотя не должно, ключ WAIT в вызове START мы не используем.

                        Если вызвать просто в cmd команду <echo 1 & start "" "powershell" -NoProfile -ExecutionPolicy Bypass -file "C:\ShellScripts\TestScript.ps1"> - отрабатывает, как нужно: выводится 1 и сразу ожидание следующей команды, а в отдельном окне выполнение скрипта powerShell.

                        Не подскажите, в чем дело ?

                        Comment

                        • Daria B.
                          Junior Member
                          • Jan 2017
                          • 20

                          #13
                          Пробовали с .bat файлом - результат тот же:

                          UserParameter=senderTest2,echo 1 & start "" "c:\ShellScripts\Test.bat"

                          Comment

                          • Daria B.
                            Junior Member
                            • Jan 2017
                            • 20

                            #14
                            Дело, похоже, не в ожидании скрипта. Убирали sleep из скрипта - результат тот же. Почему-то при совместном использовании echo и start сервер не воспринимает результат команды echo.

                            Пробовали убрать & - поместили в отдельный cmd-файл вызов echo и start по очереди, а в UserParameter просто оставили вызов этого файла - не помогло.

                            Не подскажите, как правильно настроить ?

                            Comment

                            • Kos
                              Senior Member
                              Zabbix Certified SpecialistZabbix Certified Professional
                              • Aug 2015
                              • 3404

                              #15
                              Originally posted by Daria B.
                              Пробовали с .bat файлом - результат тот же:

                              Code:
                              UserParameter=senderTest2,echo 1 & start "" "c:\ShellScripts\Test.bat"
                              Дело, похоже, не в ожидании скрипта. Убирали sleep из скрипта - результат тот же. Почему-то при совместном использовании echo и start сервер не воспринимает результат команды echo.
                              1) команда start должна запускать бинарник, т.е. в случае батника - CMD.EXE. Правильно будет что-то вроде:
                              Code:
                              UserParameter=senderTest2,echo 1 & start "" CMD /C "c:\ShellScripts\Test.bat"
                              2) к сожалению, проблему запуска "долгоиграющих" процессов это всё равно не решает. Судя по официальной документации,
                              Zabbix-агент будет ожидать не только завершения порождённого им процесса, но и того момента, пока этот процесс и все его потомки закроют со своей стороны открытый конвейер. Причём, их сторона конвейера - это не только stdout, но и stderr. Поэтому так просто "в лоб" задача не решается

                              Пример:
                              Code:
                              UserParameter=test[*],echo 1 & start "" CMD /C dir /s C:\$1
                              С помощью команды zabbix_get пытаемся забрать метрику "test[TMP]" (директория с относительно небольшим количеством файлов). Видим, что на долю секунды запускается процесс CMD, после чего получаем результат (единичку от команды "echo 1").

                              Вторая попытка: забираем метрику "test[WINDOWS]" (где лежит куча файлов, и обход этой директории занимает минуты). Видим, что запускается процесс CMD, который идёт 3 секунды (стандартный тайм-аут на агенте), после чего прибивается агентом, и лишь после этого получаем результат (ZBX_NOTSUPPORTED). Ожидаемой единицы так и не получили, т.к. Zabbix-агент завершил выполнение порождённых им процессов, принудительно завершив их по тайм-ауту.

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

                              Comment

                              Working...