Logstash如何将JSON第二层级的数据解析到第一层级
此示例演示如何使用 Logstash 将 JSON 第二层级的数据解析到第一层级(JSON 根)。
例如,原始 JSON 数据格式如下:
1 | { |
现需要将 properties
节点下的数据解析到 JSON 的根下,期望结果如下:
1 | { |
在本示例中,假设要处理的数据在 /mnt/e/log/ios.log 文件中,那么 Logstash 处理文件 logstash-test.conf 配置如下:
1 | input { |
使用 mutate
将 properties
字段内容先赋给 @tmp
字段,再使用 json
解析 @tmp
字段,然后移除不需要的字段 @tmp
和 properties
。
指定配置文件,运行 Logstash,本示例中 logstash 命令位于 /usr/share/logstash/bin 目录下:
1 | /usr/share/logstash/bin/logstash -f /opt/logstash-test/logstash-test.conf |
使用 echo
命令往文件 /mnt/e/log/ios.log 写入一行记录:
1 | echo '{"distinct_id":"u24a21a5e262debf","time":"1679912055733","time_offset":"0","type":"track","event":"ExposureView","properties":{"$app_version":"8.3","$wifi":true,"$ip":"39.144.27.121","$province":"河南","$city":"郑州","$screen_width":390,"$screen_height":844,"$os":"iOS","$manufacturer":"Apple","$model":"iPhone14,5","$os_version":"16.3.1","$latitude":"34.740911","$longitude":"113.665855","product_id":"0vYqgWyuBBwDA8u8eQ7tqNjWOC5","product_name":"进口香蕉牛奶200ml*12盒","product_classify":"食品饮料/饮料冲调/牛奶","product_price":309},"uuid":"85552fad9e1348ef9b355fa656789bfc"}' >> /mnt/e/log/ios.log |
可以看到,在终端打印的结果如下,properties
字段的数据已经被解析到 JSON 的根下:
1 | { |
如果不需要 message
,@version
,log
,host
,@metadata
,@timestamp
等字段,可以把这些字段添加到 json 解析过滤器上的 remove_field
配置项,如:
1 | json { |
修改完之后重新运行 logstash,再往日志文件写一条日志数据,最终打印的结果如下:
1 | { |
(END)
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.