Ad Widget

Collapse

Zabbix iperf3 client interval checks

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • poxeron
    Member
    • Sep 2020
    • 52

    #1

    Zabbix iperf3 client interval checks

    Ребята , здравствуйте. Нуждаюсь в Вашей помощи .

    Есть куча железяк ubiquiti edgeRouterX .
    Необходимо данные железяки опрашивать по iperf3 (замерять пропускную способность\скорость).

    Данная железака , как бы на убунте , но имеет очень сокращенный вариант.
    Поставить Zabbix agent - не получилось .
    Допускаю, что просто не доставил нужные файлы в нужные папки.

    В итоге к чему пришел.

    Смог запустить на данной железяке iperf3 сервер , как демон + добавил в автозагрузку.

    Смог создать скрипт строку опроса (iperf3 -c {HOST.CONN} -f m -R -p5201 | awk '/sender/{print $7}') и iperf3 -c {HOST.CONN} -f m -R -p5201 | awk '/receiver/{print $7}' . Одна строчка возвращает значение допустим 55mb/s и другая строчка возвращает значение. 59mb/s


    Осталось только научить заббикс обрабатывать данные значения + делать это автоматически и с постройкой графиков.

    А вот тут уже не получается. Пробую сделать "внешнюю проверку" просто эту строчку или system.run[iperf3 -c {HOST.CONN} -f m -R -p5201 | awk '/sender/{print $7}'] - тест валится.


    Пожалуйста, подскажите как реализовать задуманное.

    Может есть совершенно другие варианты, о которых я не знаю .

    Заранее большое спасибо
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Для начала нужно определиться, где Вы хотите этот скрипт запускать.
    Проверка через system.run[...] делает запрос к агенту Zabbix (который, как я понял, Вам поставить на "железяки" не удалось).
    Внешняя проверка всегда запускает скрипт на Zabbix-сервере (или Zabbix-прокси), причём скрипт должен быть оформлен в виде отдельного файла и положен в папку, указанную в конфиг-файле Zabbix-сервера (или прокси).
    Если хочется использовать именно агента Zabbix, то я бы попробовал использовать не рекомендации для Убунты, а отдельного "универсального" агента под Linux - он собран со статическими библиотеками и имеет минимум зависимостей (надо только выбрать правильную архитектуру - 32 или 64 бит). Тогда штатный вариант запуска скриптов - через UserParameter.

    Comment


    • poxeron
      poxeron commented
      Editing a comment
      Kos, спасибо большое , что не прошли мимо и отреагировали.

      Сейчас буду пробовать .
  • poxeron
    Member
    • Sep 2020
    • 52

    #3

    1) скачал архив. внутри 3 папки (bin,conf, sbin)
    2) раскидал файлы по папкам системы.
    3) пробовал запустисть zabbix_agentd - не могло найти файл.
    4) отредактировал $PATH .
    5) сейчас при запуске zabbix_agentd (любой пользователь , включая root)

    root@ubnt:/home/ubnt# /usr/sbin/zabbix_agentd
    bash: /usr/sbin/zabbix_agentd: cannot execute binary file

    6) пробовал и версии i386 и amd64.

    нарыл инфо, что используется процессор Dual-Core 880 MHz, MIPS1004Kc .
    Поэтому , думаю попытки с установкой zabbix agenta можно оставить .


    Comment

    • poxeron
      Member
      • Sep 2020
      • 52

      #4
      Прошу помощи , по поводу UserParameters. Запутался. Казалось бы все просто, но это не так.


      Если просто с консоли zabbix servera запускаю команду /usr/bin/iperf3 -c 10.1.24.9 -f m -R -p5201 | awk '/sender/{print $7}' - отрабатывает корректно. Получаю скорость отправителя. допустим 80Мб

      Попытка 1:
      а) создал UserParameter = iperf3.checks, /usr/bin/iperf3 -c 10.1.24.9 -f m -R -p5201 | awk '/sender/{print $7}'

      б) создаю элемент данных/item
      с) выбираю тип проверки . т.к заббикс агент установить не удалось , то и заббикс агент в качестве типа проверки я выбрать не могу. Если же принудительно это следать , про при тесте получаю =
      Get value from agent failed: cannot connect to [[10.1.24.9]:10050]: [111] Connection refused. Что абсолютно логично

      Попытка 2, 3 , n+1 показаны на скрина , но тоже далеко не все.

      Click image for larger version

Name:	timeout.png
Views:	1150
Size:	63.3 KB
ID:	410254Click image for larger version

Name:	path.png
Views:	1144
Size:	63.4 KB
ID:	410255Click image for larger version

