Ad Widget

Collapse

Ubiquiti UniFi + zabbix

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #46
    UniFi Miner v1.0.0 выпущен.

    Спасибо всем, кто принимал участие в тестировании.
    Жду новых идей и сообщений о багах


    UniFi Miner v1.0.0 is released.

    Thanks to everyone who participated in the testing.
    I look forward to new ideas and bug reports

    Забирать тут: https://github.com/zbx-sadman/unifi_miner/releases

    Comment

    • sadman
      Senior Member
      • Dec 2010
      • 1611

      #47
      Желающие могут приступить к тестированию "второй серии" UniFi Miner.

      Код из UniFi Miner 1.0.0 помещен в TCP-сервер и обучен форканью. Написаны небольшой tcp-клиент (для UserParameter) и загружаемый модуль zabbix-агента. Скорость резко увеличилась: Miner 1.0.0 без спидов - 0m0.056s на запрос, Miner2 + zabbix-module - 0m0.007s на запрос. Пожирание процессора - 5% vs 1% на моей виртуалке (ранее было до 14%).

      Как желал bbrendon - все метрики отдаются кучей (как в zabbix_sender) при условии использования загружаемого модуля и типа запросе Zabbix agent(active).
      Last edited by sadman; 13-07-2015, 14:14. Reason: Editing URL

      Comment

      • DeamonMV
        Junior Member
        • Apr 2014
        • 13

        #48
        Добрый день. Если позволите здесь написать о проблемах.

        Столкнулся с такой ситуацие, что когда выполняю комманды по сбору инфромации для контроллера в целом, то в обработку попадает только один сайт. default.

        А когда делаю проверку по сайтам отдельно то для них данные я получаю.
        Еще момент что по имени к сайту, "имя" - такое как на веб морде котроллера, например Office, не получишь данные, а если использовать вот это значение то результат есть {"{#SITENAME}":"j6qho14m"

        Вот логи

        Code:
        ./unifi_miner.pl -o uap -k items_num -a get -d 3
        
        [.] globalConfig:'
        	$VAR1 = {
                  'ua' => undef,
                  'sitename' => 'default',
                  'object' => 'uap',
                  'downloaded' => 0,
                  'max_depth' => 0,
                  'write_stat' => 0,
                  'cache_timeout' => 60,
                  'key' => 'items_num',
                  'fetch_rules' => {
                                     'usw_port' => {
                                                     'path' => 'stat/device',
                                                     'method' => 2
                                                   },
                                     'wlan' => {
                                                 'path' => 'list/wlanconf',
                                                 'method' => 2
                                               },
                                     'usw' => {
                                                'path' => 'stat/device',
                                                'method' => 2
                                              },
                                     'site' => {
                                                 'path' => 'self/sites',
                                                 'method' => 2,
                                                 'excl_sitename' => 1
                                               },
                                     'uph' => {
                                                'path' => 'stat/device',
                                                'method' => 2
                                              },
                                     'uap' => {
                                                'path' => 'stat/device',
                                                'method' => 2
                                              },
                                     'user' => {
                                                 'path' => 'stat/sta',
                                                 'method' => 2
                                               },
                                     'usg' => {
                                                'path' => 'stat/device',
                                                'method' => 2
                                              }
                                   },
                  'login_type' => 'json',
                  'api_path' => 'https://127.0.0.1:8443/api',
                  'password' => 'xxxxxxxxxxxx',
                  'debug' => 3,
                  'id' => '',
                  'mac' => '',
                  'login_data' => '{"username":"xxxxxx","password":"xxxxxxxxx"}',
                  'location' => 'https://127.0.0.1:8443',
                  'version' => 'v4',
                  'start_time' => 0,
                  'logout_path' => 'https://127.0.0.1:8443/logout',
                  'default_sitename' => 'default',
                  'logged_in' => 0,
                  'username' => 'xxxxxxx',
                  'sitename_given' => '',
                  'dive_level' => 1,
                  'cache_root' => '/run/shm',
                  'stop_time' => 0,
                  'action' => 'get',
                  'stat_file' => './stat.txt',
                  'login_path' => 'https://127.0.0.1:8443/api/login'
                };
        
        [+] fetchData() started
        [>]	 args: object type: 'uap'
        [.]		 Object path: 'https://127.0.0.1:8443/api/s/default/stat/device'
        [.]		 Cache file name: '/run/shm/https___127_0_0_1_8443_api_s_default_stat_device'
        [<]	 Fetched data:
        	$VAR1 = [];
        
        [-] fetchData() finished
        [+] (2) getMetric() started
        [>]	 args: key: 'items_num', action: 'get'
        [>]	 incoming object info:'
        	$VAR1 = [];
        
        [.]		 Array with 0 objects detected
        [<] (2) getMetric() finished (0) /2/ [*] Logout from UniFi controller
        0
        Но на контроллере 6 шт сайтов:

        Code:
        ./unifi_miner.pl 
        {"data":[{"{#SITENAME}":"default","{#NAME}":"secure","{#SITEID}":"554e579ee986ca947326ea4a","{#ID}":"554e5839e986ca947326ea73"},
        
        {"{#SITENAME}":"default","{#NAME}":"public","{#SITEID}":"554e579ee986ca947326ea4a","{#ISGUEST}":"1","{#ID}":"554e5839e986ca947326ea74"},
        
        {"{#SITENAME}":"default","{#NAME}":"public2","{#SITEID}":"554e579ee986ca947326ea4a","{#ISGUEST}":"1","{#ID}":"554f0c4de986ca947326ea8a"},
        
        {"{#SITENAME}":"ly0cf6h7","{#NAME}":"zal","{#SITEID}":"554f0da4e986ca947326ea8c","{#ISGUEST}":"0","{#ID}":"554f0ee5e986ca947326ea98"},
        
        {"{#SITENAME}":"gp7abug7","{#NAME}":"Bulvar","{#SITEID}":"55571446e986ca947326ec95","{#ISGUEST}":"1","{#ID}":"5557146ee986ca947326ec9f"},
        
        {"{#SITENAME}":"sjp302x7","{#NAME}":"Pushka","{#SITEID}":"555eebe9e986ca947326fd16","{#ISGUEST}":"1","{#ID}":"555eec1ae986ca947326fd23"},
        
        {"{#SITENAME}":"j6qho14m","{#NAME}":"Place","{#SITEID}":"5575b0f9e9864697d0496869","{#ISGUEST}":"1","{#ID}":"5579776ee9864697d049a789"},
        
        {"{#SITENAME}":"72r0xa5v","{#NAME}":"Tana","{#SITEID}":"5575b102e9864697d0496873","{#ISGUEST}":"1","{#ID}":"557fec8ee986f77bf6c43408"}]}
        Буду признателен за вашу помощь

        UPD контроллер unifi v4
        Last edited by DeamonMV; 16-07-2015, 13:09.

        Comment

        • sadman
          Senior Member
          • Dec 2010
          • 1611

          #49
          Originally posted by DeamonMV
          Добрый день. Если позволите здесь написать о проблемах.

          Столкнулся с такой ситуацие, что когда выполняю комманды по сбору инфромации для контроллера в целом, то в обработку попадает только один сайт. default.
          А когда делаю проверку по сайтам отдельно то для них данные я получаю.
          Если я понял правильно, то вы бы хотели посчитать все UAP на всех сайтах. К сожалению на данный момент это не реализовано. Этому есть две причины:
          1. Предполагаемый оверхед потребления памяти и времени выполнения. Если рассматривать алгоритмически подобное действие, то необходимо пройти по всем сайтам, слепить полученные JSON-ы в один громадный и потом уже бегать по нему, разыскивая ключи, суммируя их значения и пр. Получение каждого JSON-а с сайта контроллера может затянуться на время таймаута модуля LWP, т.е. скрипт может просто висеть минуту;
          2. Никому это было не нужно на момент выхода релиза 1.0.0. Да и об автоматизированной обработке всех сайтов попросил только один человек )) Нет фидбека - нет реализации. У меня вообще только один сайт, так что я о такой функции даже и не думал.


          Поэтому, беготня по сайтам была реализована только для LLD, чтобы посмотреть - как оно будет работать.

          Originally posted by DeamonMV
          Еще момент что по имени к сайту, "имя" - такое как на веб морде котроллера, например Office, не получишь данные, а если использовать вот это значение то результат есть {"{#SITENAME}":"j6qho14m"
          Да, так и есть. Это адская особенность "построения" контроллера UniFi. Например, то, что в веб-интерфейсе названо Alias точки доступа, в самом JSON'e, описывающем объект с типом UAP, содержится в ключе 'name'. Сначала я пытался как-то синхронизировать названия макросов с веб-интерфейсом, но потом плюнул на это, так как в v3 и v4 могут быть разные названия свойств объектов, что влечет за собой создание внутри скрипта дичайших структур, которые бы описывали эти соответствия.

          В v3. имя сайта и его описание неразделимы - содержатся в ключе 'name'. Т.е. какое имя сайта - такая и часть URI (после /s/). Затем, в v4, видимо по заявкам интернациональных пользователей, "имя сайта" стало генерироваться автоматически, но осталось в 'name', а то, что в веб-интерфейсе видно, как "имя", во внутренней структуре уехало в 'desc' (описание).

          Таким образом, при discovery объектов site в v4 будут выведены {#NAME} и {#DESC} - имя, по которому адресуется сайт и его описание.

          Но, в LLD для составления правильных ключей (из которых потом извлекается имя сайта для формирования правильного URI, который используется для извлечения конкретной метрики), необходимо значение именно JSON-ключа 'name' (строка типа '72r0xa5v').

          Надеюсь, я пояснил смысл бессмысленности для человека макроса {#SITENAME} ))

          Вам же, полагаю, хотелось бы видеть имя элемента данных в виде: "[MyHome] UAP-323 clients number"? Если нет, то поясните на примере.

          Originally posted by DeamonMV
          UPD контроллер unifi v4
          Это видно по именам сайтов и типу логина - json ))

          Comment

          • DeamonMV
            Junior Member
            • Apr 2014
            • 13

            #50
            Да, мне было бы удбно получать данные для всех сайтов сразу на контроллере.
            Например:
            Количевство точек которые работаю\не работают
            Общее количество клиентов
            Наверное и все)
            Наверное есть смысл указать в описании на гите, что

            Получение количества UAP, зарегистрированных на контроллере.
            ./unifi_miner.pl -o uap -k items_num -a get
            будет применимо к одному сайту указанному в параметре
            Code:
            default_sitename => 'default',
            ...Хотя странно я пока игрался с скриптом, в выводах дебага я явно видел, что в VAR1 присутствуют данные для других сайтов и количество точек UAP там указано верно. но результирующий вывод был только для одного сайта. А потом я этих данных больше не видел, как будто что то обрубилось) плохо история в консоли короткая. я бы хотя бы подтвердил(....

            Я тогда поступлю по другому. Насколько я понимаю через заббикс можно передавать параметры, заведу шаблоны необходимы и буду ими пользоваться.
            То что буду смотреть, приблизительно такой список, для каждого сайта по отдельности:
            Количество точек работает\не работет(я вроде встречас у вас такой графи на картинках)
            Количество клиентов на точку.
            Трафик по точкам.
            Общее количество клиентов на сайт.
            Общей трафик на сайт.

            Вид результата хотелось бы такой

            sitename(Office) MAC-UAP Client number is ххх
            Или sitename(Office) client number is ххх

            MAC наверное не очень, но я точно смогу сказать какую точку искать, если какая либо из них отпадет)

            Что еще надо думать. Спасибо за ответ. Буду пробовать. Можно здесь писать фидбек? будет ли Вам он полезен?

            Сумбурно написал конечно, но рассчитываю что буду понятно)

            Comment

            • sadman
              Senior Member
              • Dec 2010
              • 1611

              #51
              Originally posted by DeamonMV
              Наверное есть смысл указать в описании на гите, что
              будет применимо к одному сайту указанному в параметре
              Code:
              default_sitename => 'default',
              Есть. Как выйду в отпуск, так буду временами править мануал - все равно программировать не удастся.

              Originally posted by DeamonMV
              ...Хотя странно я пока игрался с скриптом, в выводах дебага я явно видел, что в VAR1 присутствуют данные для других сайтов и количество точек UAP там указано верно. но результирующий вывод был только для одного сайта.
              Вероятно, это был:
              Code:
              ./unifi_miner.pl -d 3 -o site -a discovery
              Положим, что число точек на всех сайтах можно посчитать так:
              Code:
              ./unifi_miner.pl -o site -a sum -k num_ap
              Но это будет именно кол-во точек вообще, а не в каком-либо состоянии. Состояние нужно отслеживать бегая по JSON.

              Но, можно иметь кол-во всех клиентов:
              Code:
              ./unifi_miner.pl -o site -a sum -k num_sta
              Originally posted by DeamonMV
              Я тогда поступлю по другому. Насколько я понимаю через заббикс можно передавать параметры, заведу шаблоны необходимы и буду ими пользоваться.
              Пока, видимо, так. На данный момент я отлаживаю UniFi Proxy, потом отпуск и, в лучшем случае, правки будут внесены в сентябре. Ну, конечно, если они не очень простые - типа связать JSON-ключ с макросом в LLD.


              Originally posted by DeamonMV
              Вид результата хотелось бы такой

              sitename(Office) MAC-UAP Client number is ххх
              Или sitename(Office) client number is ххх
              Это сделать просто - даже сами справитесь. Ниже код. Добавите строчку, получите еще один LLD-макрос для всех объектов - {#SITEDESC}.

              Code:
              ### найти
                    $_[3][$o]->{'{#SITEID}'}   = $_[1]->{'_id'} if ($_[1]);
              
              ### добавить
                    $_[3][$o]->{'{#SITEDESC}'}   = $_[1]->{'desc'} if ($_[1]->{'desc'});
              Originally posted by DeamonMV
              MAC наверное не очень, но я точно смогу сказать какую точку искать, если какая либо из них отпадет)
              Маки были заведены с единственной целью - ссылаться на них через -m. В этом случае, при использовании v4 начинает работать RapidWay для забора данных. Т.е. - у вас 100500 точек, к примеру. Адресация их по {#ID} влечет за собой слив мегабайтных JSON-ов, засасывание их в память, тупой перебор до совпадения с ключом '_id' и отсечение лишних объектов. При адресации по {#MAC} - контроллер сразу отдает один объект - порядка 5-10кб. Быстро, весело, непрожорливо. Но,если они вам помогут в навигации, то используйте, конечно.

              Originally posted by DeamonMV
              Можно здесь писать фидбек? будет ли Вам он полезен?
              Естественно.

              Comment

              • AbyssMoon
                Member
                • Nov 2012
                • 51

                #52
                Наконец-то дошли руки обновить контроллер на версию 4

                Естественно старый скрипт не работает, решил обновиться на ваш новый скрипт, за развитие которого кстати больше вам спасибо еще раз.

                Все поставил по мануалу с гитхаба, но zabbix ругается в LLD: Value should be a JSON object.

                Хотя при запуске ручками из консоли скрипт вываливает с виду нормальный JSON с данными

                Comment

                • AbyssMoon
                  Member
                  • Nov 2012
                  • 51

                  #53
                  Такс, такое поведение удалось выяснить с помощью дебаг режима забикс агента.

                  Code:
                  15897:20150717:120906.012 EXECUTE_STR() command:'/etc/zabbix/scripts/unifi_miner.pl -s  -o uap -a discovery' len:187 cmd_result:'
                  [!] Presumably no rights to unlink '/run/shm/https___127_0_0_1_8443_api_self_sites' file. Try to delete it (Файл существует) at /etc/zabbix/scripts/unifi_miner.pl line 496.]
                  Счас попробую пофиксить удалением файла

                  Comment

                  • AbyssMoon
                    Member
                    • Nov 2012
                    • 51

                    #54
                    Все заработало, спасибо, все идеально!

                    Comment

                    • sadman
                      Senior Member
                      • Dec 2010
                      • 1611

                      #55
                      Такое же сообщение выводится, если тыкнуть на красный крест около "выпавшего" элемента данных или сделать простой zabbix_get с подозрительным ключом для агента, который вызывает скрипт.

                      Стандартная беда тех, кто смотрит работу скрипта не из под zabbix:zabbix - может быть создан файл кэша, на который ограниченная учетка, из под которой работает агент, запускающий скрипт, не имеет прав и не может его отлинковать.
                      Нужно или тереть за собой файлы после отладки или тестировать на копии .pl, в которой cache_root смотрит в другой каталог. Неудобно, да, но всё в угоду скорости - излишние проверки и настройки вырезаны.

                      Надо изменить в мануале название раздела "Решение проблем: с файлами кэша UniFi Miner" что ли... там эта ситуация описана.
                      Last edited by sadman; 17-07-2015, 12:25.

                      Comment

                      • AbyssMoon
                        Member
                        • Nov 2012
                        • 51

                        #56
                        Originally posted by sadman
                        если тыкнуть на красный крест около "выпавшего" элемента данных
                        Там выводилось "Value should be a JSON object."

                        Comment

                        • sadman
                          Senior Member
                          • Dec 2010
                          • 1611

                          #57
                          Originally posted by AbyssMoon
                          Там выводилось "Value should be a JSON object."
                          А... понял. Discovery rule свою ошибку рисует, а не ту, что от UserParameter пришла. Запомним...

                          Comment

                          • sadman
                            Senior Member
                            • Dec 2010
                            • 1611

                            #58
                            UniFi Proxy v1.0.0 завершен.
                            Рекомендую к использованию всем, кто имеет потребность в мониторинге большого количества метрик UniFi. Все работает быстрее, потребность в вычислительных ресурсах радикально уменьшена.

                            UniFi Proxy v1.0.0 finished.
                            I recommended it for everyone who need to monitor a lot UniFi metrics .
                            Tool is run faster, the need for computational resources considerably reduced.

                            Fast client-server version of UniFi Miner. Contribute to zbx-sadman/unifi_proxy development by creating an account on GitHub.

                            Comment

                            • sadman
                              Senior Member
                              • Dec 2010
                              • 1611

                              #59
                              Originally posted by DeamonMV
                              Да, мне было бы удбно получать данные для всех сайтов сразу на контроллере.
                              Например:
                              Количевство точек которые работаю\не работают
                              Общее количество клиентов
                              Вобщем, в ходе реализации некоторых задумок на UniFi Proxy обработка мультисайтовых контроллеров сделана. В экспериментальном режиме можно погонять ее, взяв апдейт отсюда: UniFi Proxy, experimental.
                              Правда, оговорюсь - тестировать мне не на чем, держу все в одном сайте. Пробуйте, шлите отчеты.

                              Так же в этой редакции добавлены групповые операции pcount, psum (пока рабочие названия такие). Они позволяют получить процент значений, удовлетворяющих ключу метрик, от общего кол-ва отобранных объектов. Т.е.: можно сразу понять, сколько процентов точек доступа в оффлайне (полезно в случае с полем точек, установленных с перекрытием). Или можно посчитать процент неавторизованных пользователей, подключенных к точкам в сайте и при его большом значении сделать вывод о том, что наблюдается проблема с RADIUS-сервером или порталом UniFi.

                              Так, как моделировать эти ситуации для иллюстративности долго, покажу на простом примере - вычислении процента мобильных яблоководов:


                              Кроме того - появилась возможность делать LLD по произвольны вложенным JSON-ключам (только первого уровня), если они связаны с json-массивом или json-объектом. Для чего? Например - для дискаверинга портов UniFi Switch, которые интегрированны массивом в JSON-объект с типом usw. Ну или vap_table в UAP можно подискаверить, правда я не знаю зачем ))

                              В UniFi Miner данные исправления не пока вошли.

                              Comment

                              • softcom
                                Junior Member
                                • Jul 2015
                                • 12

                                #60
                                А может кто-то подсказать как запустить аналогичный мониторинг на контроллере UniFi который работает под Windows

                                Comment

                                Working...