天天看点

ELK-filebeat收集日志到Kafka,并转存ES

在有些不需要安装java环境的服务器如Nginx,php等为主的web 应用可以使用filebeat来对这些服务日志进行收集。

Filebeat用于收集本地文件的日志数据。 它作为服务器上的代理安装,Filebeat监视日志目录或特定的日志文件,尾部文件,并将它们转发到Elasticsearch或Logstash进行索引。

logstash 和filebeat都具有日志收集功能,filebeat更轻量,使用go语言编写,占用资源更少,可以有很高的并发,但logstash 具有filter功能,能过滤分析日志。一般结构都是filebeat采集日志,然后发送到消息队列,如redis,kafka。然后logstash去获取,利用filter功能过滤分析,然后存储到elasticsearch中。

Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache定级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。

node1: Elasticsearch, zookeeper, Kafka,Nginx,Kibana,filebeat

node2: Elasticsearch, zookeeper,Kafka, logstash

node3: zookeeper,Kafka

这里介绍一下 zookeeper和 kafka配置步骤,node1和node2上关于ES,logstash,Kibana,Nginx的配置可以参考之前的文章。node1上使用nginx代理本地Kibana。

在配置之前,需要在每台机器是做好主机名解析:

zookeeper依赖java环境,需要安装openjdk:

在三台节点上解压安装,执行如下操作:

修改zookeeper的配置文件为如下内容:

配置zookeeper集群节点ID

在node1上执行:

在node2上执行:

在node3上执行:

在三个节点上启动zookeeper:

查看三个节点的启动状态:

对zookeeper集群进行操作验证:

在任意节点上执行:

在其他节点上获取:

在三台节点上安装Kafka集群,进行如下操作:

node1上修改配置文件的如下选项,系统默认选项这里没有列出:

node2上修改kafka配置文件的如下选项:

node3上修改如下参数:

使用 <code>-daemon</code> 的方式启动kafka:

查看kafka启动状态:

查看后台进程:

提示: jps 是查看java进程的小工具,如果没有jps命令,说明只安装了java-1.8.0-openjdk,还需要安装java-1.8.0-openjdk-devel

测试Kafka添加topic:

查看添加的topic(集群中任意服务器上都可以看到):

测试获取topic:

状态说明:logstashtest有三个分区分别为0、1、2,分区0的leader是2(broker.id),分区0有三个副本,并且状态都为lsr(ln-sync,表示可以参加选举成为leader).

删除topic:

测试使用命令发送消息:

创建一个topic:

发送消息:

其他节点获取数据(在任意节点上都能获取):

编辑logstash配置文件:

前台启动logstash,输入数据:

在kafka中查看写入的数据:

数据写入成功,kafka配置完成。

在filebeat :6.1的版本中,默认的filebeat.reference.yml有各种模块的配置示例,配置filebeat写入本地文件:

提示:(引用官方原文) 在filebeat 6.0以前的版本中,可以同时启用多个输出,但只能使用不同的类型。例如,您可以启用Elasticsearch和Logstash输出,但不能启用两个Logstash输出。启用多个输出的缺点是在继续之前等待确认(Filebeat和Winlogbeat)的Beats减慢到最慢的输出。这种含义并不明显,阻碍了多个产出有用的用例。 作为我们为6.0所做的管道重新架构的一部分,我们删除了同时启用多个输出的选项。这有助于简化管道并明确Beats中的输出范围。 如果您需要多个输出,您有以下选择: 使用Logstash输出,然后使用Logstash将事件传送到多个输出. 运行相同Beat的多个实例. 如果您使用文件或控制台输出进行调试,除了主输出之外,我们建议使用-d “public”选项,将发布的事件记录在Filebeat日志中。

访问nginx,使用<code>tail -f /tmp/filebeat/filebeat</code>命令追踪日志的变化,发现有输出则配置成功。

输出日志到kakfa:

访问nginx查看kafka中是否写入:

当日志成功写入Kafka后配置logstash.

如果使用filebeat 6.0以上的版本,可以将filebeat收集到的各种类型日志统一输入到Kafka,然后通过配置logstash将日志分类输出到不同的容器中。

配置logstash读取kafka日志:

测试文件:

在前台运行,确保日志能正确输出:

重启logstash,查看Elasticsearch中是否收到数据:

Elasticsearch已经有了对应的数据:

ELK-filebeat收集日志到Kafka,并转存ES

添加索引到Kibana,展示数据:

ELK-filebeat收集日志到Kafka,并转存ES

 本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/2052271