Ad Widget

Collapse

Zabbix Api + Latest Data + Python

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • EdwardK
    Junior Member
    • Nov 2016
    • 18

    #1

    Zabbix Api + Latest Data + Python

    Добрый день!

    Работаю с Api при помощи Python.

    Подключаюсь к Api и получаю необходимые данные хостов следующим образом :

    Часть кода :

    Code:
    from pyzabbix import ZabbixAPI
    from zabbix.api import ZabbixAPI
    
    
    class A(Exception):
        pass
    
    
    class B(Exception):
        pass
    
    
    # Create ZabbixAPI class instance
    zapi = ZabbixAPI(url='http://******/api_jsonrpc.php', user=user', password='password')
    
    # Get all disabled hosts
    inv = zapi.host.get(monitored_hosts=1, output='extend',
                        selectInventory=['name', 'location_lat', 'location_lon','location','site_city'])
    
    print(inv)
    Хотел бы получить данные хостов из раздела Latest data(Поле Name и его Last value).Есть ли идеи как можно заполучить их используя Api?

    Спасибо.
  • SergejP
    Junior Member
    • Jul 2016
    • 3

    #2
    Чтобы получить данные из раздела "Latest data" вам потребуется вызывать API - event.get (doc - https://www.zabbix.com/documentation...ence/event/get)

    Можно посмотреть как это делаеться на frontend в коде php - функция function getLastEvents($options) (frontends/php/include/events.inc.php)

    Comment

    • EdwardK
      Junior Member
      • Nov 2016
      • 18

      #3
      Подключился event.get'ом :

      Code:
      """
      Retrieves history data for a given numeric (either int or float) item_id
      """
      
      from pyzabbix import ZabbixAPI
      from datetime import datetime
      import time
      
      # The hostname at which the Zabbix web interface is available
      zapi = ZabbixAPI(url='http://****/api_jsonrpc.php', user='****', password='*****')
      
      
      
      # Create a time range
      time_till = time.mktime(datetime.now().timetuple())
      time_from = time_till - 60 * 60 * 4  # 4 hours
      
      # Query item's history (integer) data
      history = zapi.event.get(
                                 time_from=time_from,
                                 time_till=time_till,
                                 output='extend',
                                 )
      
      print(history)
      Выдает следущее :

      Code:
      [{'source': '0', 'value': '1', 'objectid': '15455', 'eventid': '54111086', 'acknowledged': '0', 'clock': '1484116386', 'ns': '100004023', 'object': '0'},
      Как можно составить более точный запрос что-бы получить Name и его Last value?

      Comment

      • SergejP
        Junior Member
        • Jul 2016
        • 3

        #4
        Нужно еще указать hostids, со списком интересующих вам хостов, который вы получили с помощью запроса - zapi.host.get

        Comment

        • EdwardK
          Junior Member
          • Nov 2016
          • 18

          #5
          Мне нужны все хосты,данный запрос вывел все :

          Code:
          [{'source': '0', 'clock': '1484128744', 'objectid': '19979', 'value': '1', 'object': '0', 'acknowledged': '0', 'eventid': '54114800', 'ns': '780873568'}, {'source': '0', 'clock': '1484128830', 'objectid': '22220', 'value': '1', 'object': '0', 'acknowledged': '0', 'eventid': '54114832', 'ns': '106232660'}, {'source': '0', 'clock': '1484130544', 'objectid': '18052', 'value': '1', 'object': '0', 'acknowledged': '0', 'eventid': '54115342', 'ns': '201053159'},...............
          Но без нужных мне полей которые находятся в Last value,не могу понять как написать точный запрос

          Comment

          • DRVTiny
            Senior Member
            • Sep 2011
            • 162

            #6
            Originally posted by SergejP
            Чтобы получить данные из раздела "Latest data" вам потребуется вызывать API - event.get (doc - https://www.zabbix.com/documentation...ence/event/get)

            Можно посмотреть как это делаеться на frontend в коде php - функция function getLastEvents($options) (frontends/php/include/events.inc.php)
            Вообще в Zabbix frontend'е есть чудесный режим Debug, который во всех подробностях показывает, какие запросы API используются для получения страниц интерфейса. А заодно при просмотре консоли дебага сразу становится очевидным, что в этом самом API "Not Implemented Yet"

            Comment

            • DRVTiny
              Senior Member
              • Sep 2011
              • 162

              #7
              Нужно вызывать метод:

              item.get

              С параметрами:

              "selectApplications": ["name"],
              "selectHosts": ["host","name"],
              "output": ["lastvalue","name"],
              "monitored": 1

              Дальше уже Вам решать, что делать с полученной структурой данных.

              В ней для каждой метрики будет соответствие её хосту в списке hosts и соответствие её группа (application'у с лёгкой руки разработчиков) - в массиве applications.

              Comment

              • EdwardK
                Junior Member
                • Nov 2016
                • 18

                #8
                Дополнил код:

                Code:
                """
                Retrieves history data for a given numeric (either int or float) item_id
                """
                
                from pyzabbix import ZabbixAPI
                from datetime import datetime
                import time
                
                # The hostname at which the Zabbix web interface is available
                zapi = ZabbixAPI(url='http://******/api_jsonrpc.php', user='******', password='*******')
                item_id = 'item_id'
                
                # Create a time range
                time_till = time.mktime(datetime.now().timetuple())
                time_from = time_till - 60 * 60 * 4  # 4 hours
                
                # Create a time range
                time_till = time.mktime(datetime.now().timetuple())
                time_from = time_till - 60 * 60 * 4  # 4 hours
                
                # Query item's history (integer) data
                history = zapi.event.get(
                                           time_from=time_from,
                                           time_till=time_till,
                                           selectApplications = "name",
                                           selectHosts = ["host","name"],
                                           output = ["lastvalue","name"],
                                            monitored = 1
                                           )
                
                print(history)
                Выдает :
                Code:
                [{'hosts': [{'host': 'ATM00204', 'hostid': '10290', 'name': 'ATM00204'}], 'eventid': '54240183'}, {'hosts': [{'host': 'ATM00220', 'hostid': '10466', 'name': 'ATM00220'}],.........


                Как должен выглядеть запрос на примере данной Latest data?

                Comment

                • DRVTiny
                  Senior Member
                  • Sep 2011
                  • 162

                  #9
                  Вам не нужен event_get, Вам нужен item_get. Поменяйте название метода и уберите параметры, указывающие на время.
                  Event'ы - это события, которые наблюдает или генерирует система мониторинга. Источником событий может быть, например, обнаружение нового хоста или изменение состояния триггера (переход в PROBLEM или OK).

                  Comment

                  • EdwardK
                    Junior Member
                    • Nov 2016
                    • 18

                    #10
                    Originally posted by drvtiny
                    Вам не нужен event_get, Вам нужен item_get. Поменяйте название метода и уберите параметры, указывающие на время.
                    Event'ы - это события, которые наблюдает или генерирует система мониторинга. Источником событий может быть, например, обнаружение нового хоста или изменение состояния триггера (переход в problem или ok).

                    Спасибо,все заработало

                    Comment

                    Working...