Logstash:如何使用 Logstash 解析并摄入 JSON 数据到 Elasticsearch

这篇具有很好参考价值的文章主要介绍了Logstash:如何使用 Logstash 解析并摄入 JSON 数据到 Elasticsearch。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在我之前的文章 “Logstash:Data 转换,分析,提取,丰富及核心操作” 有涉及到这个话题。今天我想使用一个具体的例子来更深入地展示。

logstash 解析json,Logstash,Elastic,elasticsearch,大数据,logstash,运维

 

准备数据

我们先来把如下的数据拷贝下来,并保存到一个叫做 sample.json 的文件中。我们可以把这个文件置于 Logstash 的安装根目录下。

sample.json

{"id":1,"timestamp":"2019-09-12T13:43:42Z","paymentType":"Amex","name":"Merrill Duffield","gender":"Female","ip_address":"132.150.218.21","purpose":"Toys","country":"United Arab Emirates","age":33}
{"id":2,"timestamp":"2019-08-11T17:55:56Z","paymentType":"Visa","name":"Darby Dacks","gender":"Female","ip_address":"77.72.239.47","purpose":"Shoes","country":"Poland","age":55}
{"id":3,"timestamp":"2019-07-14T04:48:25Z","paymentType":"Visa","name":"Harri Cayette","gender":"Female","ip_address":"227.6.210.146","purpose":"Sports","country":"Canada","age":27}
{"id":4,"timestamp":"2020-02-29T12:41:59Z","paymentType":"Mastercard","name":"Regan Stockman","gender":"Male","ip_address":"139.224.15.154","purpose":"Home","country":"Indonesia","age":34}
{"id":5,"timestamp":"2019-08-03T19:37:51Z","paymentType":"Mastercard","name":"Wilhelmina Polle","gender":"Female","ip_address":"252.254.68.68","purpose":"Health","country":"Ukraine","age":51}
$ pwd
/Users/liuxg/elastic/logstash-8.6.1
$ ls sample.json 
sample.json

解析及过滤 JSON 文件

我们有如下的几种方法:

使用 Logstash 的 Input JSON codec

我们创建如下的 Logstash 配置文件:

logstash_input.conf

