elasticsearch从txt文件中导入数据,filebeat+logstash+kafka+elasticsearch

1. 直接使用logstash+elasticsearch导入

1.1 logstash安装

下载地址:https://www.elastic.co/cn/downloads/logstash

这里需要下载与elasticsearch版本一致的logstash, 点击past releases就可以选择历史版本
在这里插入图片描述
选择自己需要的版本, 点击 Download按钮

在这里插入图片描述
选择tar.gz格式下载
在这里插入图片描述
下载后上传到centos中, 解压文件

tar -zxvf 文件名

1.2 logstash配置文件

在logstash启动使用之前,需要对配置文件进行设置, logstash配置文件中需要设置数据来源, 对数据的处理, 以及数据的去向
进入到解压文件夹后, 执行如下命令查看logstash的默认配置文件

vi config/logstash-sample.conf

这是默认的配置文件中, 上面注释中已经解释了, 数据的来源时Beats, 去向是elasticsearch
在这里插入图片描述
我们需要配置一下, 这里的数据来源需要改为从文件中获取, 然后还需要对数据进行处理, 然后输出到elasticsearch
配置文件如下
在这里插入图片描述
数据来源为file, path的值可以配置多个, 可以从多个文件中获取数据, start_position是指文件开始的位置:beginning代表从文件其实位置开始读取数据
filter字段是对数据进行处理

  • remove_field是删掉不需要录入的字段数据
  • rename是将字段改一下名称
  • gsub的功能自己查一下资料吧,我也不清楚咋回事

output是输出的数据,这里配置的是输出到elasticsearch, 还可以输出到消息队列,redis等等

  • hosts是elasticsearch的ip和端口号, 可以配置多个
  • index是elasticsearch的索引名
  • document_id是用来配置id主键的, 主要是根据单字段进行去重操作

stdout就是标准输出,
配置完毕之后保存并退出

1.3 logstash启动以及常见问题

进入到logstash根目录下, 执行如下命令启动

bin/logstash -f config/logstash_sample.conf

后面的logstash_sample.conf是指定配置文件, 也可以指定其他文件
启动成功之后, 可以看到数据正在读取的页面
在这里插入图片描述
如果logstash启动时报错
报错信息
Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the “path.data” setting.
那代表已经有logstash在运行中, 需要确认当前logstash并没有任务在执行中, 然后删掉一个文件就可以重启了
进入到logstash根目录下的data文件夹

cd /usr/local/logstash-7.6.0/data
ls -lah
rm -rf .lock

此时重新启动就可以了

如果系统启动提示启动成功, 但是却不显示读取数据的界面, 如下图所示 , 那么有可能之前已经导入过这些数据了, 没有新的数据变化,导致logstash不进行读取, 这里需要说明, logstash有一个进度记录机制, 这里可以记录当前数据导入的进度, 关闭logstash重启之后会继续之前的位置进行处理数据

在这里插入图片描述

在这里我们可以看到有一个:sincedb_path的属性, 这里显示的值就是记录处理进度的文件路径,
这里.sincedb文件是一个隐藏文件, 执行如下命令可以看到

ls -lah

在这里插入图片描述
删除这个文件, 再次启动logstash时就会从文件的第一行开始处理数据了

2. 大量数据时使用kafka进行削峰处理数据

使用kafka进行削峰处理的思路是使用两个logstash, 第一个logstash从文件中获取数据, 写入到kafka中, 第二个logstash从kafka中读取数据, 写入到elasticsearch, 这样有了kafka这个消息队列在中间做缓冲, 避免了elasticsearch写入过慢时的数据堆积

2.1 logstash配置

这里使用两个logstash, 那么就需要使用两个配置文件, 首先公布的是第一个配置文件

#txt文件通过logstash导入到kafka中
input{
  file{
	path => ["/root/data.txt"]
	start_position =>"beginning"
  }
}
filter{
  mutate{
    remove_field => ["host","path","@timestamp","@version"]
    rename => {"message"=>"pwd"}
    gsub => [ "pwd", "\r", "" ]
  }
}
output{
 kafka{
    bootstrap_servers => "192.168.1.139:9092"
    topic_id => "topic5"
    codec => "json"
  }
}

