1.5 Beats概览

Beats组件虽然是Elastic Stack家族中加入比较晚的组件,但它规范了数据采集的方式和流程,极大地拓宽了Elastic Stack的应用范围。目前,Beats组件包括Filebeat、Packetbeat、Metricbeat、Heartbeat、Auditbeat、Journalbeat、Winlogbeat、Functionbeat八种类型,它们可以收集文件、网络、指标、审计等各种各样的数据。另外,还有一种称为Topbeat的Beats组件,但它已经被Metricbeat取代,可以认为是Metricbeat中的一个模块。它们基于统一的框架开发,所以在使用上有很多相似之处,本书第15~16两章将对它们做具体介绍。本节先介绍如何安装Filebeat,其他Beats组件的安装与此类似。

1.5.1 安装Filebeat

Filebeat一般安装于宿主机,用于收集文本类型的日志数据。Filebeat支持Linux、Windows和Mac环境,也支持通过docker直接启动。在Linux环境下,提供了DEB、RPM安装包,也提供了tar.gz压缩包;而Windows和Mac环境下,则只提供了tar.gz和zip压缩包,直接解压缩到特定的目录即可。在Windows环境下,如果想将Filebeat安装为服务,可以在PowerShell中运行安装目录下的install-service-filebeat.ps1脚本。

1.5.2 配置Filebeat

Filebeat的配置文件一般位于安装目录下,名称为filebeat.yml。但使用DEB、RPM安装包安装的Filebeat则位于/etc/filebeat下。配置Filebeat时,最重要的是指明两个参数:一个是从哪里提取文件数据;另一个是提取出来的数据发送到哪里。下面修改filebeat.yml文件,将Elasticsearch生成的日志数据发送给Logstash。

1.文件路径

提取文件的路径在配置文件的filebeat.inputs参数下指定,默认情况下配置文件的这个参数中已经添加了一项type为log的输入,但未启用。可以直接在这一项之前添加如下内容:

示例1-11 配置Filebeat

其中,enabled参数用于设置当前配置项是否启用,paths参数则接收一组指向日志文件的路径,Filebeat会从这些路径上提取文件内容。在示例1-11中,Filebeat收集日志的路径被指向了Elasticsearch的日志文件。

2.输出组件

默认情况下,Filebeat将提取出来的文件数据直接发送到本机Elasticsearch的9200端口,可以通过修改filebeat.yml配置文件修改目标数据源。为了搭建图1-1所示的日志收集系统,让Filebeat与Elasticsearch、Logstash、Kibana共同工作,需要将Filebeat输出组件配置成发送给Logstash。

首先将filebeat.yml文件中默认输出给Elasticsearch的配置使用#号注释掉,如果保留Elasticsearch输出会在发送给Logstash的同时也发送给Elasticsearch。在Elasticsearch输出配置的下面就是输出给Logstash的配置,将它们前面的#号删除从注释中释放出来,如示例1-12所示:

示例1-12 输出给Logstash

在示例1-12中,hosts参数指定了Logstash的IP地址和端口,可以指定多个以实现负载均衡。为了能够接收Filebeat发送过来的数据,Logstash管道配置文件也必须要做出相应修改。下面,先创建一个新的Logstash管道配置文件beats_es.conf,并在文件中添加如下内容:

示例1-13 Logstash使用Beats输入插件

在示例1-13中,Logstash输入插件被设置为beats,而输出插件则被设置为elasticsearch。beats输入插件的port参数指定了Logstash监听Filebeat的端口为5044,这与Filebeat中配置的端口要一致。elasticsearch输出插件的hosts参数指定了Elasticsearch的地址和端口,而index参数则指定了日志存储的索引为es_logs。接下来,需要使用beats_es.conf重新启动Logstash:

示例1-14 使用新配置文件启动Logstash

1.5.3 启动Filebeat

Filebeat是轻量级组件,一般做成系统服务随系统启动和关闭,但也可以通过命令行直接启动。启动命令位于Filebeat安装路径中,根据操作系统不同选择运行filebeat或filebeat.exe命令。启动后命令行没有日志,日志存储于安装路径的logs目录下,其中包含了名为filebeat的文件。打开日志文件会看到类似“filebeat start running”的信息,如果没有其他异常,就说明filebeat启动成功。对于采用Docker应用来说,一般会通过Docker Compose将Filebeat与业务应用放在一个容器中启动。

按照上面的配置,Filebeat会将日志数据采集出来传输给Logstash,而Logstash又会将数据传输给Elasticsearch的es_logs索引中。所以为了让它们正常运行起来,在启动Filebeat之前需要将Elasticsearch、Logstash和Kibana都启动起来,如果一切正常就可以直接在Kibana中查看Filebeat收集上来的日志数据了。打开Kibana的开发工具,输入“GET _cat/indices”会看到es_logs索引已经存在,输入“GET /es_logs/_search”会看到索引中已经包含有Filebeat收集上来的日志信息了。