Как экранировать ключи [] при фильтрации полей JSON с помощью Logstash? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь настроить Logstash для записи некоторых полей JSON в базу данных.

Источник JSON выглядит следующим образом:

"задержки": {"запрос": 0, "kong": 0, "прокси": - 1}, "служба": {"хост":" 127.0.0.1" , "created_at": 1554311520, "connect_timeout": 60000, "идентификатор": "bdc5e673-4631-4460-8932-16633057d19f", "протокол": "HTTP", "имя": "Разработка" "read_timeout": 60000, "порт": 9999, "updated_at": 1554316363, "повторы": 5, "write_timeout": 60000}, "запрос": { "строки запроса": {}, "размер":"375 "," uri ":" / some / api / 32165498 / endpoint "," url ":" http://127.0.0.1:8000/some/api/32165498/endpoint","headers":{"header1":"1","header2":"352515622568","header3":"a","accept":"/","header4":"111","header5":"39318053","cache-control":"no-cache","connection":"keep-alive","accept-encoding":"gzip, deflate "," user-agent ":" PostmanRuntime / 7.13.0 "," host ":" 127.0.0.1: 8000" , "почтальон-маркер": "e6bdbc21-e39b-4420-9d6f-5666d88d8383", "header6": "а", "header7": "96"}, "метод": "GET"},»header7 ":" 127.0.0.1" , "пытается": {}, "upstream_uri": "/ некоторые / API / 32165498 / конечная точка", "ответ": { "заголовки": { "соединение": "близко",»тип контента ":" application / json; charset = utf-8 "," content-length ":" 194 "," server ":" kong / 1.0.3 "}," status ": 400," size ":"371"}, "маршрут": { "created_at": 1554311575, "методы": [ "GET", "POST"], "идентификатор": "6a13g329-bf1f-451b-BCAA-14cfcf087925", "услуги":{ "ID": "bd51e673-4631-4460-8932-16633057d19f "}," имя ":" Разработка " "хозяева": [], "updated_at": 1554316427, "preserve_host" ложь "regex_priority": 0, "пути": [], "протоколы": ["http "]," strip_path ": false}," launch_at ": 1559094275277}

При попытке отфильтровать некоторые поля ключи [], похоже, портят вывод.

Журнал текущего конвейера.conf выглядит следующим образом:

input {
    beats {
    port => "5044"
    host => "0.0.0.0"
    }
}

filter {
    json {
            source => "json-message"
            }

            if [request][header1] {
            mutate {
            add_field => { "header" => "%{request[header1]}"}}}


    mutate {
            remove_field => [ "header" ] 
            }
        }
     }
output {
    file {
    path => "/kong_logs/test.log"
}
}

Я также пробовал следующие конфигурации безрезультатно:

add_field => { "header" => "%{[request][header1]}"}}}
add_field => { "header" => "%{[request][0][header1]}"}}}
add_field => { "header" => "%{request[0][header1]}"}}}

С этим кодом я бы ожидал, что поле header1 будет отфильтровано,однако он все еще находится в выводе.

Заранее спасибо!

1 Ответ

0 голосов
/ 13 июня 2019

Не совсем решение, но в качестве обходного пути я использовал следующий код:

mutate {
            remove_field => [ {"[header1][field]" ]  
}

Работал как шарм.

...