Хотелось бы настройку обработки логов от 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 можно было получать разбивку логов, используя написанные там шаблоны и комбинируя их вместе в зависимости от вида лога.
Вопрос задан
более трёх лет назад
262 просмотра