Я использую Elasticsearch v6.7.2 и хочу проиндексировать JSON, который выглядит следующим образом:
{
"src": {
"ip": "10.0.1.32"
},
"dst": {
"ip": "74.6.168.73",
"location": {
"lat": 37.751,
"lon": -97.822
}
},
"in": 197.0,
"out": 76.0,
"timestamp": 1.557746197E12
}
Как видите, JSON является вложенным.Значения lat
/ lon
являются атрибутами location
, который, в свою очередь, принадлежит src
(источник) или dst
(пункт назначения).
Если данные геолокации несуществует для исходного или целевого IP-адреса, атрибут location
отсутствует в JSON.Например, адрес источника в приведенном выше примере является частным IP-адресом, который не имеет связанной записи в службе геолокации IP.
Я пытаюсь выяснить, как создать сопоставление в Elastic, чтобыполе отметки времени (Unix millis) и местоположение (я) сохраняются / индексируются как правильные типы, чтобы их можно было искать.Местоположение (я) должно храниться как geo_point
тип.
Меня смущает несколько вещей:
- JSON является вложенным, поэтому определение сопоставления необходимо учитыватьдля этого.
- Место малонаселенное.Надеемся, что он будет обрабатывать JSON с отсутствующими атрибутами.
«Автоматический» индексатор, видимый из Kibana, похоже, не обрабатывает распознавание того, что {"location": {"lat": ..., "lon": ...}}
является geo_point
:
Кто-нибудь знает, как я могу создать отображение для этих данных?