Ad Widget

Collapse

Zabbix API

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Dimusikus
    Junior Member
    • Aug 2020
    • 6

    #1

    Zabbix API

    Здравствуйте Уважаемые.
    Версия Zabbix 2.0

    Есть комплексный экран. Необходимо получить из него все данные.
    Click image for larger version

Name:	t.JPG
Views:	231
Size:	169.8 KB
ID:	407034
    Раньше я качал HTML страницу и распарсивал из нее данные. Узнав про API решил получать данные по API.

    1. Авторизуюсь на сервере, получаю ключ.
    2. отправляю запрос
    {"jsonrpc": "2.0",
    "method": "screenitem.get",
    "params": {
    "output": "extend",
    "screenids": "67"
    },"auth": "authcode","id": 1}");

    Получаю белиберду(содержимое обрезал, т.к. много буков):
    Code:
    {"jsonrpc":"2.0","result":[{"screenitemid":"20","screenid":"3","resourcety pe" :"0","resourceid":"433","width":"500","height": "12 0","x":"0","y":"0","colspan":"1","rowspan":"1", "el ements":"0","valign":"1","halign":"0","style":"0", "url":"","dynamic":"0","sort_triggers":"0"},{" scre enitemid":"21","screenid":"3","resourcetype":"0"," resourceid":"387","width":"500","height":"100","x" :"0","y":"1","colspan":"1","rowspan":"1","eleme nts ":"0","valign":"1","halign":"0","style":"0","u rl": "","dynamic":"0","sort_triggers":"0"},{"screen item id":"22","screenid":"3","resourcetype":"1","reso ur ceid":"10013","width":"500","height":"148","x":"1" ,"y":"0","colspan":"1","rowspan":"1","elements" :"0 ","valign":"1","halign":"0","style":"0","url": ""," dynamic":"0","sort_triggers":"0"},{"screenitemid": "23","screenid":"3","resourcetype":"1","resour ceid ":"22181","width":"500","height":"184","x":"1" ,"y" :"1","colspan":"1","rowspan":"1","elements":"0" ,"v align":"1","halign":"0","style":"0","url":"","dyna mic":"0","sort_triggers"
    :"0"},{"screenitemid":"24","screenid":"4","reso urc etype":"0","resourceid":"392","width":"500","heigh t":"212","x":"0","y":"0","colspan":"1","rowspan ":" 1","elements":"0","valign":"1","halign":"0","st yle ":"0","url":"","dynamic":"0","sort_triggers":" 0"}, {"screenitemid":"25","screenid":"4","resourcety pe" :"0","resourceid":"404","width":"500","height": "10 0","x":"1","y":"0","colspan":"1","rowspan":"1", "el ements":"0","valign":"1","halign":"0","style":"0", "url":"","dynamic":"0","sort_triggers":"0"},{" scre enitemid":"26","screenid":"4","resourcetype":"0"," resourceid":"406","width":"500","height":"100","x" :"0","y":"1","colspan":"1","rowspan":"1","eleme nts ":"0","valign":"1","halign":"0","style":"0","u rl": "","dynamic":"0","sort_triggers":"0"},{"screen item id":"27","screenid":"4","resourcetype":"0","reso ur ceid":"410","width":"500","height":"128","x":"1"," y":"1","colspan":"1","rowspan":"1","elements":" 0", "valign":"1","halign":"0","style":"0","url":"" ,"dy namic":"0","sort_triggers":"0"},{"screenitemid":"2 8","screenid":"5","resou
    то есть данных тютю, не отдает, что я делаю не так?
    Attached Files
    Last edited by Dimusikus; 14-08-2020, 08:38.
  • oscar
    Senior Member
    • Dec 2010
    • 141

    #2
    Ну вообщето это не билиберда, а данные. Например:
    Code:
    ​​...
    "resourcetype": "0",
    "resourceid": "433",
    ...
    говорит о том, что конкретно этот скринайтем содержит график и айди графика 433. Соответственно, при необходимости, для получения содержимого конткретного графика выполняется отдельный запрос. Это все есть в документации. И вообще, при работе с API привыкайте к тому, что в большинстве случаев это серия последовательных запросов, а не один супермега.

    Click image for larger version

Name:	zabb_doc.png
Views:	185
Size:	110.1 KB
ID:	407042



    Last edited by oscar; 14-08-2020, 10:12.

    Comment

    • Dimusikus
      Junior Member
      • Aug 2020
      • 6

      #3
      Originally posted by oscar
      при работе с API привыкайте к тому, что в большинстве случаев это серия последовательных запросов, а не один супермега.
      Подскажите тогда пожалуйста правильную последовательность запросов что бы получить весь комплексный экран?
      У меня на экране около 120 элементов различных данных и если я предполагаю что надо столькоже делать API запросов тогда в апи вообще смысла нет никакого, и проще и быстрее и экономнее по трафику уже парсить готовую HTML страницу.

      Comment

      • oscar
        Senior Member
        • Dec 2010
        • 141

        #4
        Да, вы все правильно поняли - получили перечень айдишников и погнали в цикле получать данные. На счет удобства поспорю: html'ка меняется от версии к версии, тогда как API весьма стабилен. И, кстати, для чего вы хотите "получить весь комплексный экран"?
        UPD: Несколько погорячился по поводу количества запросов. Во многих случаях можно вместо серии однотипных отправить один запрос, но с массивом айдишников.
        Last edited by oscar; 14-08-2020, 14:36.

        Comment

        • Dimusikus
          Junior Member
          • Aug 2020
          • 6

          #5
          Я не понимаю как корректно необходимо сформировать запрос.
          Ладно к примеру я хочу получить значение определённого элемента в комплексном экране.
          У меня есть комплексный экран с айди 67.
          Есть элементы в нем, к примеру один из них с айди номером 753.

          Отправляю запрос:

          Code:
          {"
          jsonrpc": "2.0",
          "method": "screenitem.get",
          "params": { "output": "extend",
                                  "selectScreenItems": "extend",
                                   "screenids": "67",
                                   "screenitemid": "753"
          },"auth": "authcode","id": 2}");
          но ответ приходит такойже как и в спойлере топикпоста.

          Comment

          • Dimusikus
            Junior Member
            • Aug 2020
            • 6

            #6
            Originally posted by oscar
            И, кстати, для чего вы хотите "получить весь комплексный экран"?
            В комплексном экране собраны определённые элементы данных со всех узлов сети. Необходимо их вытащить и представить в удобоваримом виде.

            Comment

            • oscar
              Senior Member
              • Dec 2010
              • 141

              #7
              Originally posted by Dimusikus
              Я не понимаю как корректно необходимо сформировать запрос.
              Ладно к примеру я хочу получить значение определённого элемента в комплексном экране.
              У меня есть комплексный экран с айди 67.
              Есть элементы в нем, к примеру один из них с айди номером 753.

              Отправляю запрос:

              Code:
              {"
              jsonrpc": "2.0",
              "method": "screenitem.get",
              "params": { "output": "extend",
              "selectScreenItems": "extend",
              "screenids": "67",
              "screenitemid": "753"
              },"auth": "authcode","id": 2}");
              но ответ приходит такойже как и в спойлере топикпоста.
              После вызова "screenitem.get" вы получаете список айтемов экрана. Далее необходимо получить содержимое конкретных айтемов. Для этого пробегаете циклом по списку и смотрите на поле resourcetype - оно кодирует тип содержимого.
              Коды есть в документации:
              Code:
              Type of screen item.
              Possible values:
              0 - graph;
              1 - simple graph;
              2 - map;
              3 - plain text;
              4 - hosts info;
              5 - triggers info;
              6 - server info;
              7 - clock;
              8 - screen;
              9 - triggers overview
              10 - data overview;
              11 - URL;
              12 - history of actions;
              13 - history of events;
              14 - status of host group triggers;
              15 - system status;
              16 - status of host triggers.
              Выше я уже писал что
              Code:
              ...
              "resourcetype": "0",
              "resourceid": "433",
              ...
              содержит график и айди графика 433. Следовательно, далее в соответствии с типом или дергаем "graph.get"-запросом данные этого графика, или напрямую картинку по url'у (мы авторизованы и айдишник у нас уже есть). Примерно так с каждым элементов в зависимости от его типа. Вы можете выполнять все запросы последовательно и синхронно; можете собрать в пулы по типам, сократив количество запросов; можете выполнить их параллельно, заморочившись обработчиком событий и синхронизацией. В общем, тут все ограничено только вашей фантазией и скилом программиста...

              Comment

              • oscar
                Senior Member
                • Dec 2010
                • 141

                #8
                Originally posted by Dimusikus
                В комплексном экране собраны определённые элементы данных со всех узлов сети. Необходимо их вытащить и представить в удобоваримом виде.
                А какие-нибудь визуализаторы не пробовали? Графану, например...

                Comment

                Working...