У нас есть сильно вложенный json-документ, содержащий метрики сервера, документ содержит> 1000 полей, некоторые из которых для нас совершенно не важны для аналитических целей, поэтому я хотел бы удалить их перед индексацией документа в Elastic.Однако я не могу найти правильный фильтр для использования, поскольку поля, которые я хочу удалить, имеют общие имена в нескольких различных объектах в документе.
Исходный документ выглядит следующим образом (для краткости уменьшен)
[
{
"server": {
"is_master": true,
"name": "MYServer",
"id": 2111
},
"metrics": {
"Server": {
"time": {
"boundary": {},
"type": "TEXT",
"display_name": "Time",
"value": "2018-11-01 14:57:52"
}
},
"Mem_OldGen": {
"used": {
"boundary": {},
"display_name": "Used(mb)",
"value": 687
},
"committed": {
"boundary": {},
"display_name": "Committed(mb)",
"value": 7116
}
"cpu_count": {
"boundary": {},
"display_name": "Cores",
"value": 4
}
}
}
}
]
Данные загружаются в logstash с помощью входного плагина http_poller и должны быть обработаны перед отправкой в Elastic для индексации.Я пытаюсь удалить поля, которые нам не нужны для отслеживания в аналитических целях, к ним относятся поля «display_name» и «border» из каждого объекта json в различных метриках.
Я пытался использоватьФильтр mutate для удаления полей, но поскольку они существуют в очень многих различных объектах, требуется добавить множество кодированных путей в конфигурацию logstash.Я также посмотрел на фильтр ruby, который выглядит многообещающе, поскольку он может выглядеть как событие, но я не могу заставить его сканировать весь документ json или, что более важно, фактически удалить поля.
Вот чтоя пробовал в качестве теста
filter {
split{
field => "message"
}
ruby {
code => '
event.get("[metrics][Mem_OldGen][used]").to_hash.keys.each { |k|
logger.info("field is:", k)
if k.include?("display_name")
event.remove(k)
end
if k.include?("boundary")
event.remove(k)
end
}
'
}
}
Сначала он разбивает входные данные на уровне сообщений, чтобы создать одно событие на сервер, а затем пытается удалить поля из определенной метрики.
Любая помощьВы будете очень признательны.