一、前言
刚开始的时候,博主导入数据用的是bulk
这个方法,但是这个方法一方面是导入不方便,一方面是对于数据量有限制。既然咱们搭建的是ELK
,那么就来见识下logstash
吧。
博主这里的ELK全部是6.2.4版本。
二、logstash的下载安装
1、简介
Logstash
是一个接收,处理,转发日志的工具。支持系统日志,webserver
日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。在一个典型的使用场景下(ELK):用Elasticsearch作为后台数据的存储,kibana
用来前端的报表展示。Logstash
在其过程中担任搬运工的角色,它为数据存储,报表查询和日志解析创建了一个功能强大的管道链。
Logstash
提供了多种多样的 input
,filters
,codecs
和output
组件,让使用者轻松实现强大的功能。
网上关于logstash
的文章数不胜数,都是好文章,我这边也没必要再重写一遍,这里只是作为笔记使用,大家多参考大神的博客就好了,哈哈
关于logstash的详细介绍:https://blog.youkuaiyun.com/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、测试输出
下载安装之后,进入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.youkuaiyun.com/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.youkuaiyun.com/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