logstash导入数据到Elasticsearch

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LJFPHP/article/details/89340578

一、前言

      刚开始的时候,博主导入数据用的是bulk这个方法,但是这个方法一方面是导入不方便,一方面是对于数据量有限制。既然咱们搭建的是ELK,那么就来见识下logstash吧。

博主这里的ELK全部是6.2.4版本。

二、logstash的下载安装

1、简介

      Logstash是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。在一个典型的使用场景下(ELK):用Elasticsearch作为后台数据的存储,kibana用来前端的报表展示。Logstash在其过程中担任搬运工的角色,它为数据存储,报表查询和日志解析创建了一个功能强大的管道链。

Logstash提供了多种多样的 input,filters,codecsoutput组件,让使用者轻松实现强大的功能。

      网上关于logstash的文章数不胜数,都是好文章,我这边也没必要再重写一遍,这里只是作为笔记使用,大家多参考大神的博客就好了,哈哈

关于logstash的详细介绍:https://blog.csdn.net/chenleiking/article/details/73563930

2、下载地址

https://www.elastic.co/cn/downloads/past-releases/logstash-6-2-4

官网下载速度慢,可以下载我分享的logstash-6.2.4版本

链接: https://pan.baidu.com/s/1qikuSeFI2_pgdAa0x5qh2w 提取码: ka6u

3、测试输出

扫描二维码关注公众号,回复: 6190478 查看本文章

下载安装之后,进入bin目录,输入:

logstash -e 'input { stdin { } } output { stdout {}}'

如果报错:

Unknown command '{'

See: 'bin/logstash --help'
[ERROR] 2019-04-09 13:10:07.501 [main] Logstash - java.lang.IllegalStateException: org.jruby.exceptions.RaiseException: (SystemExit) exit

则输入:

logstash -e ""

然后结果形如:

4, “pipeline.batch.size”=>125, “pipeline.batch.delay”=>50}
[2019-04-09T13:12:26,816][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>“main”, :thread=>"#<Thread:0x4367f772 run>"}
The stdin plugin is now waiting for input:
[2019-04-09T13:12:26,901][INFO ][logstash.agent ] Pipelines running {:count=>1, :pipelines=>[“main”]}
hello world
{
“@version” => “1”,
“@timestamp” => 2019-04-09T05:13:33.226Z,
“message” => “hello world\r”,
“type” => “stdin”,
“host” => “DESKTOP-Q3I218A”
}

解释:
      这里的hello world是我自己输入的。能到这一步,说明安装的没什么问题了。
这部分可以输入:logstash --help查看详细命令,
-e: 后面跟着字符串,该字符串可以被当做logstash的配置(如果是“” 则默认使用stdin作为输入,stdout作为输出)
-f: 通过这个命令可以指定Logstash的配置文件,根据配置文件配置logstash

/bin/logstash -f /etc/logstash/conf.d/nginx_logstash.conf

参考:https://blog.csdn.net/m0_38084243/article/details/80590241

三、把json文件导进去,并和elasticsearch联系起来

1、 在bin目录下新建conf目录,在conf目录下新建jdbc.conf文件,写入以下内容

input {
  file {
      path => "E:\files\xx\xx.json"   //json文件在本地的位置
      start_position => "beginning"
      sincedb_path => "/xxx"            //这部分是定义的文件目录路径,如果没定义的话,默认目录是在:logstash-6.2.4\data\plugins\inputs\file
      codec => json {
        charset => "UTF-8"   //设置json的编码格式
      }
    }
}
output {
elasticsearch {
    hosts => "http://localhost:9200"
    index => "xx"   //索引名
    document_type => "doc"   //文档名
  }
    stdout{
    }
}

2、 执行conf文件:

logstash -f conf/jdbc.conf

3、 没错误的话,这时候能看到cmd框一直在疯狂录入数据

4、 关于logstash的配置:https://blog.csdn.net/xfg0218/article/details/52980726

5、 logstash会把进度更新到sincedb文件中。我们可以查看自己定义的sincedb_path文件来知道导入进度。
如果没有处理完了关闭logstash,下次再启动时则不会再从头开始处理,因为sincedb已经记录了进度,
不要以为start_position => “beginning”就是每次都从头处理,如果把sincedb文件删了又会从头开始处理。

四、关于导入数据到logstash之后,怎么自动按照日期生成索引

output {
	if [type] == "xx_log"{
		elasticsearch {
			hosts  => "127.0.0.1:9200"
			index => "xx_log_%{+YYYY.MM.dd}"
		}
	}
}

      本来这篇博客还要写上导入数据时候遇到的坑呢,但是文章已经有点长了,错误部分就放到下一篇吧,毕竟是初学者,遇到的坑还是挺多的,不过解决了就是成长,加油!

踩坑记录logstash导入数据到Elasticsearch踩过的坑详解

end

猜你喜欢

转载自blog.csdn.net/LJFPHP/article/details/89340578