You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Logstash解析JSON数组为JSON对象并发送至Loki可视化

解决Logstash拆分JSON数组为单个对象适配Loki的方案

问题分析

当前Logstash配置仅将整个JSON数组解析到message字段,未把数组拆分为独立的用户对象事件,导致无法被Loki转换为表格或时序数据。需通过split过滤器拆分数组,并调整字段结构适配Loki需求。

调整后的Logstash过滤器配置

filter {
  # 将原始JSON数组解析到user_data字段,避免干扰根字段
  json {
    source => "message"
    target => "user_data"
  }

  # 拆分user_data数组,每个元素生成独立事件
  split {
    field => "user_data"
  }

  # 提取嵌套字段到根级别,重命名为友好名称,添加固定字段
  mutate {
    add_field => {
      "id" => "%{[user_data][id]}"
      "user_name" => "%{[user_data][user_name__v]}"
      "data_type" => "%{[user_data][data_type__v]}"
      "token_id" => "%{[user_data][token_id__v]}"
      "last_login" => "%{[user_data][last_login__v]}"
      "active" => "%{[user_data][active__v]}"
      "profile_type" => "%{[user_data][profile_type__v]}"
      "app" => "TestingApp"
      "job" => "cronData"
    }
    # 清理中间字段和不需要的字段
    remove_field => [ "user_data", "event", "message" ]
  }

  # 将last_login转换为Logstash标准时间字段,适配Loki时序数据需求
  date {
    match => [ "last_login", "ISO8601" ]
    target => "@timestamp"
  }
}

配置说明

  1. JSON解析:把原始输入的JSON数组解析到user_data字段,避免直接覆盖根字段或原始message。
  2. 数组拆分:split过滤器会遍历user_data数组,将每个元素生成为一个独立的Logstash事件,每个事件对应一个用户对象。
  3. 字段映射:将嵌套在user_data中的字段提取到根级别,并将带后缀__v的字段重命名为更简洁的名称(比如user_name__v→user_name),同时保留你需要的固定字段app和job。
  4. 时间处理:通过date过滤器把last_login转换为Logstash的@timestamp字段,这是Loki识别时序数据的标准时间字段。

处理后输出格式示例

每个用户对象会成为独立的事件,结构如下:

{
  "@timestamp": "2023-10-18T09:19:41.000Z",
  "id": "23232",
  "user_name": "bacd@gmail.com",
  "data_type": "full__v",
  "token_id": "43434",
  "last_login": "2023-10-18T09:19:41.000Z",
  "active": "true",
  "profile_type": "us_document_bulk_action_users_with_creat__c",
  "app": "TestingApp",
  "job": "cronData"
}

这种扁平化的结构可以直接被Loki的基础转换功能识别,用来生成表格数据或构建时序视图。

内容的提问来源于stack exchange,提问作者Manvinder Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:13:38