ELKF日志学习(四)FileBeat基础配置

前言

在 《ELKF日志学习(一)前言》 中介绍过 FileBeat,是一个轻量级的开源日志文件数据搜集器,负责对服务的日志进行收集。

因为 logstashjvm 跑的,资源消耗比较大,所以后来作者又用 golang 写了一个功能较少但是资源消耗也小的轻量级的 logstash-forwarder
不过作者只是一个人,加入 http://elastic.co 公司以后,因为 es 公司本身还收购了另一个开源项目 packetbeat,而这个项目专门就是用 golang 的,有整个团队,所以 es 公司干脆把 logstash-forwarder 的开发工作也合并到同一个 golang 团队来搞,于是新的项目就叫 FileBeat 了。
摘自:《一篇文章搞懂filebeat(ELK)》 - HZhuizai

代码仓库

talk-lucky/elkf-study

实际应用

个人觉得,学习是为了更好的运用,所以直接在这里写上 FileBeat 在实际中的应用。

举个例子:

我们有 webapicron 三个系统,我们需要收集这几个系统的日志。

只需要在每个服务中安装启动 FileBeat,配置好监听的文件,一旦文件发生变化,写入指定的位置。

如果是 Docker 服务,只需要共享服务的日志文件,将 FileBeat 单独放在一个容器中运行即可(每个单独的服务配置一个)。

工作原理

Filebeat 根据用户指定的配置 input,读取文件,一个文件一个 harvester

其中,input 是管理 harvester 的;harvester 的作用是逐行读取文件,并把内容发送到输出。

Filebeat 会记住每个文件的状态,及 harvester 读取的最后一个偏移量(即位置)。

输出 可以是 ElasticsearchKafkaLogstashredis 等。

img

配置解析

输入配置

这里指定输入类型为 log,且路径是 /var/log/nginx/access.log

filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/nginx/access.log

为了能够方便后续的识别,这里添加一个来源。

这里的 fields 是自定义的,你可以按照自己团队的规范定义。

filebeat.inputs:
  - type: log
    enabled: true
    fields:
      source: nginx_access_log
    paths:
      - /var/log/nginx/access.log

输出配置

上述已经说明了,我们可以输出的类型有很多,这里配置一下 Logstash

output.logstash:
  hosts: ['logstash:5044']

扩展一下,如果有多个 Logstash 服务,该如何配置?

答:使用 loadbalance: true

output.logstash:
  hosts: ['logstash:5044', 'logstash1:5044']
  loadbalance: true

最后

到此为止,FileBeat 的基础配置是介绍结束了。

它难道就这一点功能么?

NO!!!