У меня есть многострочный журнал ниже, который я пытаюсь проанализировать с помощью моего logsta sh config.
2020-05-27 11:59:17 ----------------------------------------------------------------------
2020-05-27 11:59:17 Got context
2020-05-27 11:59:17 Raw context:
EMAIL=abc.def@example.com
NAME=abc.def
PAGER=+11111111111111
DATE=2020-05-27
AUTHOR=
COMMENT=
ADDRESS=1.1.1.1
ALIAS=abc.example.com
ATTEMPT=1
2020-05-27 11:59:17 Previous service hard state not known. Allowing all states.
2020-05-27 11:59:17 Computed variables:
URL=abc.example.com
STATE=UP
2020-05-27 11:59:17 Preparing flexible notifications for abc.def
2020-05-27 11:59:17 channel with plugin sms
2020-05-27 11:59:17 - Skipping: set
2020-05-27 11:59:17 channel with plugin plain email
2020-05-27 11:59:20 --------------------------------------------------------------------
Это мой logsta sh config:
input {
stdin { }
}
filter {
grok {
match => { "message" => "(?m)%{GREEDYDATA:data}"}
}
if [data] {
mutate {
gsub => [
"data", "^\s*", ""
]
}
mutate {
gsub => ['data', "\n", " "]
}
}
}
output {
stdout { codec => rubydebug }
}
Конфигурация Filebeat:
multiline.pattern: '^[[:space:]][A-Za-z]* (?m)'
multiline.negate: false
multiline.match: after
Чего я хочу достичь: многострочный журнал сначала будет сопоставлен с многострочным шаблоном и будет разбит на строки, например
Message1: 2020-05-27 11:59:17 ----------------------------------------------------------------------
Message2: 2020-05-27 11:59:17 Got context
Message3: 2020-05-27 11:59:17 Raw notification context:
EMAIL=abc.def@example.com
NAME=abc.def
PAGER=+11111111111111
DATE=2020-05-27
AUTHOR=
COMMENT=
ADDRESS=1.1.1.1
ALIAS=abc.example.com
ATTEMPT=1
После этого, когда эти строки журнала будут проанализированы, они снова будут разделены разделителем, а затем я могу использовать фильтр kv для чтения каждой пары значений ключа, например ALIAS = ab c .example.com в одном сообщении номер 3.
Подскажите, как этого добиться?