Многострочный кодек Logstash
Я пытаюсь настроить logstash для извлечения записей журнала из honeypot, который имеет несколько строк для каждой записи. Журналы настроены в следующем формате:
##############################################
{
"data": [
{
"count": 8,
"honeypot": "anum",
"source_ip": "ip1"
},
{
"count": 10,
"honeypot": "anum",
"source_ip": "ip2"
}
],
"meta": {
...
}
}
##############################################
Теперь я могу указать в части шаблона, чтобы взять три записи ("count", "honeypot" и "source_ip") и как?
Тогда откуда я могу указать шаблон grok, чтобы использовать три значения?
1 ответ
Вы можете попробовать следующий конфиг:
input {
stdin {
codec => multiline {
pattern => "\#+"
negate => true
what => previous
}
}
}
filter {
if "multiline" in [tags] {
mutate {
gsub => [
"message", "\n", "",
"message", "\#", ""
]
}
json {
source => "message"
}
if "_jsonparsefailure" not in [tags] {
split {
field=>"data"
}
}
}
}
output {
stdout {
codec => rubydebug
}
}
с split
Фильтровать ваше событие будет разделено на несколько событий, так что вы можете получить три значения:
[data][count]
[data][honeypot]
[data][source_ip]