【问题标题】:Load multiple increasing json files by ELK stack通过 ELK 堆栈加载多个递增的 json 文件
【发布时间】:2021-07-11 01:32:01
【问题描述】:

我在 data 文件夹中爬取了很多 JSON 文件,它们都以时间戳命名(./data/2021-04-05-12-00.json./data/2021-04-05-12-30.json./data/2021-04-05-13-00.json,...)。

现在我正在尝试使用 ELK 堆栈来加载那些不断增加的 JSON 文件。

JSON 文件的打印效果如下:

{
    "datetime": "2021-04-05 12:00:00", 
    "length": 3,
    "data": [
        {
            "id": 97816,
            "num_list": [1,2,3],
            "meta_data": "{'abc', 'cde'}"
            "short_text": "This is data 97816"
        },
        {
            "id": 97817,
            "num_list": [4,5,6],
            "meta_data": "{'abc'}"
            "short_text": "This is data 97817"
        },
        {
            "id": 97818,
            "num_list": [],
            "meta_data": "{'abc', 'efg'}"
            "short_text": "This is data 97818"
        },
    ],

}

我尝试使用 logstash multiline 插件来提取 json 文件,但它似乎会将每个文件作为一个事件处理。有没有办法将 JSON data 文件中的每条记录提取为事件?

另外,在 ELK 中加载多个打印精美的 JSON 文件的最佳做法是什么?

【问题讨论】:

    标签: json elasticsearch logstash elastic-stack logstash-file


    【解决方案1】:

    如果要将每个文件作为一个输入事件处理,则使用多行是正确的。

    然后您需要利用split filterdata 数组中的每个元素创建一个事件:

    filter {
      split {
        field => "data"
      }
    }
    

    所以 Logstash 作为一个整体读取一个文件,它将其内容作为单个事件传递给过滤器层,然后如上所示的 split 过滤器将为 data 数组中的每个元素生成一个新事件。

    【讨论】:

    • 这个运气好吗?
    猜你喜欢
    • 2019-03-28
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2019-06-23
    相关资源
    最近更新 更多