Ad Widget

Collapse

Выгрузка отчетов

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Polkovnikiv
    Member
    • Sep 2013
    • 71

    #1

    Выгрузка отчетов

    Добрый день!

    Подскажите, каким образом можно выгрузить отчет ( например об аварийных узлах на данный момент) в Excel.
    Нашел только в Событиях экспорт в CSV, и то криво как-то работает.

    Заранее спасибо.
  • Zentarim
    Senior Member
    • Mar 2012
    • 526

    #2
    Кстати да, может быть кроме выгрузки в csv из веб-интерфейса еще что-нибудь возможно выгрузить?

    Comment

    • Polkovnikiv
      Member
      • Sep 2013
      • 71

      #3
      Неужели кроме копипаста вариантов нет?

      Comment

      • yukra
        Senior Member
        • Apr 2013
        • 1359

        #4
        Originally posted by Polkovnikiv
        Неужели кроме копипаста вариантов нет?
        1) csv в excel импортируется нормально
        2) Напишите свой конвектор из муксуля (или что у вас там) в эксель
        3) Ексель? Система мониторинга? Да ну вас с такими запросами.

        Comment

        • Polkovnikiv
          Member
          • Sep 2013
          • 71

          #5
          Originally posted by yukra
          1) csv в excel импортируется нормально
          Нормально, но только из "Событий". Аесли нужно из раздела "Триггеры" недоступные узлы?

          Comment

          • sersad
            Senior Member
            • May 2009
            • 518

            #6
            Думаю сейчас над данным вопросом.
            Нужны выгружаемые отчеты по триггерам за период времени. Стандартного ничего нет.
            нужен отчет вида report5.php но с возможностью его сделать по группе или группам узлов и выгрузкой. Пока работаю.

            Comment

            • sersad
              Senior Member
              • May 2009
              • 518

              #7
              Вот мое решение:
              Берет все триггеры за period в секундах назад от момента запуска в группе groupids и делает отчет в виде xlsx файла.
              Каменты вроде подробные, если что непонятно спрашивайте
              Code:
              # -*- coding: utf-8 -*-
              """
              Shows a list of all trigers
              """
              
              from getpass import getpass
              from pyzabbix import ZabbixAPI #https://github.com/lukecyca/pyzabbix/wiki
              import datetime
              import time
              import xlsxwriter #https://pypi.python.org/pypi/XlsxWriter sudo pip install xlsxwriter
              
              
              group = 12 #gropids
              period = 86400 # 1 day
              url = 'https://{url}'
              login = 'username'
              password = 'password'
              
              
              # The hostname at which the Zabbix web interface is available
              ZABBIX_SERVER = url
              zapi = ZabbixAPI(ZABBIX_SERVER)
              # Disable SSL certificate verification
              zapi.session.verify = False
              # Login to the Zabbix API
              zapi.login(login, password)
              # now time unix timestamp
              unix_time = time.mktime(datetime.datetime.now().timetuple())
              
              #create dic priority
              prior={5:u'Чрезвычайная', 4:u'Высокая', 3:u'Средняя', 2:u'Предупреждение', 1:u'Информация', 0:u'Не классифицировано',}
              
              #create blank dic h(hostid)=name
              h={}
              #fill dic
              for i in zapi.host.get(output='extend',
                                     groupids=group,
                                     monitored_hosts=True, #Return only monitored hosts
                                     with_triggers=True #Return only hosts that have triggers
                                     ):
                  h[i['hostid']]=i['name']
              
              
              
              #create blank dic t(triggerid)=description
              t={}
              #fill dic
              for i in zapi.trigger.get(output=['triggerid',
                          'description',
                          'priority'],
                          groupids=group,
                          active=True, #Return only enabled triggers that belong to monitored hosts
                          expandDescription=True, #Expand macros in the name of the trigger
                          monitored=True #Return only enabled triggers that belong to monitored hosts and contain only enabled items
                          ):
                  t[i['triggerid']]=[i['description'], int(i['priority'])]
              
              #create a new workbook
              workbook = xlsxwriter.Workbook('trigers.xlsx')
              #add a new worksheet 
              worksheet = workbook.add_worksheet('top trigers')
              # Set the autofilter
              worksheet.autofilter('A1:E1')
              
              
              bold = workbook.add_format({'bold': True})
              bold.set_align('center')
              bold.set_bg_color('#AAAAAA')
              bold.set_border(1)
              bold.set_border_color('black')
              
              center = workbook.add_format({'align':'center'})
              
              
              formcell = workbook.add_format()
              formcell.set_border_color('black')
              formcell.set_border(1)
              
              formcellurl = workbook.add_format({'font_color': 'blue',
                  'underline':  1,
                  'border_color': 'black',
                  'border': 1,
                  'align':'center'
                  })
              
              fc0 = workbook.add_format()
              fc0.set_border_color('black')
              fc0.set_border(1)
              fc0.set_bg_color('#DBDBDB')
              fc1 = workbook.add_format()
              fc1.set_border_color('black')
              fc1.set_border(1)
              fc1.set_bg_color('#D6F6FF')
              fc2 = workbook.add_format()
              fc2.set_border_color('black')
              fc2.set_border(1)
              fc2.set_bg_color('#FFF6A5')
              fc3 = workbook.add_format()
              fc3.set_border_color('black')
              fc3.set_border(1)
              fc3.set_bg_color('#FFB689')
              fc4 = workbook.add_format()
              fc4.set_border_color('black')
              fc4.set_border(1)
              fc4.set_bg_color('#FF9999')
              fc5 = workbook.add_format()
              fc5.set_border_color('black')
              fc5.set_border(1)
              fc5.set_bg_color('#FF3838')
              fcs=[fc0, fc1, fc2, fc3, fc4, fc5]
              
              row = 1
              col = 0
              
              worksheet.set_column('A:A', 25)
              worksheet.set_column('B:B', 40)
              worksheet.set_column('C:C', 19, center)
              worksheet.set_column('D:D', 17, center)
              worksheet.set_column('E:E', 15, center)
              
              worksheet.write(0, col, 'Host', bold)
              worksheet.write(0, col + 1, 'Triger', bold)
              worksheet.write(0, col + 2, 'Time', bold)
              worksheet.write(0, col + 3, 'Severities', bold)
              worksheet.write(0, col + 4, 'URL', bold)
              
              for k,v in h.items():
              #    print "hostname = ", v,  "   id = ", k
                  events = zapi.event.get(output='extend',
                      #select_acknowledges='extend',
                      #acknowledged=True,
                      hostids=k,
                      source=0, #Type of the event.  0 - event created by a trigger; 1 - event created by a discovery rule;2 - event created by active agent auto-registration;3 - internal event. 
                      value=1, #Possible values for trigger events 0 - OK; 1 - problem. 
                      groupids=group,
                      sortfield='eventid',
                      time_from=unix_time - period,
                      time_till=unix_time)
                  for e in events:
                      worksheet.write(row, col, v, formcell)
                      worksheet.write(row, col + 1, t[e['objectid']][0], formcell)
                      worksheet.write(row, col + 2, datetime.datetime.fromtimestamp(int(e['clock'])).strftime('%Y-%m-%d %H:%M:%S'), formcell )
                      worksheet.write(row, col + 3, prior[t[e['objectid']][1]], fcs[t[e['objectid']][1]] )
                      worksheet.write(row, col + 4, 'https://[B]{url}[/B]/tr_events.php?triggerid='+e['objectid']+'&eventid='+e['eventid'], formcellurl, u'Просмотреть', u'посмотреть событие на сервере мониторинга' )
                      row += 1
              
              
              #Finally, we close the Excel file via the close() method:
              workbook.close()

              Comment

              • Jimson
                Senior Member
                • Jan 2008
                • 1327

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

                Это я к тому что есть масса систем генерации отчетов, на любой вкус и цвет, не стоит ждать гибкой и функциональной системы генерации отчета в системе мониторинга. Можете хоть в том же MS Office делать отчеты, средства сопряжения с SQL базами данных там есть. Можете разобраться с JasperReports или найти то что вам больше понравится.

                Comment

                • sersad
                  Senior Member
                  • May 2009
                  • 518

                  #9
                  Ни одного простого решения которое бы автоматически рассылало отчет по заданным параметрам я не видел. Ну и делать из системы "комбайн" как раз самое важное . Каждый пилит софт под себя.

                  Comment

                  • dejurka
                    Junior Member
                    • Apr 2018
                    • 1

                    #10
                    Originally posted by sersad
                    Вот мое решение:
                    Берет все триггеры за period в секундах назад от момента запуска в группе groupids и делает отчет в виде xlsx файла.
                    Каменты вроде подробные, если что непонятно спрашивайте
                    Code:
                    # -*- coding: utf-8 -*-
                    """
                    Shows a list of all trigers
                    """
                    
                    from getpass import getpass
                    from pyzabbix import ZabbixAPI #https://github.com/lukecyca/pyzabbix/wiki
                    import datetime
                    import time
                    import xlsxwriter #https://pypi.python.org/pypi/XlsxWriter sudo pip install xlsxwriter
                    
                    
                    group = 12 #gropids
                    period = 86400 # 1 day
                    url = 'https://{url}'
                    login = 'username'
                    password = 'password'
                    
                    
                    # The hostname at which the Zabbix web interface is available
                    ZABBIX_SERVER = url
                    zapi = ZabbixAPI(ZABBIX_SERVER)
                    # Disable SSL certificate verification
                    zapi.session.verify = False
                    # Login to the Zabbix API
                    zapi.login(login, password)
                    # now time unix timestamp
                    unix_time = time.mktime(datetime.datetime.now().timetuple())
                    
                    #create dic priority
                    prior={5:u'Чрезвычайная', 4:u'Высокая', 3:u'Средняя', 2:u'Предупреждение', 1:u'Информация', 0:u'Не классифицировано',}
                    
                    #create blank dic h(hostid)=name
                    h={}
                    #fill dic
                    for i in zapi.host.get(output='extend',
                    groupids=group,
                    monitored_hosts=True, #Return only monitored hosts
                    with_triggers=True #Return only hosts that have triggers
                    ):
                    h[i['hostid']]=i['name']
                    
                    
                    
                    #create blank dic t(triggerid)=description
                    t={}
                    #fill dic
                    for i in zapi.trigger.get(output=['triggerid',
                    'description',
                    'priority'],
                    groupids=group,
                    active=True, #Return only enabled triggers that belong to monitored hosts
                    expandDescription=True, #Expand macros in the name of the trigger
                    monitored=True #Return only enabled triggers that belong to monitored hosts and contain only enabled items
                    ):
                    t[i['triggerid']]=[i['description'], int(i['priority'])]
                    
                    #create a new workbook
                    workbook = xlsxwriter.Workbook('trigers.xlsx')
                    #add a new worksheet
                    worksheet = workbook.add_worksheet('top trigers')
                    # Set the autofilter
                    worksheet.autofilter('A1:E1')
                    
                    
                    bold = workbook.add_format({'bold': True})
                    bold.set_align('center')
                    bold.set_bg_color('#AAAAAA')
                    bold.set_border(1)
                    bold.set_border_color('black')
                    
                    center = workbook.add_format({'align':'center'})
                    
                    
                    formcell = workbook.add_format()
                    formcell.set_border_color('black')
                    formcell.set_border(1)
                    
                    formcellurl = workbook.add_format({'font_color': 'blue',
                    'underline': 1,
                    'border_color': 'black',
                    'border': 1,
                    'align':'center'
                    })
                    
                    fc0 = workbook.add_format()
                    fc0.set_border_color('black')
                    fc0.set_border(1)
                    fc0.set_bg_color('#DBDBDB')
                    fc1 = workbook.add_format()
                    fc1.set_border_color('black')
                    fc1.set_border(1)
                    fc1.set_bg_color('#D6F6FF')
                    fc2 = workbook.add_format()
                    fc2.set_border_color('black')
                    fc2.set_border(1)
                    fc2.set_bg_color('#FFF6A5')
                    fc3 = workbook.add_format()
                    fc3.set_border_color('black')
                    fc3.set_border(1)
                    fc3.set_bg_color('#FFB689')
                    fc4 = workbook.add_format()
                    fc4.set_border_color('black')
                    fc4.set_border(1)
                    fc4.set_bg_color('#FF9999')
                    fc5 = workbook.add_format()
                    fc5.set_border_color('black')
                    fc5.set_border(1)
                    fc5.set_bg_color('#FF3838')
                    fcs=[fc0, fc1, fc2, fc3, fc4, fc5]
                    
                    row = 1
                    col = 0
                    
                    worksheet.set_column('A:A', 25)
                    worksheet.set_column('B:B', 40)
                    worksheet.set_column('C:C', 19, center)
                    worksheet.set_column('D:D', 17, center)
                    worksheet.set_column('E:E', 15, center)
                    
                    worksheet.write(0, col, 'Host', bold)
                    worksheet.write(0, col + 1, 'Triger', bold)
                    worksheet.write(0, col + 2, 'Time', bold)
                    worksheet.write(0, col + 3, 'Severities', bold)
                    worksheet.write(0, col + 4, 'URL', bold)
                    
                    for k,v in h.items():
                    # print "hostname = ", v, " id = ", k
                    events = zapi.event.get(output='extend',
                    #select_acknowledges='extend',
                    #acknowledged=True,
                    hostids=k,
                    source=0, #Type of the event. 0 - event created by a trigger; 1 - event created by a discovery rule;2 - event created by active agent auto-registration;3 - internal event.
                    value=1, #Possible values for trigger events 0 - OK; 1 - problem.
                    groupids=group,
                    sortfield='eventid',
                    time_from=unix_time - period,
                    time_till=unix_time)
                    for e in events:
                    worksheet.write(row, col, v, formcell)
                    worksheet.write(row, col + 1, t[e['objectid']][0], formcell)
                    worksheet.write(row, col + 2, datetime.datetime.fromtimestamp(int(e['clock'])).strftime('%Y-%m-%d %H:%M:%S'), formcell )
                    worksheet.write(row, col + 3, prior[t[e['objectid']][1]], fcs[t[e['objectid']][1]] )
                    worksheet.write(row, col + 4, 'https://[B]{url}[/B]/tr_events.php?triggerid='+e['objectid']+'&eventid='+e['eventid'], formcellurl, u'Просмотреть', u'посмотреть событие на сервере мониторинга' )
                    row += 1
                    
                    
                    #Finally, we close the Excel file via the close() method:
                    workbook.close()
                    Здравствуйте, подскажи пожалуйста у меня отчет пустым создается, в чем может быть проблема?

                    Comment

                    Working...