首页 > 解决方案 > 为文档中的所有字段添加顶级键

问题描述

我有被摄取的文件,其结构如下。请注意,在这种情况下,键名可以并且将会改变,我无法提前知道它们会是什么。

{
    "event": "unauthorised",
    "logger": "django.request",
    "level": "warning",
    "endpoint": "",
    "query": null,
    "status": 401,
    "timestamp": "2021-09-17T12:45:56.224792Z"
}

我需要添加一个顶级密钥来获得以下信息:

{
    "newkey": {
        "event": "unauthorised",
        "logger": "request",
        "level": "warning",
        "endpoint": "",
        "query": null,
        "status": 401,
        "timestamp": "2021-09-17T12:45:56.224792Z"
    }
}

这在 filebeat 端很容易做到,但我无法访问那里,所以我试图在摄取管道中做到这一点。

json 处理器add_to_root似乎是一个不错的起点,但field参数不采用通配符,而且似乎没有办法移动所有内容。

我一直在尝试脚本处理器,例如循环键:

  "processors": [
    {
      "script": {
        "source": "for(item in ctx._source){item = 'newkey.' + item._key; ctx._source.remove(item)}",
        "lang": "painless"
        }
    }
  ]

但没有任何成功。

标签: elasticsearchelasticsearch-painless

解决方案


推荐阅读