Ad Widget

Collapse

Zabbix API. Библиотека для Python

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • dmitryalexeeff
    Junior Member
    • Mar 2010
    • 26

    #1

    Zabbix API. Библиотека для Python

    ----------
    Last edited by dmitryalexeeff; 30-09-2014, 17:10.
  • gescheit
    Senior Member
    • Jul 2007
    • 156

    #2
    1 https://github.com/gescheit/scripts/tree/master/zabbix

    Comment

    • dmitryalexeeff
      Junior Member
      • Mar 2010
      • 26

      #3
      ----------
      Last edited by dmitryalexeeff; 30-09-2014, 16:58.

      Comment

      • alp
        Member
        • Nov 2009
        • 90

        #4
        Обновились ли API для второй версии???
        При попытке получить данные по хосту -- всё в порядке. Но когда пытаюсь делать host.create выдаёт "No permissions !"


        zabbix_api.ZabbixAPIException: (u'Error -32500: Application error., [ CHost::create ] No permissions ! while sending {"params": {"templates": [{"templateid": 10073}], "ip": "192.168.3.1", "useip": 1, "host": "Linux001", "groups": [{"groupid": 36}], "port": 10050}, "jsonrpc": "2.0", "method": "host.create", "auth": "79da4b5da4f42f8bf17e7fe67547df9d", "id": 1}', -32500)

        Структуру брал из документации к 1.8, поменял только номер группы и шаблона.

        Comment

        • gescheit
          Senior Member
          • Jul 2007
          • 156

          #5
          http://www.zabbix.com/documentation/...pi/host/create

          Comment

          • alp
            Member
            • Nov 2009
            • 90

            #6
            Спасибо, что-то я искал искал и находил только эту беспонтовую доку http://www.zabbix.com/documentation/2.0/api

            Comment

            • gescheit
              Senior Member
              • Jul 2007
              • 156

              #7
              Угу, запрятали документацию. Там внизу есть ссылка "See full list of API methods in the Appendixes section. " которая ведет в нужное место

              Comment

              • alp
                Member
                • Nov 2009
                • 90

                #8
                Столкнулся с новой проблемой.
                Через API не видно большую часть созданных в заббиксе групп...
                Их не найти ни по groupid, ни по имени группы. Что за бред?

                print zapi.hostgroup.get({"search": "", "output": "extend"})
                Выдаёт всего 4 группы, хотя фактически этих групп больше 20
                [{u'internal': u'0', u'groupid': u'4', u'name': u'Zabbix servers'}, {u'internal': u'0', u'groupid': u'39', u'name': u'Nonexistent Ltd_Velikiy_Novgorod_\u0412\u0435\u043b\u0438\u043 a\u0438\u0439 \u041d\u043e\u0432\u0433\u043e\u0440\u043e\u0434'} , {u'internal': u'0', u'groupid': u'1', u'name': u'Templates'}, {u'internal': u'0', u'groupid': u'36', u'name': u'Nonexistent Ltd_Cherepovec_\u0427\u0435\u0440\u0435\u043f\u043 e\u0432\u0435\u0446'}]

                Comment

                • alp
                  Member
                  • Nov 2009
                  • 90

                  #9
                  Кроме того не удаётся сделать привязку к шаблону.


                  Code:
                          zapi.host.create({
                                  "host": host,
                                  "interfaces":
                                  [{
                                          "type": 1,
                                          "main": 1,
                                          "useip":1,
                                          "ip": ip,
                                          "dns": "",
                                          "port": 10050
                                  }],
                                  "groups":    [{ "groupid": groupid }],
                                  "templates": [{ "templateid": '10073' }],
                                  "inventory": { "macaddress_a": mac }
                          })
                  Этот код выдаёт ошибку (u'Error -32500: Application error., You do not have permission to perform this operation. while sending {"params": {"templates": [{"templateid": "10073"}], "host": "10.229.103.16", "interfaces": [{"ip": "10.229.103.16", "useip": 1, "dns": "", "main": 1, "type": 1, "port": 10050}], "groups": [{"groupid": "36"}], "inventory": {"macaddress_a": "14:d6:4d:6a:b9:40"}}, "jsonrpc": "2.0", "method": "host.create", "auth": "ef2c0e93ce35510643d1666e83bf44c2", "id": 13}', -32500)


                  При этом если закаментить строку "templates": [{ "templateid": '10073' }], то всё отлично отрабатывает. Шаблон такой точно есть. Пробовал так же помещать 10073 в двойные ковычки и вообще без ковычек, всё время один и тот же результат отсуствия привилегий =(

                  Comment

                  • alp
                    Member
                    • Nov 2009
                    • 90

                    #10
                    Накатал багрепорты по этим двум багам:

                    Comment

                    • alp
                      Member
                      • Nov 2009
                      • 90

                      #11
                      Блин, вся эта хрень была связана с недостатком прав для api юзера =(
                      Добавил его в группу супер-админов и всё заработало.

                      Comment

                      • sersad
                        Senior Member
                        • May 2009
                        • 518

                        #12
                        Пытаюсь перевести свои скрипты которые писаны на bash+sql на zabbix api и столкнулся с проблемой - не понимаю как получить ip адрес хоста

                        Code:
                        zapi = ZabbixAPI(server=server, path="", log_level=6)
                        zapi.login(username, password)
                        
                        
                        #host
                        for host in zapi.host.get(
                            { "output": "extend",
                              "filter": {"host": ["33-kyib22p3"]}
                              }
                            ):
                            print "%s - %s  - %s" % (host['host'], host['hostid'], host['status'],)
                        вывод
                        Code:
                        20: Response Code: 200
                        10: Response Body: {u'jsonrpc': u'2.0', u'result': [{u'available': u'0', u'maintenance_type': u'0', u'maintenances': [], u'ipmi_username': u'', u'snmp_disable_until': u'0', u'ipmi_authtype': u'0', u'ipmi_disable_until': u'0', u'lastaccess': u'0', u'snmp_error': u'', u'ipmi_privilege': u'2', u'jmx_error': u'', u'jmx_available': u'0', u'ipmi_errors_from': u'0', u'maintenanceid': u'0', u'snmp_available': u'1', u'status': u'0', u'host': u'33-kyib22p3', u'disable_until': u'0', u'ipmi_password': u'', u'ipmi_available': u'0', u'maintenance_status': u'0', u'snmp_errors_from': u'0', u'ipmi_error': u'', u'proxy_hostid': u'0', u'hostid': u'10911', u'name': u'33-kyib22p3', u'jmx_errors_from': u'0', u'jmx_disable_until': u'0', u'error': u'', u'maintenance_from': u'0', u'errors_from': u'0'}], u'id': 1}
                        
                        33-kyib22p3 - 10911  - 0
                        Строчки
                        interfaces array Host interfaces objects.
                        отсюда http://www.zabbix.com/documentation/...st/definitions я так и не понял как получить.
                        Подскажите люди добрые как это сделать.
                        в sql все просто:
                        Чтобы получить ip адреса хостов имя которых совпадает с ip адресом (такое часто после автодискавери)
                        Code:
                        SELECT interface.ip FROM hosts,interface WHERE main = 1 AND hosts.hostid= interface.hostid AND hosts.host like '$1' AND interface.ip = hosts.name

                        Comment

                        • alp
                          Member
                          • Nov 2009
                          • 90

                          #13
                          Видимо нужно запрашивать поле с IP, а в вашем коде такого нет:
                          (host['host'], host['hostid'], host['status'],)
                          Если добавить в эту строку host['ip'], очевидно появится и адрес =)

                          Comment

                          • sersad
                            Senior Member
                            • May 2009
                            • 518

                            #14
                            Originally posted by alp
                            Видимо нужно запрашивать поле с IP, а в вашем коде такого нет:
                            (host['host'], host['hostid'], host['status'],)
                            Если добавить в эту строку host['ip'], очевидно появится и адрес =)
                            в версии 1.8 в таблице host было поле ip, а в новой версии 2.0 все ip вынесены в таблицу interface
                            добавление host['ip'] ничего не даст ибо нет в возвращаемых параметрах ключа ip и interface(где в массиве эти ip могут и должны находится если следовать документации и структуре БД).

                            все что возвращает запрос
                            Code:
                            zapi.host.get(
                                { "output": "extend",
                                  "filter": {"host": ["33-kyib22p3"]}
                                  }
                                )
                            Code:
                            20: Response Code: 200
                            10: Response Body: {u'jsonrpc': u'2.0', u'result': [{u'available': u'0', u'maintenance_type': u'0', u'maintenances': [], u'ipmi_username': u'', u'snmp_disable_until': u'0', u'ipmi_authtype': u'0', u'ipmi_disable_until': u'0', u'lastaccess': u'0', u'snmp_error': u'', u'ipmi_privilege': u'2', u'jmx_error': u'', u'jmx_available': u'0', u'ipmi_errors_from': u'0', u'maintenanceid': u'0', u'snmp_available': u'1', u'status': u'0', u'host': u'33-kyib22p3', u'disable_until': u'0', u'ipmi_password': u'', u'ipmi_available': u'0', u'maintenance_status': u'0', u'snmp_errors_from': u'0', u'ipmi_error': u'', u'proxy_hostid': u'0', u'hostid': u'10911', u'name': u'33-kyib22p3', u'jmx_errors_from': u'0', u'jmx_disable_until': u'0', u'error': u'', u'maintenance_from': u'0', u'errors_from': u'0'}], u'id': 2}
                            Вопрос все еще актуален.
                            Last edited by sersad; 26-06-2012, 12:01.

                            Comment

                            • alp
                              Member
                              • Nov 2009
                              • 90

                              #15
                              Вы парвы, вторая версия и правда не выводит поля IP =(


                              Code:
                              [{u'available': u'0', u'maintenance_type': u'0', u'maintenances': [], u'ipmi_username': u'', u'snmp_disable_until': u'0', u'ipmi_authtype': u'0', u'ipmi_disable_until': u'0', u'lastaccess': u'0', u'snmp_error': u'', u'ipmi_privilege': u'2', u'jmx_error': u'', u'jmx_available': u'0', u'ipmi_errors_from': u'0', u'maintenanceid': u'0', u'snmp_available': u'0', u'status': u'0', u'host': u'10.225.29.7', u'disable_until': u'0', u'ipmi_password': u'', u'ipmi_available': u'0', u'maintenance_status': u'0', u'snmp_errors_from': u'0', u'ipmi_error': u'', u'proxy_hostid': u'0', u'hostid': u'16939', u'name': u'10.225.29.7', u'jmx_errors_from': u'0', u'jmx_disable_until': u'0', u'error': u'', u'maintenance_from': u'0', u'errors_from': u'0'}]
                              Надо писать багрепорт.

                              Comment

                              Working...