@dick1997

Как правильно настроить обработку логов в logstash, через grok, для динамических логов?

Хотелось бы настройку обработки логов от mikrotik, в logstash, с разбивкой строк через GROK, если логи приходят динамические такого вида

1,2,3 текст и т.д
1,2 текст и т.д
1 текст и т.д

Для этого добавляем в patterns такого вида

TOPIC1 %{NOTSPACE:TOPIC1}
TOPIC2 %{NOTSPACE:TOPIC1},%{NOTSPACE:TOPIC2}
TOPIC3 %{NOTSPACE:TOPIC1},%{NOTSPACE:TOPIC2},%{NOTSPACE:TOPIC3}
TOPICALL (?:%{TOPIC1}|%{TOPIC2}|%{TOPIC3}) %{GREEDYDATA:Log}

в конфиге logstash прописываем шаблоны из нашего patterns

grok {
match => { "message" => "%{TOPICALL}" }
}

При получении логов вида "1 текст и т.д","1,2 текст и т.д" и "1,2,3 текст и т.д", вывод логов получается такого типа

{
"Log": "текст и т.д",
"TOPIC1": "1"
}
----
{
"Log": "текст и т.д",
"TOPIC1": "1,2"
}
----
{
"Log": "текст и т.д",
"TOPIC1": "1,2,3"
}

но если в самом конфиге не использовать patterns, а прописать прямую обработку логов

grok {
match => {"message" => "%{NOTSPACE:TOPIC1},%{NOTSPACE:TOPIC2},%{NOTSPACE:TOPIC3} %{GREEDYDATA:Log}"}
match => {"message" => "%{NOTSPACE:TOPIC1},%{NOTSPACE:TOPIC2} %{GREEDYDATA:Log}"}
match => {"message" => "%{NOTSPACE:TOPIC1} %{GREEDYDATA:Log}"}
}

то логи уже принимают требуемый вид

{
"Log": "текст и т.д",
"TOPIC1": "1"
}
---
{
"Log": "текст и т.д",
"TOPIC2": "2",
"TOPIC1": "1"
}
---
{
"TOPIC3": "3",
"Log": "текст и т.д",
"TOPIC2": "2",
"TOPIC1": "1"
}

Как сделать так, чтобы и через patterns можно было получать разбивку логов, используя написанные там шаблоны и комбинируя их вместе в зависимости от вида лога.
  • Вопрос задан
  • 260 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы