filebeat+kafka+logstash部署及配置

filebeat+kafka+logstash部署及配置

工作上有个搭建ELK平台的需求,设计方案的时候,日志采集部分计划使用filebeat+kafka+logstash的架构。终端使用filebeat进行日志的简单采集,再通过kafka集群送给logstash过滤和加工,再最后输出给ElasticSearch。

一、搭建环境及软件版本
服务器

IP地址 操作系统
192.168.241.11 CentOs7-1804
192.168.241.12 CentOs7-1611
192.168.241.13 CentOs7-1804

JAVA JDK版本:1.8.0_151
Filebeat版本:6.5.2
Kafka版本:2.12-2.1.0
Logstash版本:6.5.2

二、安装Kafka集群
请参阅《Kafka集群及Kafka-Manager部署》

三、Filebeat安装及配置
1、Filebeat下载及安装
官网下载地址为:https://www.elastic.co/downloads/beats/filebeat
本文采用的是rpm安装方式,下载到的安装包为:filebeat-6.5.2-x86_64.rpm。
将安装包拷贝到服务器的/tmp目录,执行如下命令完成安装。

rpm -ivh /tmp/filebeat-6.5.2-x86_64.rpm

2、Filebeat配置
安装完成后,filebeat主程序目录为/usr/share/filebeat,配置文件目录为/etc/filebeat,日志目录为/var/log/filebeat。这些目录通过查看/usr/lib/systemd/system/filebeat.service文件就可以知道。我们要关注的是/etc/filebeat/filebeat.yml文件,我们需要修改其中的input和output配置。本文只根据项目的实际需要简单讲解几个配置项,所有的配置示例在/etc/filebeat/filebeat.reference.yml文件中,需要了解的话可结合这个文件和百度。
input配置(输入配置):
filebeat的输入配置在filebeat.inputs节点下。type为log,表明这是从文件获取输入。我们需要将log类型下的enabled的值置为true,在paths中编辑需要获取输入的文件,文件可以是多个,也可以使用通配符。如下图:filebeat+kafka+logstash部署及配置_第1张图片
output配置(输出配置):
我们需要将读取到的日志输出到Kafka集群中,而配制文件中默认没有Kafka集群的输出配置,因此需要在其中增加(关于Kafka集群的输出配置示例,可以在/etc/filebeat/filebeat.reference.yml文件中查看)。我们增加的Kafka集群配置如下图所示:
filebeat+kafka+logstash部署及配置_第2张图片
从上图可以看到,首先要增加output.kafka节点,在此节点下配置enabled、hosts、topic这三个配置项。
更多配置详情,请参考百度和官方文档https://www.elastic.co/guide/en/beats/filebeat/current/index.html

四、Logstash安装及配置
1、Logstash下载及安装
官方下载地址为:https://www.elastic.co/downloads/logstash
本文采用的是rpm安装方式,下载到的安装包为:logstash-6.5.2.rpm。
将安装包拷贝到服务器的/tmp目录,执行如下命令完成安装。

rpm -ivh /tmp/logstash-6.5.2.rpm

2、Logstash配置
安装完成后,logstash主程序目录为/usr/share/logstash,配置文件目录为/etc/logstash,日志目录为/var/log/logstash。
Logstash的基础配置文件是/etc/logstash/logstash.yml,但是这个文件我们不用动,我们只需要将自己的输入输出配置写到以“.conf”结尾的文件里,把这文件放入/etc/logstash/conf.d目录下,logstash就会读取我们的配置。我编写了一个文件kafka.conf,放到/etc/logstash/conf.d,内容如下:

#输入配置,一个input{}里可以配置多个输入源
input {
  #kafka输入源配置
  kafka {
    #kafka集群地址
    bootstrap_servers => ["192.168.241.11:9092,192.168.241.12:9092,192.168.241.13:9092"]
    #从kafka中哪个topic读取数据,这里的topic名要与filebeat中使用的topic保持一致
    topics => ["filebeat-logstash"]

    #这是kafka中的消费组者ID,默认值是“logstash”。kafka将消息发到每个消费者组中,同一个组中的消费者收到的数据不重复。例如有两个消费者组G1、G2,G1中有成员A、B,G2中有成员C、D。kafka从输入中收到了10条消息,会将这10条消息同时发送给G1和G2,A和B各会收到这10条消息中的一部分,他们收到消息的并集就是这10条消息,C和D同理。
    group_id => "filebeat-logstash"
    #kafka消费者组中每个消费者的ID,默认值是“logstash”
    client_id => "logstashnode1"

    #logstash的消费线程,一般一个线程对应kafka中的一个partition(分区),同一组logstash的consumer_threads之和应该不大于一个topic的partition,超过了就是资源的浪费,一般的建议是相等。
    consumer_threads => 1
    #由于beat传输数据给kafka集群的时候,会附加很多tag,默认情况下,logstash就会将这串tag也认为是message的一部分。这样不利于后期的数据处理。所有需要添加codec处理。得到原本的message数据。
    codec => json
  }
}

#输出配置,这里表示输出到文件
output {
  file {
    path => "/tmp/logstash.output"
  }
}

配置的详细解释请参考注释,更多配置详情,请参考百度和官方文档https://www.elastic.co/guide/en/logstash/current/index.html

五、启动服务及验证
根据上文完成部署后,分别启动kafka集群,filebeat,logstash,在filebeat所在服务器上,往/tmp/input.test文件中输入内容,就会在logstash所在服务器的/tmp/logstash.output文件里产生输出。详细验证过程这里就不赘述了。

你可能感兴趣的:(ELK)