由于blog各种垃圾评论太多,而且本人审核评论周期较长,所以懒得管理评论了,就把评论功能关闭,有问题可以直接qq骚扰我

logstash 收集日志到hdfs

运维工具 西门飞冰 12125℃

前言

通常情况下,我们将日志数据通过logstash收集到es,然后用kibana进行实时查询,可视化分析,这就是我们常用的elk架构。但是基于elk的日志分析,通常比较常用的是实时分析,日志存储一段时间就会删掉。那么在一些情况下,我需要将日志数据也存储一份到hdfs用来做大数据分析,这部分日志的存储时间会比存在es中久很多。

运维一般收集日志到hdfs经常会使用两种工具,一种是flume,一种是logstash,本文介绍logstash如何收集日志到hdfs。

logstash hdfs插件安装

logstash如果想收集日志到hdfs需要安装hdfs插件,官方安装命令如下

../bin/logstash-plugin install logstash-output-webhdfs

如果安装不成功或者直接卡着不动了,原因可能是防火墙挡掉了logstash默认的gem源,这个时候可以尝试换成淘宝的源

$ cd /opt/service/logstash/
$ vim Gemfile
#source "https://rubygems.org"
source https://ruby.taobao.org/

如果更换完源还是不行,就需要自己手动安装了

gem "logstash-output-webhdfs"
改为
gem "logstash-output-webhdfs", :path => "/root/logstash-output-webhdfs/"
  • 配置文件修改完成,继续执行如下命令安装插件即可
../bin/logstash-plugin install logstash-output-webhdfs

配置文件设置

注意:logstash启动用户需要有配置文件中webhdfs段path参数目录的写入权限

input{
        file{
                path=>["/opt/log/data.log"]
                start_position=>"beginning"
                codec=>"json"
                #不处理120天以前的数据,默认为一天
                ignore_older => "10368000"
                sincedb_path => "/opt/service/logstash-2.3.4/test_sincedb"
        }
}

output{
        elasticsearch{
                hosts=>["192.168.201.7:9200","192.168.201.5:9200","192.168.201.6:9200"]
                index=>"test_log-%{+YYYY-MM}"
        }
        webhdfs {
                workers => 2
                host => "192.168.201.4"	# namenode节点
                port => "50070"			# webhdfs端口
                user => "hdfs"			#以这个用户的权限去写hdfs
                path => "/test_logstash/logstash-%{+YYYY}-%{+MM}-%{+dd}.log"		# 按天创建log
                codec => "json"
        }
}

结果验证

logstash启动之后,只要有日志进入,就可以在hdfs的相应目录看到写入的文件,且此文件是按照logstash配置的规则按天生成

[hdfs@task1-sandbox ~]$ hdfs dfs -ls /test_logstash
Found 1 items
-rw-r--r--   1 hdfs hadoop     392222 2018-07-17 19:42 /test_logstash/logstash-2018-07-17.log

 

 

转载请注明:西门飞冰的博客 » logstash 收集日志到hdfs

喜欢 (3)or分享 (0)