如何使用Logstash将json数组输入解析为基本json,并可以发送到Loki作为可视化的输入

问题描述 投票:0回答:2

输入-

[{"id": 23232, "user_name__v": "[email protected]", "data_type__v": "full__v", "token_id__v": 43434, "last_login__v": "2023-10-18T09:19:41.000Z", "active__v": true, "profile_type__v": "us_document_bulk_action_users_with_creat__c"}, {"id": 17685499, "user_name__v": "[email protected]", "data_type__v": "full__v", "token_id__v": 566, "last_login__v": "2023-10-18T09:18:56.000Z", "active__v": true, "profile_type__v": "busineess"}, {"id": 343434, "user_name__v": "[email protected]", "data_type__v": "full__v", "token_id__v": 37431, "last_login__v": "2023-11-01T07:39:00.000Z", "active__v": true, "profile_type__v": "it_actions__c"}]

配置文件过滤器 -


filter {
  json {
    source => "message"
    target => "message"
  }
  mutate {
    add_field => {
      "app" => "TestingApp"
      "job" => "cronData"
    }
  }  
  mutate {
    remove_field => [ "event" ]
  }  
}

我无法将此 json 数组转换为 json 对象,我尝试拆分它,但没有按预期工作。

所需输出:Json 格式,可在 Loki 中使用基本转换来创建表数据/时间序列。

我尝试过拆分,但没有按预期工作。

logstash logstash-configuration
2个回答
0
投票

您只需要在输入上应用 json 过滤器

filter {
    json {
        source => "array_input"
        target => "parsed_array"
        remove_field => "array_input"
    }
    ruby {
        code => "event.get('parsed_array').each { |kv| event.set(kv['Field'], kv['Value']) }"
    }
}

0
投票

如果我没记错的话,我想这样解释你的问题。

  1. 无法在 Logstash 中处理 JSON 数组。
  2. 目标是将 JSON 字符串转换为 JSON 对象。
  3. 要在 Loki 中以时间序列或表格格式使用数据,正确的 需要转型。

我想一一解决您在这个问题中遇到的问题。

解决方案1: 首先,json 文件中的每个对象必须位于一行中,如下所示。

{"id":1,"something":"text1"}
{"id":2,"something":"text2"}
{"id":3,"something":"text3"}

解决方案2: 要拆分 json 文件,我们可以使用 split 将每个 json 对象转换为单独的事件。

解决方案3: 为了生成时间序列数据,Loki 需要一个时间戳。数据中的“last_login__v”字段应设置为@timestamp

配置文件:

filter {
  json {
    source => "message"
    target => "message"
  }
  split {
    field => "[message]"
  }
  date {
    match => ["[message][last_login__v]", "ISO8601"]
    target => "@timestamp"
  }
  mutate {
    add_field => {
      "app" => "TestingApp"
      "job" => "cronData"
    }
  }
  mutate {
    remove_field => [ "event" ]
  }
}

希望对您有帮助

© www.soinside.com 2019 - 2024. All rights reserved.