Вы можете объединить части до и после UUID в отдельные группы, затем вы можете объединить два значения в одно поле:
grok {
match => {
"message" => "%{DATA:message}(?: HTTP/%{NUMBER:httpversion}) %{WORD:verb} %{NOTSPACE:request1}/%{UUID:uuid}%{NOTSPACE:request2}"
}
}
mutate {
add_field => {
"request" => "%{request1}%{request2}"
}
}
Вы можете удалить request1
и request2
позже, если вы sh тоже.
Если вы не можете использовать mutate
, вы можете придумать только выражение, где request
включает UUID:
%{DATA:message}(?: HTTP/%{NUMBER:httpversion}) %{WORD:verb} (?<request>.*?(?<UUID>[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12})\S*)
потому что нельзя сопоставить две непересекающиеся строки текста в одну группу захвата .