Ad Widget

Collapse

Запуск speedtest через system.run

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #16
    Originally posted by zmdpc

    time zabbix_get -s IP_Agent -k speedtt[4276]
    terminate called after throwing an instance of 'std::logic_error'
    what(): basic_string::_M_construct null not valid
    Aborted

    real 0m0.014s
    user 0m0.000s
    sys 0m0.004s

    Ругани нет добавил в конфиге логирование удаленных команд появилось
    Executing command 'speedtest -s 4276 -f json-pretty'
    Хорошо, фиксируем: в данном случае дело не в тайм-ауте (ответ приходит сразу, за 14 миллисекунд), а в чём-то другом. По всей видимости, в ограниченных правах пользователя zabbix, от имени которого работает агент (и, соответственно, выполняются запускаемые им процессы). См. FAQ.
    Идём на компьютер с агентом, переходим в учётную запись пользователя zabbix (например, через su или sudo) и пытаемся добиться нормальной работы нужной программы там.
    Скорее всего, либо не хватает прав, либо каких-то переменных среды (PATH, LIBPATH и т.п.).

    Comment

    • zmdpc
      Senior Member
      • Oct 2014
      • 484

      #17
      Originally posted by Kos
      Хорошо, фиксируем: в данном случае дело не в тайм-ауте (ответ приходит сразу, за 14 миллисекунд), а в чём-то другом. По всей видимости, в ограниченных правах пользователя zabbix, от имени которого работает агент (и, соответственно, выполняются запускаемые им процессы). См. FAQ.
      Идём на компьютер с агентом, переходим в учётную запись пользователя zabbix (например, через su или sudo) и пытаемся добиться нормальной работы нужной программы там.
      Скорее всего, либо не хватает прав, либо каких-то переменных среды (PATH, LIBPATH и т.п.).
      su - zabbix
      $ /usr/local/sbin/zabbix_agentd -t speedtt[4276]

      выполняется нормально
      исправил UserParameter=speedtt[*],/usr/bin/speedtest -s $1 -f json-pretty
      пока все тоже самое
      Last edited by zmdpc; 15-02-2021, 18:00.

      Comment

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

        #18
        Originally posted by zmdpc
        su - zabbix
        $ /usr/local/sbin/zabbix_agentd -t speedtt[4276]

        выполняется нормально
        Замечательно. Раз в принципе выполняется от этого пользователя - значит, дело не в правах, а в среде.
        Как правило, среда отличается: а) переменными среды (две основных я перечислил выше); б) наличием управляющего терминала; в) привязками стандартных потоков ввода/вывода (stdin/stdout/stderr); г) ещё кучей мелочей.
        Я бы ставил на первое - что не хватает каких-то environment variables; причём, вероятнее всего, PATH (например, при запуске через su присутствует какой-нибудь /usr/local/bin или /home/zabbix/bin, а при работе из-под агента - нет).
        Попробуйте вместо speedtest-а аналогичным образом вызывать скрипт, который вам покажет состояние среды (например, команда "env | sort >/tmp/файл"), и потом сравнивайте - чего именно не хватает speedtest-у.

        Comment

        • Hamardaban
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • May 2019
          • 2713

          #19
          Возможно вот это наведет на путь решения

          Comment

          • zmdpc
            Senior Member
            • Oct 2014
            • 484

            #20
            Случай однозначно похожий. По последнему сообщению не понятно решилась ли проблема или ушла в долгий ящик...

            Может у кого то был опыт проверки speedtest нескольких направлений одновременно?
            У меня сейчас есть потребность получать по разным маршрутам скорость и свести это все в единый график
            Из приведенных на https://share.zabbix.com нескольких темплейтов наиболее адекватным выглядит https://github.com/Varik001/zabbix-a...-speedtest-wan
            но он использует устаревшую утилиту speedtest-cli ...

            Подумалось что system.run прям хорошо должен попасть в цель ... но пока нет
            Last edited by zmdpc; 15-02-2021, 21:07.

            Comment

            • zmdpc
              Senior Member
              • Oct 2014
              • 484

              #21
              Originally posted by Kos
              Замечательно. Раз в принципе выполняется от этого пользователя - значит, дело не в правах, а в среде.
              Как правило, среда отличается: а) переменными среды (две основных я перечислил выше); б) наличием управляющего терминала; в) привязками стандартных потоков ввода/вывода (stdin/stdout/stderr); г) ещё кучей мелочей.
              Я бы ставил на первое - что не хватает каких-то environment variables; причём, вероятнее всего, PATH (например, при запуске через su присутствует какой-нибудь /usr/local/bin или /home/zabbix/bin, а при работе из-под агента - нет).
              Попробуйте вместо speedtest-а аналогичным образом вызывать скрипт, который вам покажет состояние среды (например, команда "env | sort >/tmp/файл"), и потом сравнивайте - чего именно не хватает speedtest-у.
              su - zabbix
              $ env | sort
              HOME=/home/zabbix
              LANG=ru_RU.UTF-8
              LOGNAME=zabbix
              MAIL=/var/mail/zabbix
              PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
              PWD=/home/zabbix
              SHELL=/bin/sh
              TERM=xterm
              USER=zabbix

              speedtest находится в /usr/bin/

              UPD: создал айтем вида system.run[env|sort]
              вывод выглядит так
              INVOCATION_ID=0ad5b702310d46ac82355964b592e89b
              JOURNAL_STREAM=9:339629081
              LANG=ru_RU.UTF-8
              PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
              PWD=/

              во время этих вариантов в логе агента писались такие записи

              8842:20210215:225542.903 Starting Zabbix Agent [***]. Zabbix 5.0.8 (revision d3c78f993a).
              8842:20210215:225542.903 **** Enabled features ****
              8842:20210215:225542.903 IPv6 support: NO
              8842:20210215:225542.903 TLS support: NO
              8842:20210215:225542.903 **************************
              8842:20210215:225542.903 using configuration file: /usr/local/etc/zabbix_agentd.conf
              8842:20210215:225542.903 agent #0 started [main process]
              8844:20210215:225542.903 agent #1 started [collector]
              8845:20210215:225542.903 agent #2 started[listener #1]
              8847:20210215:225542.903 agent #3 started[listener #2]
              8848:20210215:225542.903 agent #4 started[listener #3]
              8848:20210215:225645.956 Executing command 'speedtest -s 4276 -f json-pretty'
              8847:20210215:225653.816 Executing command 'speedtest -s 4276 -f json-pretty'
              8848:20210215:225757.702 Executing command 'ls -l /home/zabbix'
              8847:20210215:225822.921 Executing command 'ls -l /home'
              8848:20210215:225837.151 Executing command 'ls -l /'
              8845:20210215:225919.854 Executing command 'env|sort'
              8847:20210215:230201.373 Executing command 'speedtest -s 4276 -f json-pretty'
              8845:20210215:230259.008 Executing command 'speedtest -s 4276 -f json-pretty'

              Last edited by zmdpc; 15-02-2021, 22:06.

              Comment

              • zmdpc
                Senior Member
                • Oct 2014
                • 484

                #22
                Ни у кого еще мудрые мысли в голову не пришли? Не уже эта такая супер уникальная ситуация ?

                Comment

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

                  #23
                  Originally posted by zmdpc
                  Ни у кого еще мудрые мысли в голову не пришли? Не уже эта такая супер уникальная ситуация ?
                  Вы читали дискуссию по ссылке, которую давал коллега Hamardaban?
                  Если я правильно понял, то Вы пользуетесь той же утилитой. В этом случае - да, ситуация уникальна и связана с особенностями работы этой утилиты.

                  Попробуйте две вещи, о которых говорится в той дискуссии:
                  • убедитесь, что у пользователя zabbix реально есть домашняя директория, а в ней - подпапки ".config/ookla" (а у всего этого владелец - пользователь zabbix, и у него есть права записи туда);
                  • добавьте в вызове утилиты speedtest параметры "--accept-license --accept-gdpr" (в конце строки UserParameter).
                  Что после этого выдаётся в ответ на запрос zabbix_get?

                  Comment

                  • zmdpc
                    Senior Member
                    • Oct 2014
                    • 484

                    #24
                    Originally posted by Kos
                    Вы читали дискуссию по ссылке, которую давал коллега Hamardaban?
                    Если я правильно понял, то Вы пользуетесь той же утилитой. В этом случае - да, ситуация уникальна и связана с особенностями работы этой утилиты.

                    Попробуйте две вещи, о которых говорится в той дискуссии:
                    • убедитесь, что у пользователя zabbix реально есть домашняя директория, а в ней - подпапки ".config/ookla" (а у всего этого владелец - пользователь zabbix, и у него есть права записи туда);
                    • добавьте в вызове утилиты speedtest параметры "--accept-license --accept-gdpr" (в конце строки UserParameter).
                    Что после этого выдаётся в ответ на запрос zabbix_get?
                    1. Когда запускаешь из под пользователя zabbix speedtest постоянно просит лицензию пока не запишется лицензия. Я сразу же создал ему домашний каталог и после этого он сам туда его прописал.
                    /home/zabbix/.config/ookla# ls -l
                    -rw-r--r-- 1 zabbix zabbix 122 фев 11 14:19 speedtest-cli.json

                    2. --accept-license --accept-gdpr так же пробовал добавлять и так же пробовал вид как и в дискуссии speedtest -f json --accept-license --accept-gdpr 2>&1 | grep bandwidth
                    результата так же 0

                    3. Для speedtest выставил бит SUID как в той же дискуссии рекомендовали сделать
                    ls -l /usr/bin/speedtest
                    -rwsr-xr-x 1 root root 2244696 окт 29 2019 /usr/bin/speedtest
                    Результат пока тот же

                    Единственно из достижений понял, что zabbix использует /bin/sh (заключив выражение в одинарные кавычки получил такой ответ sh: 1: speedtest -f json --accept-license --accept-gdpr 2>&1: not found)

                    Comment

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

                      #25
                      Originally posted by zmdpc
                      Единственно из достижений понял, что zabbix использует /bin/sh
                      Гениальное достижение для человека, не читавшего документацию:
                      В операционных системах UNIX используется интерпретатор командной строки /bin/sh.
                      (см. также тут).

                      Originally posted by zmdpc
                      1. Когда запускаешь из под пользователя zabbix speedtest постоянно просит лицензию пока не запишется лицензия. Я сразу же создал ему домашний каталог и после этого он сам туда его прописал.
                      Понимаете, сейчас тяжёлое время - пандемия, ограничения; а телепаты, как назло, все в отпуске.
                      Вот у меня нет этой утилиты; как нет и желания ставить её себе только ради того, чтобы вместо вас разбираться, как она работает.
                      Откуда я должен был узнать об этих тонкостях, если Вы сами об этом ничего не написали?

                      Originally posted by zmdpc
                      2. --accept-license --accept-gdpr так же пробовал добавлять и так же пробовал вид как и в дискуссии speedtest -f json --accept-license --accept-gdpr 2>&1 | grep bandwidth
                      результата так же 0

                      3. Для speedtest выставил бит SUID как в той же дискуссии рекомендовали сделать
                      ls -l /usr/bin/speedtest
                      -rwsr-xr-x 1 root root 2244696 окт 29 2019 /usr/bin/speedtest
                      Результат пока тот же
                      "Результата ноль" - это как понимать? Нет ни какого-либо вывода, ни сообщений об ошибках?
                      Без grep-а и перенаправлений - что показывает?
                      (разумеется, не забывать про перезапуск агента после каждого редактирования его конфига)

                      Comment

                      • sadman
                        Senior Member
                        • Dec 2010
                        • 1611

                        #26
                        Интересная история, конечно.

                        Несмотря на видимую нелогичность (на данный момент), заработало только так:

                        Создал домашний каталог для zabbix, потом sudo adduser zabbix sudo, затем добавил:

                        Code:
                        UserParameter=spt,sudo -u zabbix /usr/bin/speedtest -f json --accept-license --accept-gdpr 2>&1
                        Рестартовал.

                        Выходит следующее:
                        Code:
                        $ zabbix_get -s localhost -k spt
                        {"type":"result","timestamp":"2021-02-17T08:39:24Z","ping":{"jitter":0.187,"latency":1.2 270000000000001},"download":{"bandwidth":9236941," bytes":72006048,"elapsed":7703},"upload":{"bandwid th":6100867,"bytes":67892472,"elapsed":10701},"pac ketLoss":0,"isp":"xxxxxx","interface":{"internalIp":"xx.xx.xx.xx","name":"eth0","macAddr":"xx:xx:xx:xx:xx:xx","isVpn":f alse,"externalIp":"xx.xx.xx.xx"},
                        ....}
                        Без sudo -u zabbix стабильно:
                        Code:
                        $ zabbix_get -s localhost -k spt
                        terminate called after throwing an instance of 'std::logic_error'
                        what(): basic_string::_M_construct null not valid
                        Aborted (core dumped)
                        
                        $ zabbix_agentd -V
                        zabbix_agentd (daemon) (Zabbix) 4.2.8
                        Но, даже при Timeout=30 бывает "ZBX_NOTSUPPORTED: Timeout while executing a shell script."

                        Comment

                        • zmdpc
                          Senior Member
                          • Oct 2014
                          • 484

                          #27
                          Originally posted by Kos
                          Гениальное достижение для человека, не читавшего документацию:

                          (см. также тут).


                          Понимаете, сейчас тяжёлое время - пандемия, ограничения; а телепаты, как назло, все в отпуске.
                          Вот у меня нет этой утилиты; как нет и желания ставить её себе только ради того, чтобы вместо вас разбираться, как она работает.
                          Откуда я должен был узнать об этих тонкостях, если Вы сами об этом ничего не написали?


                          "Результата ноль" - это как понимать? Нет ни какого-либо вывода, ни сообщений об ошибках?
                          Без grep-а и перенаправлений - что показывает?
                          (разумеется, не забывать про перезапуск агента после каждого редактирования его конфига)
                          Спасибо что просветили ... ну как бы не обращал на эту подробность внимания что zabbix использует /bin/sh для себя отметил.
                          При чем телепаты я не понял - был вопрос я более подробно на него ответил сказав, что это уже сделано
                          Конечно при изменении конфига делается рестарт агента
                          И да "результата 0" это значит что проблема не решена ... тут мой косяк согласен нужно было добавить вывод чтобы он был перед глазами, исправляюсь:

                          Вывод если выполнять на сервере с перенаправлением и грепом
                          zabbix_get -s IP-agent -k speedtt[4276]
                          Aborted

                          real 0m0.015s
                          user 0m0.004s
                          sys 0m0.000s

                          Вывод если выполнять на сервере без перенаправления и грепа
                          zabbix_get -s IP-agent -k speedtt[4276]
                          terminate called after throwing an instance of 'std::logic_error'
                          what(): basic_string::_M_construct null not valid
                          Aborted

                          real 0m0.012s
                          user 0m0.000s
                          sys 0m0.004s


                          Last edited by zmdpc; 17-02-2021, 11:40.

                          Comment

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

                            #28
                            Предполагаю, что эта утилита ищет домашнюю директорию пользователя не по записи в /etc/passwd, а банально по переменной среды HOME.
                            И, поскольку вызов через sudo эту переменную среды может выставлять (подкрашено синим мной):
                            -H' The -H (HOME) option requests that the security policy set the HOME environment variable to the home directory of the target user (root by default) as specified by the password database. Depending on the policy, this may be the default behavior.
                            , то это может объяснять кажущуюся нелогичность работы через sudo, которую подметил sadman.

                            zmdpc, попробуйте, пожалуйста, такой вариант:
                            Code:
                            UserParameter=speedtt[*],HOME=/home/zabbix speedtest [I](далее по тексту, как у вас и было раньше)[/I] --accept-license --accept-gdpr
                            Заодно покажите, пожалуйста, как сейчас у вас выглядит эта строка полностью.

                            Comment

                            • sadman
                              Senior Member
                              • Dec 2010
                              • 1611

                              #29
                              Kos изящно добил решение.

                              Code:
                              $ zabbix_get -s localhost -k spt
                              {"type":"result","timestamp":"2021-02-17T10:37:27Z","ping":{"jitter":0.32300000000000001 ,"latency":63.045000000000002},"download":{"bandwi dth":8112582,"bytes":79606664,"elapsed":10100},"up ...}
                              
                              $ tail zabbix_agentd.conf
                              ...
                              UserParameter=spt,[B]HOME=/home/zabbix[/B] /usr/bin/speedtest -f json --accept-license --accept-gdpr 2>&1

                              Comment

                              • zmdpc
                                Senior Member
                                • Oct 2014
                                • 484

                                #30
                                Огромное человеческое спасибо!

                                Решением является добавление переменной с указанием домашней категории, после этого все остальные ключи особого смысла не имеют!
                                на текущий момент привел ключ к виду
                                UserParameter=speedtt[*],HOME=/home/zabbix speedtest -f json-pretty

                                и после этого все заработало!

                                Comment

                                Working...