Многострочный кодек 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]
Другие вопросы по тегам