我正在使用logstash来解析JSON,我想在将其传递给elasticsearch之前删除一些字段。
我的json结构如下:
{
"several fields to keep": "data",
"response": {
"fields to keep": "data",
"json": {
"discard all non-whitelisted fields in here": "data"
},
"request": {
"fields to keep": "data",
"json": {
"discard all non-whitelisted fields in here": "data"
},
"args": {
"discard the entire args field": "unsafe user data"
}
}
}
输入的json包装在其他文本中,所以我使用的是tcp
输入插件,没有编解码器。然后我使用grok
将json放入名为data
的字段中,然后使用
json {
source => "data"
target => "data"
}
删除[data][request][args]
很简单(我可以在remove_field
过滤器中使用prune
),但我无法想出将白名单应用到{{1}的方法}}和[data][response][json]
,而不必列出所有其他字段名称。我不希望删除任何其他字段。
如果我必须改变输出的结构,那很好。下一个系统尚未配置。
谢谢!
答案 0 :(得分:1)
我知道如何解决这个问题。如果我将要保留的子字段放在[data][response][json]
中并将其移到其他位置(我认为mutate
过滤器可以执行此操作),然后我可以删除整个[data][response][json]
字段。它不是我最初的想法,但它应该完成同样的事情。