简单介绍下logstash,logstash专门用来收集数据,其功能和flume类似,但功能却比flume强大很多,而且不会丢失数据。
其功能结构图如下
logstash主要由3个组件组成
- Input plugin:数据的输入源,比如有文件,数据库等
- Filter plugin:对输入的数据进行业务逻辑处理过滤
- Output plugin:数据的输出地,比如有hdfs、kafka等
1.logstash的搭建
logstash的搭建比较简单,下载官方的压缩包后,解压即可使用
实验过程:使用logstash监听一个日志文件,每当有数据写入的时候,自动把新增数据推送到kafka中
此次使用一个log文件作为输入源,在/tmp下新建一个文件access.log
在conf下创建一个conf文件代码如下:vim logkafka.conf
input {
file {
path => "/home/hadoop/data/logs/access.log"
start_position => "beginning"
}
}
output {
kafka {
topic_id => "logstashkafka"
codec => plain{
format => "%{message}"
charset => "UTF-8"
}
bootstrap_servers => "hadoop000:9092"
batch_size => 1
}
}
代码解释:input和output就是对应的插件。如input使用file作为数据源,path定义了该数据源文件的位置,start_position表示第一次读取时从头开始读(beginning),还是只读取新增数据(默认end)。output使用kafka作为输出地,topic_id就是kafka的主题id,codec是我们定义的格式,bootstrap_servers就是对应broker的集群地址
配置好文件后,我们使用如下的命令启动logstash (-f 指定待监听的文件)
./logstash agent -f conf/logkafka.conf
2.Kakfa的整合
Kafka的安装部署,请看上一篇博客,这里的整合其实就是将kafka的生产者换成logstash中采集来的日志的数据
新建一个名为“logstashkafka”的topic主题
kafka-topics.sh --creat --zookeeper hadoop000:2181 --replication-factor 1 --partitions 1 --topic logstashkafka
启动一个kafka消费终端
kafka-console-consumer.sh --zookeeper hadoop000:2181 --topic logstashkafka --from-beginning
在上面创建的access.log日志中输入数据