Name:	Ключ.png
Views:	1135
Size:	62.8 KB
ID:	410256

      Comment

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

        #5
        нарыл инфо, что используется процессор Dual-Core 880 MHz, MIPS1004Kc .
        Поэтому , думаю попытки с установкой zabbix agenta можно оставить .
        Тогда увы - конечно, если аппаратная платформа другая, то агент не заработает.
        Можно, разве что, попытаться собрать его из исходников самому (это не так сложно, но нужен компилятор Си под нужную платформу).
        Но моё изначальное замечание осталось без ответа:
        Для начала нужно определиться, где Вы хотите этот скрипт запускать.
        Если я правильно понял Вашу фразу:
        Если просто с консоли zabbix servera запускаю команду /usr/bin/iperf3 -c 10.1.24.9 -f m -R -p5201 | awk '/sender/{print $7}' - отрабатывает корректно. Получаю скорость отправителя. допустим 80Мб
        , - то запуск на сервере Zabbix Вас вполне устраивает. Если так, то можно предложить два варианта:

        1. Запускать на сервере Zabbix, используя агента Zabbix, который работает там же (на сервере). Для этого, в самом деле, нужно сделать следующее:
        • в конфиге Zabbix-агента прописать строку UserParameter, после чего перезапустить агента. Строка у вас в первой попытке была почти правильная, нужно примерно так:
        Code:
        UserParameter=iperf3.checks[*],/usr/bin/iperf3 -c $1 -f m -R -p5201 | awk '/sender/{print $$7}'
        Комментарии:
        1) звёздочка в квадратных скобках после имени ключа означает, что в ключе будут передаваться параметры, которые в строке запуска будут доступны как $1, $2 и т.д. (в данном случае мы будем передавать IP-адрес того, кого надо проверять);
        2) команде awk надо передать именно конструкцию "$7", а не седьмой параметр; поэтому знак доллара в этом месте дублируется.
        • обеспечить, чтобы для нужного вам хоста Zabbix-сервер обращался бы к Zabbix-агенту, расположенному на самом сервере. Для этого в свойствах хоста нужно прописать интерфейс, по которому доступен агент, расположенный на сервере. Можно просто добавить интерфейс с типом "Agent" и нужным IP-адресом (например, "127.0.0.1" или IP-шником самого сервера). Убедиться только, что в настройках агента (в конфиг-файле агента параметром "Server=") не запрещено обращение таким образом.
        • на хосте создать элемент данных с ключом
          Code:
          iperf3.checks[10.1.24.9]
          (где IP-адрес - это адрес проверяемого хоста). Тип элемента данных указать "Zabbix agent" (не "active"!), и обратить внимание на графу "Host interface": выбрать там тот интерфейс, который создавали в предыдущем пункте.
        • Type of information для начала (пока всё это настраивается) выбрать "Character" или "Text" - просто чтобы наглядно видеть, что приходит. Потом через препроцессинг привести это к нужному виду (вырезать только цифры, домножить на нужную единицу измерения и т.п.), тогда уже можно будет поменять на Numeric.
        2. Делать через внешнюю проверку. Мне кажется, что это проще (я бы делал именно так). Для этого нужную команду оформляете в качестве скрипта в виде отдельного файла, который кладёте в нужное место на сервере Zabbix (насколько видно из ваших скриншотов, в вашем случае - это папка /usr/lib/zabbix/externalscripts/). Проверяете, что файл доступен на выполнение пользователю, от которого работает сервер Zabbix (можно просто выставить разрешения "-rwxr-xr-x"). Сам файл (назовём его, скажем, iperf3.checks.sh) может иметь, например, такое содержимое:
        Code:
        #!/bin/sh
        /usr/bin/iperf3 -c $1 -f m -R -p5201 | awk '/sender/{print $7}'
        (подразумевая, опять же, что первым параметром ему будет передаваться IP-адрес проверяемого хоста).
        Затем на нужном хосте создаём элемент данных, в котором в качестве типа элемента указываем "External check", а в качестве ключа - имя скрипта, после которого в квадратных скобках - нужный IP-адрес, например:
        Code:
        [FONT=Courier New]iperf3.checks.sh[[/FONT]10.1.24.9]
        Ещё общее замечание: как долго отрабатывает эта команда? Если около 3 секунд или больше, то нужно подкорректировать параметр "Timeout=" в конфиг-файле сервера (а при использовании UserParameter - ещё и агента).
        Last edited by Kos; 06-10-2020, 14:51. Reason: поправлены опечатки

        Comment

        • poxeron
          Member
          • Sep 2020
          • 52

          #6
          Kos -Спасибо большое , за столь развернутый ответ.

          Буду пробовать .

          Благодарю Вас

          Comment

          • poxeron
            Member
            • Sep 2020
            • 52

            #7
            Kos .

            Попробовал реализовать оба варианта.
            в обоих вариантах тот же самый результат.

            Нажимая на ТЕСТ - форма просто обновляется и я не получаю никакого результата.
            Click image for larger version

Name:	external checks.png
Views:	1131
Size:	79.9 KB
ID:	410316Click image for larger version

Name:	script.png
Views:	1125
Size:	68.5 KB
ID:	410317Click image for larger version

Name:	127.0.0.1.png
Views:	1130
Size:	64.1 KB
ID:	410318Click image for larger version

