Filebeat技术栈总结

filebeat 是一个轻量型日志采集器,本质上是一个 agent 。不依赖于任何应用,可以安装在任何节点上,可单独使用 Filebeat 并根据配置读取对应位置的日志进行上报和搜集。

filebeat 内置了常用的 output 组件,例如 kafka、ElasticSearch、redis 等,也可以输出到 console 和 file 。可以利用现有的 output 组件,将日志进行上报。也可以自定义 output 组件,让 Filebeat 将日志转发到我们想要的地方。

Filebeat技术栈总结_第1张图片

原理

filebeat 由两个主要组件组成:harvester 和 prospector。

harvester:采集器,负责读取一个文件的内容。它会逐行读取文件内容,并将内容发送到 output 指定的目的地。

prospector:查找器,负责管理 harvester 并找到所有需要读取的文件源。比如类型是日志,prospector 就会遍历制定路径下的所有匹配要求的文件。

Filebeat 如何记录文件状态

filebeat 将文件状态记录在文件中(默认在/var/lib/filebeat/registry)。此状态可以记住 harvester 收集文件的偏移量。若连接不上输出设备,如 ES、Kafka 等,filebeat 会记录发送前的最后一行,并再可以连接的时候继续发送。

filebeat 在运行的时候 prospector 状态会被记录在内存中。

当 filebeat 重启的时候,利用 registry 记录的状态来进行重建,用来还原到重启之前的状态。每个 prospector 会为每个找到的文件记录一个状态,对于每个文件,filebeat 存储唯一标识符以检测文件是否先前被收集,以此确保数据不丢失。

Filebeat 如何保证事件至少被输出一次

filebeat 之所以能保证事件至少被传递到配置的输出一次,没有数据丢失,是因为 filebeat 将每个事件的传递状态保存在文件中。

在未得到输出方确认时,filebeat 会尝试一直发送,直到得到回应。若 filebeat 在传输过程中被关闭,则不会再关闭之前确认所有时事件。

任何在 filebeat 关闭之前为确认的时间,都会在 filebeat 重启之后重新发送。这可确保至少发送一次,但有可能会重复。可通过设置 shutdown_timeout 参数来设置关闭之前的等待事件回应的时间(默认禁用)。

Filebeat 工作流程

当开启 filebeat 程序的时候,它会启动一个或多个查找器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件。filebeat 启动采集器(harvester),每一个采集器进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后 filebeat 会发送集合的数据到你指定的地点。


配置

由于安装简单,在此直接略过。

filebeat.yml 是 filebeat 的配置文件,配置文件的路径会因为你安装方式的不同而变化。

关于详细配置请参考官网:

filebeat.yml 文件格式配置 
filebeat 配置说明

重要配置说明

filebeat.prospectors

文件监视器,用于指定需要关注的文件。

filebeat.inputs:
  # type为 log 类型,表示收集日志文件数据。
- type: log
  id: filebeat-user-log
  enabled: true
  # paths:是一个文件路径数组,这里扫描/data/logs/目录下所有 .log 文件。
  paths:
    - /data/logs/*.log
  # 定义日志标签,注意:不同的服务使用不同的标签
  tags: ["user-log"]

output.elasticsearch

如果你希望使用 filebeat 直接向 elasticsearch 输出数据,需要配置 output.elasticsearch 。

output.elasticsearch:
  hosts: ["192.168.200.11:9200"]
  #username: "elastic"
  #password: "elastic"

如果你希望使用 filebeat 直接向 kafka 输出数据,需要配置 output.kafka 。

output.kafka:
  enable: true
  hosts: ["192.168.200.11:9092"]
  topic: "elk_topic"

output.logstash

如果你希望使用 filebeat 向 logstash 输出数据,然后由 logstash 再向 elasticsearch 输出数据,需要配置 output.logstash。

output.logstash:
  hosts: ["192.168.200.11:5044"]

此外,还需要在 logstash 的配置文件(logstash.conf)中指定 beats input 插件:

input {
# 配置接收 filebeat 数据源,监听端口为5044,Filebeat 中的 output.logstash 地址保持跟这里一致
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://192.168.200.11:9200"]
    index => "elk-%{+YYYY.MM}"
    # user => "elastic"
    # password => "changeme" 
  }
}

相比于向 elasticsearch 输出数据,更推荐向 logstash 输出数据。因为 logstash 和 filebeat 一起工作时,如果 logstash 忙于处理数据,会通知 FileBeat 放慢读取速度。

一旦拥塞得到解决,fileBeat 将恢复到原来的速度并继续传播。这样,可以减少管道超负荷的情况。


setup.kibana

如果打算使用 Filebeat 提供的 Kibana 仪表板,需要配置 setup.kibana 。

setup.kibana:
  host: "192.168.200.11:5601"


setup.dashboards

filebeat 附带了示例 kibana 仪表板。在使用仪表板之前,您需要创建索引模式 filebeat- *,并将仪表板加载到 kibana 中。为此,您可以运行 setup 命令或在 filebeat.yml 配置文件中配置仪表板加载。

为了在 Kibana 中加载 Filebeat 的仪表盘,需要在 filebeat.yml 配置中启动开关:

setup.dashboards.enabled: true

更多详情请见:Configure Kibana dashboard loading

你可能感兴趣的:(Elastic,Filebeat)