Я новичок в Logstash, в настоящее время я пытаюсь читать файлы из S3 (каждая новая строка файла - это новый json) и анализировать поля JSON для отправки только части в ES.
Удивительно, как Logstash поддерживает меня с этим, так как до сих пор все было гладко:
input { s3 { ... } }
Мне даже не нужно было явно указывать, что файлы GZiped, или этот кодек - JSON, что меня все равно удивляет, как Logstash разрешает это.
Но ... теперь
Если я дам сразу:
output { elasticsearch { ... } }
тогда все мое тело JSON попадает в строку «сообщения» внутри ElasticSearch. Итак, я сделал это:
filter { json { source => "message" } }
После этого я вижу, что каждый дочерний элемент из моего JSON анализируется как отдельное значение в ES - это прекрасно, но что если я хочу отправить в ES только 2 или 3 дочерних элемента из JSON?
Мой пример структуры в формате JSON:
{"path":"/h/asia","headers":{"x-forwarded-for":"1.1.1.1","user-agent":"Mozilla/5.0"},"params":{"filters_values":"test","pagecount":"2","user_status":"unlogged"},"meta":{"date":1538974058,"acceptCookies":true}}
Итак, в конце я приземляюсь в ES с такими полями, как:
"path.headers.x-forwarded-for",
"params.pagecount",
"params.user_status" etc.
Где моя цель - хранить в ES только два типа
"params.filters_values" и "headers.user_agent".
Заранее спасибо