ELK之Filebeat轻量级收集日志服务

 

Filebeat简单原理

Filebeat由两个主要组成部分组成:prospector和 harvesters。这些组件一起工作来读取文件并将事件数据发送到您指定的output。

 

harvesters

harvesters负责读取单个文件的内容。harvesters逐行读取每个文件,并将内容发送到output中。每个文件都将启动一个harvesters。harvesters负责文件的打开和关闭,这意味着harvesters运行时,文件会保持打开状态。如果在收集过程中,即使删除了这个文件或者是对文件进行重命名,Filebeat依然会继续对这个文件进行读取,这时候将会一直占用着文件所对应的磁盘空间,直到Harvester关闭。默认情况下,Filebeat会一直保持文件的开启状态,直到超过配置的close_inactive参数,Filebeat才会把Harvester关闭

关闭Harvesters会带来的影响:

  1. file Handler将会被关闭,如果在Harvester关闭之前,读取的文件已经被删除或者重命名,这时候会释放之前被占用的磁盘资源。
  2. 当时间到达配置的scanfrequency参数,将会重新启动为文件内容的收集。
  3. 如果在Havester关闭以后,移动或者删除了文件,Havester再次启动时,将会无法收集文件数据。
  4. 当需要关闭Harvester的时候,可以通过close*配置项来控制。

 

Prospector

Prospector负责管理Harvsters,并且找到所有需要进行读取的数据源。如果input type配置的是log类型,Prospector将会去配置度路径下查找所有能匹配上的文件,然后为每一个文件创建一个Harvster。每个Prospector都运行在自己的Go routine里。

Filebeat目前支持两种Prospector类型:log和stdin。每个Prospector类型可以在配置文件定义多个。log Prospector将会检查每一个文件是否需要启动Harvster,启动的Harvster是否还在运行,或者是该文件是否被忽略(可以通过配置 ignore_order,进行文件忽略)。如果是在Filebeat运行过程中新创建的文件,只要在Harvster关闭后,文件大小发生了变化,新文件才会被Prospector选择到

 

 

 

Filebeat的工作原理

Filebeat可以保持每个文件的状态,并且频繁地把文件状态从注册表里更新到磁盘。这里所说的文件状态是用来记录上一次Harvster读取文件时读取到的位置,以保证能把全部的日志数据都读取出来,然后发送给output。如果在某一时刻,作为output的ElasticSearch或者Logstash变成了不可用,Filebeat将会把最后的文件读取位置保存下来,直到output重新可用的时候,快速地恢复文件数据的读取。在Filebaet运行过程中,每个Prospector的状态信息都会保存在内存里。如果Filebeat出行了重启,完成重启之后,会从注册表文件里恢复重启之前的状态信息,让FIlebeat继续从之前已知的位置开始进行数据读取。

Prospector会为每一个找到的文件保持状态信息。因为文件可以进行重命名或者是更改路径,所以文件名和路径不足以用来识别文件。对于Filebeat来说,都是通过实现存储的唯一标识符来判断文件是否之前已经被采集过。

如果在你的使用场景中,每天会产生大量的新文件,你将会发现Filebeat的注册表文件会变得非常大。这个时候,你可以参考(the section called “Registry file is too large?edit),来解决这个问题。
安装filebeat服务

 

 

 

Logstash跟Filebeat

Logstash功能虽然强大,但是他太依赖java,在数据量大的时候,Logstash进程会消耗过多的系统资源,这将严重影响业务系统的性能。

而Filebeat就是一个完美的替代者,Filebeat是Beat成员之一,基于GO语言,没有任何的依赖,配置文件简单,格式明了。

同时Filebeat比Logstash更加轻量级,所以占用系统资源很少,很适合安装在生产机器上。

 

 

 

 

第一步 

 

机器

我这边拿一台虚拟机,centos7的

P地址:192.168.0.193

 

下载

我这边是先下载好的

版本:Filebeat6.5.2

官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch

 

 

 

第二步

安装

解压:tar -zxf filebeat-6.5.2-linux-x86_64.tar.gz

移动:mv filebeat-6.5.2-linux-x86_64 /usr/local/filebeat

 

配置

vim /usr/local/filebeat/filebeat.yml

filebeat.inputs:   ##用于定义数据原型
- type: log        ##指定数据的输入类型
  enabled: true    ##启动手工配置filebeat,默认为模块方式配置
  paths:           ##指定需要监控的日志路径
    - /var/log/messages   ##监控messages文件
    - /log/*.log          ##监控*.log的所有文件
  fields:
    log_topic: osmessages

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

setup.template.settings:
  index.number_of_shards: 3

name: "192.168.0.193"     ##设置filebeat收集日志中对应主机的名字,如果为空,则默认使用主机的主机名

output.kafka:  ##filebeat支持多种输出,支持向kafka,logstash,elasticsearch输出数据,这里设置是交数据输入到kafka中
  hosts: ["192.168.0.153:9092","192.168.0.154:9092"]  ##指定输出数据到kafka集群中
  version: "0.10"
  topic: '%{[fields][log_topic]}'  ##指定要发送数据到kafka集群的那个topic,如果指定的topic不存在,则会默认创建 
  partition.round_robin:
    reachable_only: true
  worker: 2
  required_acks: 1
  compression: gzip
  max_message_bytes: 10000000

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

logging.level: info   ##定义filebeat的日志输入级别,有critical,error,warning,info,debug五种可以选择,在调试的时候,建议使用info级别


 

 

 

第三步

启动

cd /usr/local/filebeat/

nohup ./filebeat -e -c filebeat.yml &

 

 

 

 

 

转载请注明原文链接:ELK之Filebeat轻量级收集日志服务

发表评论:

共有 0 条评论

 Top