input {
  file {
    path => "/Users/liuxg/elastic/logstash-8.6.1/sample.json"
    type    => "applog"
    codec   => "json"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

output {
	stdout { 
	  codec => rubydebug 
	}
}

我们运行 Logstash:

$ pwd
/Users/liuxg/elastic/logstash-8.6.1
$ ./bin/logstash -f logstash_input.conf

在运行的 terminal 中,我们可以看到如下的结果:

logstash 解析json,Logstash,Elastic,elasticsearch,大数据,logstash,运维

从上面,我们可以看出来我们的数据已经变为结构化的数据了。

使用 JSON filter

我们创建如下的一个 Logstash 配置文件:

logstash_filter.conf

input {
  file {
    path => "/Users/liuxg/elastic/logstash-8.6.1/sample.json"
    type    => "applog"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
    json {
        source => "message"
    }
}

output {
	stdout { 
	  codec => rubydebug 
	}
}

我们运行 Logstash:

$ pwd
/Users/liuxg/elastic/logstash-8.6.1
$ ./bin/logstash -f logstash_filter.conf

在运行的 terminal 中,我们可以看到如下的结果:

logstash 解析json,Logstash,Elastic,elasticsearch,大数据,logstash,运维

从上面我们可以看出来 JSON 文件也被正确地结构化了。

接下来,我们来清理一下我们的数据,并过滤掉那些  paymentType 为 Mastercard 的文档。我们进一步修改配置文件:

logstash_filter.conf

input {
  file {
    path => "/Users/liuxg/elastic/logstash-8.6.1/sample.json"
    type    => "applog"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
    json {
        source => "message"
    }

    if [paymentType] == "Mastercard" {
        drop {}
    }

    mutate {
        remove_field => ["message", "@timestamp", "path", "host", "@version", "log", "event"]
    }

}

output {
	stdout { 
	  codec => rubydebug 
	}
}

在上面,我们过滤掉 paymentType 为 Mastercard 的文档,同时,我们也去除一些不需要的字段,比如 message。我们再次运行:

logstash 解析json,Logstash,Elastic,elasticsearch,大数据,logstash,运维

很显然,我们这次没有看到 message 字段,同时 paymentType 为 Mastercard 的文档都被过滤掉了。

处理含有数值的 JSON 数据

接下来我们使用另外一组数据。在这个数据里,它的 JSON 文件里含有一个数组:

sample-split.json

{"id":1,"timestamp":"2019-06-19T23:04:47Z","paymentType":"Mastercard","name":"Ardis Shimuk","gender":"Female","ip_address":"91.33.132.38","purpose":"Home","country":"France","pastEvents":[{"eventId":1,"transactionId":"trx14224"},{"eventId":2,"transactionId":"trx23424"}],"age":34}
{"id":2,"timestamp":"2019-11-26T15:40:56Z","paymentType":"Amex","name":"Benoit Urridge","gender":"Male","ip_address":"26.71.230.228","purpose":"Shoes","country":"Brazil","pastEvents":[{"eventId":3,"transactionId":"63323-064"},{"eventId":4,"transactionId":"0378-3120"}],"age":51}
{"id":3,"timestamp":"2019-05-08T16:24:25Z","paymentType":"Visa","name":"Lindsy Ketchell","gender":"Female","ip_address":"189.216.71.184","purpose":"Home","country":"Brazil","pastEvents":[{"eventId":5,"transactionId":"68151-3826"},{"eventId":6,"transactionId":"52125-611"}],"age":26}
{"id":4,"timestamp":"2019-06-10T18:01:32Z","paymentType":"Visa","name":"Cary Boyes","gender":"Male","ip_address":"223.113.73.232","purpose":"Grocery","country":"Pakistan","pastEvents":[{"eventId":7,"transactionId":"63941-950"},{"eventId":8,"transactionId":"55926-0011"}],"age":46}
{"id":5,"timestamp":"2020-02-18T12:27:35Z","paymentType":"Visa","name":"Betteanne Diament","gender":"Female","ip_address":"159.148.102.98","purpose":"Computers","country":"Brazil","pastEvents":[{"eventId":9,"transactionId":"76436-101"},{"eventId":10,"transactionId":"55154-3330"}],"age":41}

请注意上面最后面的一个空行。这样可以保证所有的文档被摄入。如上所示,它含有一个叫做 pastEvents 的字段。它是一个数组。在每个文档中,它含有 1 个或多个 eventId。我们可以通过 split 过滤器来把这些 eventId 变成单个的事件。

我们创建如下的一个 Logstash 配置文件:

logstash_split.conf

input {
  file {
    path => "/Users/liuxg/elastic/logstash-8.6.1/sample-split.json"
    type    => "applog"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
    json {
        source => "message"
    }

    split {
        field => "[pastEvents]"
    }

    mutate {
        remove_field => ["message", "@timestamp", "path", "host", "@version", "log", "event"]
    }

}

output {
	stdout { 
	  codec => rubydebug 
	}
}

我们可以参考官方文档 Split filter plugin | Logstash Reference [8.6] | Elastic 来了解更多关于 split 过滤的功能。

我们运行上面的 pipeline:

./bin/logstash -f logstash_split.conf

logstash 解析json,Logstash,Elastic,elasticsearch,大数据,logstash,运维

我们可以看到在之前的源 JSON 文档中,它共有5个文档,但是经过 split 过滤器后,它现在变为 10 个文档了。

输出到 Elasticsearch

经过上面的 input 及 filter,我们得到了我们想要的结构化的数据。我们可以参考文章 “Logstash:如何连接到带有 HTTPS 访问的集群” 把输出结果输出到 Elasticsearch 集群中。这里就不再累述了。文章来源地址https://www.toymoban.com/news/detail-788047.html

到了这里,关于Logstash:如何使用 Logstash 解析并摄入 JSON 数据到 Elasticsearch的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在pytest接口自动化框架中扩展JSON数据解析功能?

    上期内容简单说到了。params类类型参数的解析方法。相较于简单。本期内容就json格式的数据解析,来进行阐述。 在MeterSphere中,有两种方式可以进行json格式的数据维护。一种是使用他们自带的JsonSchema来填写key-value表单。另一种就是手写json。 手写json在日常工作中效率较低,

    2024年02月11日
    浏览(49)
  • 爬虫系列实战:使用json解析天气数据

    大家好,爬虫是一项非常抢手的技能,收集、分析和清洗数据是数据科学项目中最重要的部分,本文介绍使用json解析气象局天气数据。 在官网上获取天气数据信息,可以定义当前查询的位置,提取时间、温度、湿度、气压、风速等信息,并导入requests、matplotlib这些需要用到

    2024年01月18日
    浏览(38)
  • 如何使用Python的Selenium库进行网页抓取和JSON解析

    随着互联网的快速发展,网页抓取和数据解析在许多行业中变得越来越重要。无论是电子商务、金融、社交媒体还是市场调研,都需要从网页中获取数据并进行分析。Python的Selenium库作为一种自动化测试工具,已经成为许多开发者的首选,因为它提供了强大的功能和灵活性。

    2024年02月10日
    浏览(282)
  • Python JSON 使用指南:解析和转换数据

    JSON 是一种用于存储和交换数据的语法。JSON 是文本,使用 JavaScript 对象表示法编写。 Python 有一个内置的 json 包,可用于处理 JSON 数据。 示例 :导入 json 模块: 如果您有一个 JSON 字符串,可以使用 json.loads() 方法来解析它。结果将是一个 Python 字典。 示例 :从 JSON 转换为

    2024年02月06日
    浏览(48)
  • 使用JSONObject与JSONArray进行解析json数据

    JSONObject: JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。 JSONArray: JSONArray是一个有序的值序列。它的外部文本形式是一个用

    2024年02月03日
    浏览(36)
  • Android MQTT连接阿里云使用Json解析数据

    这里有两种方法: 这里先介绍第一种方法: 切换到Android 目录: 按照如下图,添加依赖即可: 第二种方法: 打开Android Studio 然后切换到Android 目录找到Lib文件夹,将MQTT的JAR包复制进去即可。 然后点击project目录然后将MQTT JAR包导进去 添加完成之后作为库导入工程中 在MainA

    2024年02月03日
    浏览(42)
  • 使用HTTP方式发送请求及json数据的接收和解析

    目录 需求 请求端 1,添加依赖 2,请求对象 3,请求工具类 4,请求测试(事先开启接收端的服务) 接收端 数据请求模拟 本项目需要通过向对端第三方项目发送一个http的post类型的请求,并且指定了一些请求字段,数据传输采用了json,对请求头没有其他特殊要求,所以这里写

    2024年01月17日
    浏览(78)
  • 【AI系列】使用 Python 解析和输出成功的问答对 JSON 数据

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年04月16日
    浏览(78)
  • UE4使用VaRest插件请求httpAPI以及解析json格式数据

    1.在虚幻商城中下载并安装VaRest插件 2.在UE编辑器中启用插件并重启 3.请求示例 变量的类型:VaRestJsonObject 当然也可以不保存为变量,直接在后面继续逻辑处理 json对象信息获取       

    2024年02月13日
    浏览(38)
  • PHP解析带BOM头的JSON数据,对接他人接口的时候,使用json_decode(),返回null的问题与解决方法

    在php开发中会遇到和他人对接接口,对方使用json传输数据,使用json_decode()函数却无法将json数据转换为数组。 先看封装的代码 这种对接post接口的封装方法一般是没有问题的,但是我们打印$res的时候,会发现只会返回NULL。而打印$response的时候,是可以返回json字符串的。我们

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包