Фильтрация с помощью регулярного выражения json - PullRequest
0 голосов
/ 17 апреля 2020

При фильтрации журналов Logsta sh может использовать grok для анализа полученного файла журнала (скажем, это Nginx журналов). Синтаксический анализ с помощью grok требует правильной установки типа поля - например, %{HTTPDATE:timestamp}.

Однако, если Nginx начинает регистрироваться в формате JSON, Logsta sh выполняет очень мало обработки. Он просто создает индекс и выводит данные в Elasticseach. Это заставляет меня верить, что только Elasticsearch извлекает выгоду из того «способа», которым он получает индекс.

Есть ли какое-либо преимущество для Elasticseatch в том, что данные индекса, которые были обработаны с помощью Regex, по сравнению с JSON? Например, влияет ли это на время запроса?

1 Ответ

1 голос
/ 17 апреля 2020

Для эластичного поиска не имеет значения, как вы анализируете сообщения, у него нет информации об этом, вам нужно только отправить документ JSON с полями, которые вы хотите сохранить и выполнить поиск в соответствии с вашим отображением индекса .

Однако то, как вы анализируете сообщение, имеет значение для Logsta sh, поскольку это напрямую повлияет на производительность.

Например, рассмотрите следующее сообщение:

2020-04-17 08:10:50,123 [26] INFO ApplicationName - LogMessage From The Application

Если вы хотите иметь возможность искать и применять фильтры к каждой части этого сообщения, вам необходимо разобрать его по полям.

timestamp: 2020-04-17 08:10:50,123
thread: 26
loglevel: INFO
application: ApplicationName
logmessage: LogMessage From The Application

Для анализа этого сообщения вы можете использовать разные фильтры, один из них - grok, который использует регулярное выражение, но если ваше сообщение всегда имеет один и тот же формат, вы можете использовать другой фильтр, например dissect, в этом случае оба получат одно и то же, но в то время как grok использует регулярное выражение для соответствия полей, dissect является только позиционным, это имеет огромное значение в использовании ЦП при большом количестве событий в секунду.

Рассмотрим теперь t Если у вас есть то же сообщение, но в формате JSON.

{ "timestamp":"2020-04-17 08:10:50,123", "thread":26, "loglevel":"INFO", "application":"ApplicationName","logmessage":"LogMessage From The Application" } 

Logsta sh проще и быстрее разобрать это сообщение, вы можете сделать это в вашем input, используя json код c или вы можете использовать фильтр json в своем блоке фильтров.

Если у вас есть контроль над тем, как создаются ваши сообщения журнала, выберите то, что вам не нужно использовать grok.

...