topic_id表示kafka消息队列的topic
这里的配置应该都可以看得懂, 不做过多解释了
接下来公布第二个配置文件, 从kafka获取数据, 导入到elasticsearch中去

#从kafka获取数据后写入es中
input{
  kafka {
    bootstrap_servers => "192.168.1.139:9092"
    topics => "topic5"
    codec => "json"
  }
}
#filter{
#  mutate{
#    remove_field => ["host","path","@timestamp","@version"]
#    rename => {"message"=>"pwd"}
#    gsub => [ "pwd", "\r", "" ]
#  }
#}
output{
  elasticsearch{
    action => index
    hosts => "192.168.5.32:9200"
    index => "postoffice"
    document_id => "%{pwd}"
  }
  stdout{}
}

这里配置的输入和输出也就不多解释了, 因为在第一个logstash的配置文件中, 已经有了filter配置了, 这里就不需要再次处理了, 这里在第一个或者第二个logstash中配置filter都可以,但是最好是在第一个中配置, 因为这样存入到kafka中的数据量就会小很多, 进而速度会有所提升

2.2 logstash启动

使用两个logstash需要有两个配置文件, 将这两个文件放在同一个文件夹config中, 启动时配置文件指向该文件夹即可, 命令如下

bin/logstash -f config/

启动不起来的话 多找找自己原因

3. 文件过大时使用filebeat进行读取数据

3.1 filebeat安装

filebeat安装和logstash安装过程差不多, 也是到那个网站去下载, 找到past releases, 然后在产品那块选择filebeat就行, 版本也是对应着elasticsearch, 下载下来之后整到centos上去就行了, 然后解压

tar -zxvf 文件名

3.2 filebeat配置

这个配置我只用了简单地模式, 没有用到太复杂的处理情况, 我处理的数据也都是txt文件, 不是log文件, 所以这里配置文件比较简单
解压后进入到根目录, 这里有一个filebeat.yml的配置文件, 里面就是启动要用的, 这个filebeat是用golang开发的, 所以配置文件是.yml格式
话不多少, 直接上代码

filebeat.inputs: # 6.3以前是 filebeat.prospectors:
- type: log	# input类型,默认为log,6.0以前配置是 - input_type: log
  paths:
    - /root/range_dic/srcfile/postofficeplus.txt
output.logstash:
  hosts: ["192.168.1.139:5044"]
tail_files: false

这里需要介绍的东西就比较多了
type: 指定input类型,有log、stdin、redis、tcp、syslog等
fields: 可以自定义添加字段,到output中去,后续可以使用这些字段
tail_files: 默认为false。配置为true时,filebeat将从新文件的最后位置开始读取,而不是从开头读取新文件, 注意:如果配合日志轮循使用,新文件的第一行将被跳过。
此选项适用于Filebeat尚未处理的文件。如果先前运行了Filebeat并且文件的状态已经保留,tail_files则不会应用。
第一次运行Filebeat时,可​​以使用 tail_files: true 来避免索引旧的日志行。第一次运行后,建议禁用此选项。
registry file:filebeat会将自己处理日志文件的进度信息写入到registry文件中,以保证filebeat在重启之后能够接着处理未处理过的数据,而无需从头开始
如果要让filebeat从头开始读文件,需要停止filebeat,然后删除registry file:
默认情况下, 这个文件是在filebeat本目录下的data中, 删除这个文件就可以从文件开始位置开始读取数据了

3.3 filebeat启动以及常见问题

启动
进入到项目根目录下

./filebeat -e -c filebeat.yml -d "publish"

使用过程中, logstash端始终获取不到数据, 这时候就有可能是filebeat的进度记录已经生成了, 当前没有新的数据产生, 所以不会发送数据到logstash

4. 总结

logstash直接连接elasticsearch是效率最高的, 显而易见的嘛 ,因为中间过程少, 简单粗暴, 但是遇到大文件可能会崩溃, 因为logstash比较消耗内存
kafka的加入可以让数据量有一个削峰, 但是logstash的弊端也并没有解决掉, 依旧是占用内存
filebeat非常轻量级, 启动也很快, 但是毕竟比较小, 所以读取数据的速度跟logstash是没办法比较的,logstash导入单个字段到elasticsearch中, 大概1.6w条/秒, filebeat速度大概是他的十分之一吧
各有利弊,根据自己的实际需求去选取设计模式

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值