Name:	config.png
Views:	1162
Size:	109.9 KB
ID:	410319

            Comment

            • poxeron
              Member
              • Sep 2020
              • 52

              #8
              ЗАРАБОТАЛО. Ураааа. Kos спасибо большое Вам

              Comment

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

                #9
                Странно. Я могу придумать только одно объяснение, когда такое может происходить: если нажимать кнопку "Test" немедленно после создания элемента данных (пока сервер ещё не обновил кэш своей конфигурации), но уже буквально через минуту должно нормально проверяться.
                А в логах сервера и агента при этом никакой ругани нет?
                Кроме того, проверить работу через агента можно утилитой zabbix_get, запуская её на самом сервере. Примерно так:
                Code:
                zabbix_get -s 127.0.0.1 -k 'iperf3.checks[10.1.24.9]'
                Last edited by Kos; 12-10-2020, 08:51.

                Comment


                • poxeron
                  poxeron commented
                  Editing a comment
                  C опозданием , но заработало. сейчас получаю полный вывод

                  Спасибо большое за все.
                  Last edited by poxeron; 06-10-2020, 18:00.

                • Kos
                  Kos commented
                  Editing a comment
                  ОК, спасибо, что отписались о результатах.
              • kondar2
                Junior Member
                • Jul 2024
                • 7

                #10
                Kos
                Добрый день, возможно вы сможете подсказать.
                Я провожу проверку Iperf3 в консоли и результаты получаю, но когда я это переделал в UserParameter для Zabbix-agent2 я получаю вывод
                Click image for larger version

Name:	image.png
Views:	350
Size:	53.9 KB
ID:	488158
                Вывод из консоли
                Click image for larger version

Name:	image.png
Views:	335
Size:	22.4 KB
ID:	488159
                Timeout установлен 29 секунд....​

                Comment

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

                  #11
                  Originally posted by kondar2
                  Я провожу проверку Iperf3 в консоли и результаты получаю, но когда я это переделал в UserParameter для Zabbix-agent2 я получаю вывод
                  Проверку в консоли выполняете от имени того же пользователя, от которого работает агент Zabbix?

                  Comment

                  • kondar2
                    Junior Member
                    • Jul 2024
                    • 7

                    #12
                    Kos Благодарю за ответ. Оказалось, что было слишком долгое время тестирования, я поставил параметр -t 3 и начал получать данные. Таймаут у меня 30 секунд.
                    Проблема решена.
                    Спасибо за прекрасную статью!)

                    пример моего UserParameter
                    UserParameter=iperf3.checks[*],/usr/bin/iperf3 -c $1 -f m -R -t 3 -P 3 -p32356 | awk '/sender/{print $$7}' | awk '{print $(NF/2+2)}'

                    Comment


                    • Kos
                      Kos commented
                      Editing a comment
                      Спасибо за уточнение, тайм-ауты для пользовательских скриптов действительно очень важны.
                  • kondar2
                    Junior Member
                    • Jul 2024
                    • 7

                    #13
                    Kos
                    Click image for larger version  Name:	image.png Views:	0 Size:	8.6 KB ID:	488280
                    Я сделал вывод только одного параметра из Iperf в Mbits (в консоли выводится нормально), но в заббиксе получаю пустую строку, возможно можете подсказать?)
                    Мне необходимо получать в zabbix только битрейт.
                    Last edited by kondar2; 25-07-2024, 11:47.

                    Comment

                    • kondar2
                      Junior Member
                      • Jul 2024
                      • 7

                      #14
                      Kos
                      У меня была проблема с выводом битрейта, тк по вашему условию $$7 выводились пакеты, которые отправляет iperf, а не скорость передачи.
                      Я решил эту проблему, заменил ваш параметр на $$6, что стало мне выводить битрейт (прикладываю скриншот и UserParameter)
                      UserParameter=iperf3.checks[*],/usr/bin/iperf3 -c $1 -f m -R -t 3 -P 3 -p32356 | awk '/sender/{print $$6}'

                      Click image for larger version  Name:	image.png Views:	0 Size:	31.8 KB ID:	488292
                      и добавил к этому предобработку, которая вырезает значение
                      Click image for larger version  Name:	image.png Views:	0 Size:	20.3 KB ID:	488293
                      Но все равно не до конца не понял как работает ваша конструкция $$7 и откуда она берет ссылку на следующее значение, а так в целом у меня все работает)
                      Last edited by kondar2; 25-07-2024, 12:45.

                      Comment

                      • Alex_UUU
                        Senior Member
                        • Dec 2018
                        • 541

                        #15

                        Не люблю юзерпараметры. В них есть что-то мутрное :-)
                        Например надо перезагружать конфигурацию, ну и менять файл на агенте.
                        Поэтому для тестов использую систем.ран :-)
                        Коллега, я бы поступил в обработке параметров немного по другому.
                        Если строка ,/usr/bin/iperf3 -c $1 -f m -R -t 3 -P 3 -p32356
                        выдает множество значений, то и получал бы их все, а уже на заббиксе сделал зависимые элементы с каждым значением.

                        Если ваш скрипт возвращает данные с каким-либо разделителем, то в предобработке можно использовать csv to json, ну и в зависимых элеентах использовать jsonpath...

                        Comment

                        Working...