Logstash抽取数据到Elasticsearch(1)
在最近的一个项目中,需要将Mysql的数据导入到Elasticsearch中,在这个过程中,本来应该是喝着阔乐,非常愉快的等待上传的,但是出现了很多问题。
一、磁盘扩容
我使用的是一台只挂载了40G系统盘的服务器,之前已经存了很多Sql数据,现在已经不够用了,但是通过fdisk -l查看了一下还有另外一个没有挂载的100G的盘可以拿来用。以下是挂载过程。
1、fdisk -l查看磁盘情况,发现挂载了一个盘作为系统盘,没有分区,直接挂载在主机上。另外一个就是需要扩展的新磁盘,没有挂载,接下来将某文件路径挂载到该磁盘下,使得该路径下的文件能够存储到这个新的磁盘,缓解已有磁盘/dev/vda的压力。
2、使用mkfs.ext4格式化磁盘,以前用ext3,现在已经弃用。
3、格式化后,将磁盘临时挂载到一个新的目录/mnt/(任意目录都行)下,使用mount命令挂载,df -l可以查看到该磁盘已经挂载成功。
4、如果想将原磁盘中的某个文件夹中挂载到新磁盘下,可以先将该文件夹下的数据移动到/mnt目录下,举例,我将/filebaet文件夹挂载到新磁盘下。
5、将/mnt目录卸载掉,命令umount
6、最后在/etc/fstab中配置一下需要挂载的文件夹。
7、完成挂载
完成以上操作后,就能将文件夹下的数据存储到新的磁盘下了。我的项目中是挂载了Elasticsearech文件夹到新的磁盘。
二、后台抽取
1、一开始由于没有设置logstash的批量处理,导致数据抽取非常缓慢,为了方便,就想能不能后台抽取,毕竟该学过用nohup后台运行。
nohup ./logstash -f /usr/local/install/logstash.cnf &
/usr/local/install/logstash.cnf 是我放置配置文件的地方,千万别直接拷。
2、一切都应该很和谐,我应该继续拿起冰阔乐了,我好奇的df -l看了一下新的磁盘是不是在上数据了,一个很奇怪的事情发生了,两个磁盘都在上数据,而且旧磁盘数据上的更加的快,我自闭了。
3、难道是挂载失败了?但是不对啊,新磁盘也在上数据啊,我灵机一动,查看一下文件夹的大小,看看什么文件占用了大的空间
du -sh * //查看各个文件的大小
找了好久,终于找到了一个文件-nohup.out,这不是nohup的日志吗,为什么有18G那么大?,打开日志才发现,上传数据的所以信息都存在了这个里面,终于发现了原因:在nohup后台运行时,日志文件不能存储所有信息,只需要存储报错信息就行了。
nohup ./logstash -f /usr/local/install/logstash.cnf >dev.null 2>log &
dev/null可以理解为垃圾回收,2>log表示错误信息存储到log文件中,其他文件就送往垃圾回收
继续报错
结论:最后的报错是由于logstash抽取太快,ES请求频繁,导致的IO堵塞,下篇博客解决次问题。