Nano Hash - криптовалюты, майнинг, программирование

Logstash: поиск вложенных гроков? Разбирать поле на несколько полей?

У меня есть записи в журнале, которые выглядят так...

2014-02-25 00:00:03,936 INFO  - something happened...bla bla bla
2014-02-25 00:00:03,952 INFO  - ***Request Completed*** [   78.002] mS [http://cloud.mydomain.local/schedule/search?param=45]
2014-02-25 00:00:04,233 INFO  - something else happened...bla bla bla

У меня есть фильтр grok, который правильно анализирует строки...

grok {
    match => [ "message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- %{GREEDYDATA:body}" ]
}

Я хотел бы проанализировать дополнительные данные из «тела», если «тело» начинается с «***Запрос выполнен***». А именно 'elaspsedms' и 'uri'. Как я могу это сделать?

В другом месте было предложено добавить еще одну запись сообщения в фильтр grok, как это...

grok {
    match => [ 
              "message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- \*\*\*Request Completed\*\*\* \[%{SPACE}%{NUMBER:elaspedms}\] mS \[%{URI:uri}\]",
              "message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- %{GREEDYDATA:body}"
             ]
}

... это работает, но для временных линий значение 'body' НЕ устанавливается. В идеале я бы хотел, чтобы тело всегда содержало последнюю часть записи, и если запись представляет собой временную линию, выполняйте дополнительный анализ elapsedms и uri.

Любые идеи, как я могу это сделать?

Есть ли средства для анализа полей? Так что я мог бы попытаться разобрать «тело» в elapsedms/uri, если это не удастся, продолжить. Или есть способ вложить совпадения полей в выражение grok?

Мысли?

Изменить: вместо того, чтобы всегда устанавливать «тело», могу ли я просто создать тело из «эласпедмс» и «ури», если установлено «эласпедмс»?


Ответы:


1

Это работает. Есть ли способ лучше?

grok {
   match => [ 
          "message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- \*\*\*Request Completed\*\*\* \[%{SPACE}%{NUMBER:elaspedms}\] mS \[%{URI:uri}\]",
          "message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- %{GREEDYDATA:body}"
         ]
}

# if body is NOT set (timing line) make one
if ![body] {
    mutate { 
        add_field => [ "body", "***Request Completed*** [%{elapsedms}] mS [%{uri}]"] 
    }
}
28.02.2014

2

Вот лучший способ, который, как известно, работает в Logstash 1.5.3:

grok {
   match => [ 
          "message", "%{TIMESTAMP_ISO8601:logdate} %{WORD:severity}%{SPACE}- %{GREEDYDATA:body}"
         ]
}

# if body is set (which should always be true, but it's good to check anyway)
if [body] {
    grok {
       break_on_match => true
       match => [ 
          "body", "\*\*\*Request Completed\*\*\* \[%{SPACE}%{NUMBER:elaspedms}\] mS \[%{URI:uri}\]"
         ]
    }
}

Таким образом, каждая запись будет иметь поле body, но только строки, содержащие "***Request Completed***", будут иметь поля elapsedms и uri. Вы можете продолжить эту логику с под-под-полями и под-под-под-полями так глубоко, как вам нравится.

Я также включил синтаксис "break_on_match" на случай, если это будет полезно. Вы можете установить его на true или false.

Ключевым моментом является использование поля body (или любого другого поля, которое вы анализируете) в качестве источника соответствия, а не message.

01.12.2015

3

Я считаю, что вам нужно использовать параметр break_on_match в grok и установить для него значение false: http://logstash.net/docs/1.4.2/filters/grok#break_on_match

05.12.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..