当前位置: 首页 > article >正文

logstash 解析数组格式json数据:split, json

1,需求说明

===原始数据格式: 1条 (2*2)==》4个指标数据
[{"app":"aa","url":"www.1.com","metrics":[{"name":"cpu","value":11},{"name":"mem","value":1}]},
{"app":"bb","url":"www.2.com","metrics":[{"name":"cpu","value":12},{"name":"mem","value":2}]}]

====> 希望得到的数据格式 =4个指标数据单独为一行
1{
          "name" => "cpu",
           "app" => "aa",
    "@timestamp" => 2024-11-22T05:57:29.671882657Z,
           "url" => "www.1.com",
         "value" => 11
}
2{
          "name" => "mem",
           "app" => "aa",
    "@timestamp" => 2024-11-22T05:57:29.671882657Z,
           "url" => "www.1.com",
         "value" => 1
}
3{
          "name" => "cpu",
           "app" => "bb",
    "@timestamp" => 2024-11-22T05:57:29.672029155Z,
           "url" => "www.2.com",
         "value" => 12
}
4{
          "name" => "mem",
           "app" => "bb",
    "@timestamp" => 2024-11-22T05:57:29.672029155Z,
           "url" => "www.2.com",
         "value" => 2
}

2,logstash 任务配置

[root@t1 test]# cat a.json
[{"app":"aa","url":"www.1.com","metrics":[{"name":"cpu","value":11},{"name":"mem","value":1}]},{"app":"bb","url":"www.2.com","metrics":[{"name":"cpu","value":12},{"name":"mem","value":2}]}]

[root@t1 test]# cat logstash-pipline.conf
input {
    #    kafka {
    #        bootstrap_servers => "localhost:9092"
    #        topics => ["your_topic_name"]
    #        codec => "json"
    #        add_field => {
    #            "source" => "kafka"
    #        }
    #    }
    file {
       path => "/root/test/a.json"  # 指定JSON文件的路径
       start_position => "beginning"  # 从文件的开头开始读取(可选,默认为"end",即从文件末尾开始读取新添加的内容)
       codec => "json"  # 指定文件编码格式为JSON
       sincedb_path => "/dev/null"  # 禁用sincedb文件,以便每次运行时都重新读取整个文件(可选,通常用于调试)
  }
}

filter {
    if [message] { ##拆分message: 大数组
        json {
            source => "message"
            target => "data_array"
        }
        split {
            field => "data_array"
            remove_field => "message"
        }
    }

    split { ##拆分metrics: 小数组
                field => "metrics"
     }
     mutate {
                add_field => {"field1" => "%{metrics}"}
     }
     json {
        source => "field1"
      }
     mutate {
        remove_field => ["field1","metrics","log","host","@version"] #log,host,@version是系统添加的字段
    }
}

output {
  stdout { codec => rubydebug }  # 将数据输出到控制台,并使用rubydebug编解码器进行格式化
}

[root@t1 test]# /data01/logstash-8.7.1/bin/logstash -f /root/test/logstash.conf

http://www.kler.cn/a/406738.html

相关文章:

  • js高级06-ajax封装和跨域
  • Android 设置 bottomnavigation 底部导航栏的样式
  • dockerfile构建Nginx镜像练习二(5-2)
  • 【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
  • 利用D3.js实现数据可视化的简单示例
  • 【倍数问题——同余系】
  • element-plus入门教程:Button
  • 【高阶数据结构】并查集
  • RPC学习
  • 安宝特分享 | 如何利用AR技术革新医疗实践:从远程急救到多学科协作
  • QT QChart+Eigen库绘制线性回归散点图
  • 【电路笔记】-布尔逻辑AND函数
  • uniapp接入BMapGL百度地图
  • 使用 cnpm 安装 Electron,才是正确快速的方法
  • 蓝桥杯每日真题 - 第21天
  • Java根据前端返回的字段名进行查询数据的方法
  • 淘宝评论大冒险:Java爬虫的“探险记”
  • react native 安装好apk后无法打开
  • Vue3 el-table 默认选中 传入的数组
  • 深度学习1
  • 数据结构之树与二叉树
  • C语言:空指针详细解读
  • 实用功能,觊觎(Edge)浏览器的内置截(长)图功能
  • 《鸿蒙系统:开启智能新时代的璀璨之星》
  • MySQL中的CAST类型转换函数
  • docker 部署 kvm 图形化管理工具 WebVirtMgr