Ad Widget

Collapse

Значения из файла логов, например NGINX

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Alex_UUU
    Senior Member
    • Dec 2018
    • 541

    #1

    Значения из файла логов, например NGINX

    Иногда лучше спросить, может очевидную вещь и идти куда пошлют, чем несколько дней думать :-)

    Имеем файл логов Nginx, например, там в каждой строчке есть, например, время обработки запроса
    И вот это время надо вытащить, с ним работать. Но объемы.
    напрашивается logrt, с регекспом, предобработкой, получаем значение.
    Если поставить интервал, то, например, за минуту получим 1000 значений - перебор, по сути надо хранить только max.

    Можно ли что-то сделать стандартными средствами? Вдруг в шестерке это уже есть? Или на второй агент писать свой обработчик?
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #2
    У nginx есть модуль статистики (платный) или бесплатный stub_status​ - возможно там есть нужная вам агрегированная статистика.
    А обработку лога можно сделать костылями на самом сервере и слать в заббикс уже агрегацию.

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #3
      Штатными средствами я вижу только один способ из двух шагов:
      • как и было предложено, с помощью элемента данных log или logrt (в зависимости от формата имени лог-файла) собирать нужные данные. Прямо в ключе этого элемента данных прописать нужное регулярное выражение и использовать шестой параметр, чтобы извлекать из строки только конкретное значение. Тип данных - сразу числовой, никакая предобработка не нужна; срок хранения истории - небольшой (немного превышающий интервал агрегирования).
      • настроить вычисляемый элемент данных, который с нужным интервалом с помощью функций агрегирования будет обсчитывать историю предыдущего элемента данных.

      Comment

      • Alex_UUU
        Senior Member
        • Dec 2018
        • 541

        #4
        Originally posted by Hamardaban
        У nginx есть модуль статистики (платный) или бесплатный stub_status​ - возможно там есть нужная вам агрегированная статистика.
        А обработку лога можно сделать костылями на самом сервере и слать в заббикс уже агрегацию.
        Ну да, либо старые грок или мультилог экспортеры.
        Или самому написать процесс, который висит параллельно логу например tail и анализировать (на перле даже модуль есть)...

        Comment

        • Alex_UUU
          Senior Member
          • Dec 2018
          • 541

          #5
          Всем спасибо :-)
          Так и пришлось разобраться с многопоточностью, нитями, пипами, сокетами :-)
          В общем захимичил скриптик, которому скармливаешь двухуровневый json с регекспами, и он по ним в реалтайме файлы обрабатывает.
          Ну и на выходе по http запросу выдает, что надо, например json со значениями.
          А теперь вопрос:
          Как сделать (и можно ли) дискаверинг с двумя уровнями?
          Имеем код
          Code:
          {
          "file1": {label1:{"metrica1":{"item1":1,"item2":1,"item3":1 ),
                                  "metrica2":{"item1":1,"item2":1,"item3":1)
                                     },
                         label2:{"metrica1":{"item1":1,"item2":1,"item3":1 ),
                                     "metrica2":{"item1":1,"item2":1,"item3":1)
                                    },
          "file2": {label1:{"metrica1":{"item1":1,"item2":1,"item3":1 ),
                                  "metrica2":{"item1":1,"item2":1,"item3":1)
                                     },
                         label2:{"metrica1":{"item1":1,"item2":1,"item3":1 ),
                                     "metrica2":{"item1":1,"item2":1,"item3":1)
                                    }
          }​
          Итогом надо получить кучу зависимых элементов-прототипов вида
          Code:
          $.file1.label1.metrica1.item1
          $.file1.label1.metrica1.item2
          $.file1.label1.metrica1.item3
          ...
          $.file2.label2.metrica2.item3
          Возможно ли?
          Ил лучше сделать 2 запроса:
          первый, который выдает таблицу названий на основании нее построить прототипы ЭД, которые будут получать первоначальный json с данными:

          ЗЫ. Имхо 2 запроса лучше и прозрачнее, вроде бы так.
          ​​​​​​​

          ​​​​​​​​

          Comment

          Working...