【发布时间】:2018-10-26 19:53:02
【问题描述】:
我是 Logstash 的新手,目前我正在尝试从 S3 读取文件(文件的每一行都是新的 json)并解析 JSON 字段以仅将部分发送到 ES。
Logstash 对我的支持真是令人惊讶,直到现在一切都很顺利:
input { s3 { ... } }
我什至不需要明确说明文件是 GZiped,或者编解码器是 JSON,这仍然让我感到惊讶,Logstash 是如何解决这个问题的。
但是……现在 如果我立即给予:
output { elasticsearch { ... } }
然后我所有的 JSON 正文都落在 ElasticSearch 中的“消息”字符串中。所以我这样做了:
filter { json { source => "message" } }
之后我看到我的 JSON 中的每个孩子都被解析为 ES 中的分隔值 - 这是完美的,但如果我只想从 JSON 中发送 2 个或 3 个孩子怎么办?
我在 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”。
提前致谢
【问题讨论】:
标签: json elasticsearch logstash