Logstash - присоединяйтесь к двум Dicts - PullRequest
0 голосов
/ 15 ноября 2018

я написал небольшой рабочий пример, чтобы объяснить мой вопрос:

input {
  stdin {
      codec => "json"
  }
}
filter {
    mutate {
        rename => { "[DictA]" => "[ZielDict]" } 
        rename => { "[DictB]" => "[ZielDict]" } 
    }
}
output {
  stdout {}
}

Input

{
"DictA": {
    "valueA": 123
},
"DictB": {
    "valueB": 456
}
}

выход

{
      "@version" => "1",
          "host" => "78f85c66a671",
    "@timestamp" => 2018-11-15T12:11:01.193Z,
      "ZielDict" => {
        "valueB" => 456
    }
}

Требуемый вывод (я не хочу переопределять DictA!)

{
      "@version" => "1",
          "host" => "78f85c66a671",
    "@timestamp" => 2018-11-15T12:11:01.193Z,
      "ZielDict" => {
        "valueA" => 123
        "valueB" => 456
    }
}

Итак, как вы можете видеть, я хочу добавить к ZielDict вместо того, чтобы переопределять его с помощью DictB. Как я могу справиться с этим? Заранее спасибо!

1 Ответ

0 голосов
/ 15 ноября 2018

Используйте параметр mutate.merge :

input {
  stdin {
      codec => "json"
  }
}
filter {
    mutate {
        merge => { "DictA" => "DictB" } 
    }
}
output {
  stdout {}
}

С этой конфигурацией вы получаете:

{
    "host" => "frsred-0077",
    "@timestamp" => 2018-11-15T13:54:19.923Z,
    "DictA" => {
        "valueB" => 456,
        "valueA" => 123
    },
    "DictB" => {
        "valueB" => 456
    },
    "@version" => "1"
}

Вам придется удалить поле DictB и переименовать DictA, чтобы получить желаемый результат.

...