Ad Widget

Collapse

Вопрос по Zabbix API

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • XeT33
    Junior Member
    • Sep 2021
    • 1

    #1

    Вопрос по Zabbix API

    Коллеги, всем привет.
    В третьем заббиксе конфиг вида

    Code:
    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    from pyzabbix import ZabbixAPI
    
    z = ZabbixAPI('xxxx')
    z.login(username, password)
    
    gr=34 # this group id is routers
    hostname = []
    problem_name = []
    problem_login = []
    
    hosts = z.host.get(groupids=gr, output=['host','hostid'],sortfield=['host'])
    for host in hosts:
    
    events = z.event.get(hostids=host['hostid'],object=0,value=1, selectHosts=['hosts','host'],select_acknowledges=['acknowledges','name','surname','message','alias'],sortfield=['clock'])
    for event in events:
    
    problem_login.append(event["acknowledges"]["alias"])
    print(problem_login)

    спокойно выполняется в python3 в Zabbix 3.4.15.. а в Zabbix 5.0.10. вылезает следующая ошибка:
    problem_login.append(event["acknowledges"]["alias"])
    TypeError: list indices must be integers or slices, not str

    поменялся синтаксис? подскажите пожалуйста как получить данную информацию.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Чтобы точно ответить, поменялся ли формат, нужно видеть пример ответа на запрос event.get в обеих версиях Zabbix.
    Скорее всего, что-то поменялось, хотя документация показывает более-менее одинаковый формат как для версии 3.4 (и даже для 3.0), так и для 5.0.

    Попробую в меру своих познаний Python-а попытаться проанализировать ваш код.
    Если верить примерам из документации и пренебречь неправильными отступами в вашей Python-программе, то переменная events будет содержать список (list) объектов типа "словарь" (dictionary), переменная event внутри цикла будет содержать текущий элемент этого списка. Соответственно, event["acknowleges"] - это ещё один список (list), содержащий объекты типа "словарь" (dictionary), каждый элемент этого списка имеет атрибут "alias". Но операция ["alias"] в программе применяется не к элементу списка, а к самому списку, что и вызывает ошибку.
    Могу предположить, что надо раскрыть этот список acknowledge-ей ещё одним вложенным циклом, что-то вроде такого, но надо пробовать:
    Code:
    events = z.event.get(hostids=host['hostid'],object=0,value=1, selectHosts=['hosts','host'],select_acknowledges=['acknowledges','name','surname','message','alias'],sortfield=['clock'])
    for event in events:
      #следующую строку разбиваем на две строки, чтобы пройтись по списку acknowledge-ей
      for ack in event["acknowledges"]:
        problem_login.append(ack["alias"])
    print(problem_login)

    Comment


    • XeT33
      XeT33 commented
      Editing a comment
      Ваш способ с ещё одним вложенным циклом помог. Спасибо огромное!
Working...