如何将白名单修剪过滤器仅应用于某些子字段

时间:2015-05-06 23:20:23

标签: logstash

我正在使用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],而不必列出所有其他字段名称。我不希望删除任何其他字段。

如果我必须改变输出的结构,那很好。下一个系统尚未配置。

谢谢!

1 个答案:

答案 0 :(得分:1)

我知道如何解决这个问题。如果我将要保留的子字段放在[data][response][json]中并将其移到其他位置(我认为mutate过滤器可以执行此操作),然后我可以删除整个[data][response][json]字段。它不是我最初的想法,但它应该完成同样的事情。