ELK之filebeat详解

监控报警 靠谱运维 2006℃ 0评论

一、什么是beats

beats轻量级数据收集器并将收集的数据转发给Logstash或Elasticserach。

Beats Platform

Beats分成以下几个种类:

  • Packetbeat: 网络流量监控采集

  • Filebeat: 文件log的监控采集

  • winlogbeat: 用于Windows系统的log监控采集

  • Topbeat: 类似于top命令,用来收集CPU、内存、进程等统计信息。

  • 可以使用go语言借助libbeat库开发自己的Beat工具。

在这里我们将主要介绍filebeat这个组件。

二、什么是filebeat

    fielbeat是基于logstash-forwarder的源码改造而来,换句话说:filebeat就是最新版的logstash-forwarder。他负责从当前服务器获取日志然后转发给Logstash或Elasticserach进行处理。

Beats design

FileBeat如何工作:

filebeat包含两个部分prospectors和harversters。 一个是负责从文件中收集日志;一个负责管理harversters.

Image result for filebeat

什么是Harverster:

     harverster负责读取文本文件,一行一行的读并将读到的内容发送到输出。harverster也负责打开和关闭文件,这就意味着只要harvester在运行时文件描述符将会一直被打开;如果一个文件被删除或者被重命名当harvester运行时,Filebeat会继续读取这个文件,然而,这是有副作用的在磁盘的空间上。默认情况下,filebeat会一直读取文件直到接收到close_inactive.

关闭一个harvester有以下后果:

  • 文件处理程序关闭,放潜在的资源。

  • 运行scan_frequency之后文件收集程序才能开始

  • 当harvester关闭的时候,如果文件被删除或重命名;将不会继续收集数据。

什么是Prospector:   负责管理harvesters和发现可读的资源

    filebeat当前支持两种prospector类型:log和stdin.每一个prospector类型可以被定义多次。log类型prospector检查每个文件的harverster是否启动、运行或者此文件是否被忽略;新的文件是否发生改变当harvester关闭时。

Filebeat如何保持文件状态:

     filebeat保存每个文件的状态并且快速的刷新此状态到注册表文件中。这个状态记录一个harvester读取到哪一行并确定所有的日志行被发送。如果是输出,例如Elastisearch或Logstash不可达时,filebeat将继续追踪最后一行而且只要output只要上线就继续读取此文件。当filebeat运行时,这个状态信息一直被保存在每一个prospector的内存中。当filebeat重启时,注册表中的数据用于重新建立状态,filebeat将继续每个harvester在已知的位置。

     每一个prospector都会保存一个状态对它发现的文件,因为文件可能会被删除或者重命名,文件名和路径都不能够唯一表示一个文件,对于每个文件,filebeat存储一个唯一标识符来识别此文件。

 

Filebeat如何确保至少一次传送:

     filebeat确保每个事件都会被传递到在配置文件中定义的输出至少一次并且没有数据丢失,因为filebeat会保存每个传递状态在注册表文件中。如果输出发生阻塞,filebeat不会确认所有事件,并且会继续传递这些事件知道输出确定他们接受到这些事件。

     当开启一个传送事件后如果filebeat关闭,filebeat不会等待输出确认所有的事件在关闭之前;任何事件都会被重新发送一遍当filebeat重启时,这件确保每个事件至少被发送一次,当时你可以结束这个副本事件在开始发送之前。你也可以配置filebeat等待关闭时间使用shutdown_timeout选项。

     注:这是一个限制对于filebeat至少传送一次包括日志轮转和删除的旧的文件。如果日志写入磁盘轮转的速度快于filebeat处理的速度或者文件被删除当输出不可达时,数据可能会丢失。在Linux中,filebeat非常可能跳过此行由于inode重用。

三、filebeat的安装和配置

rpm -vi filebeat-5.2.0-x86_64.rpm  #直接下载后安装即可,非常简单

配置:

    filebeat的配置文件分为多段,不过大多可以使用默认配置,我们只需要更改这几需要的部分就行了~

filebeat配置Prospectors:

filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/apache/httpd-*.log
  document_type: apache

- input_type: log
  paths:
    - /var/log/messages
    - /var/log/*.log

每一个prospectors项都以-开头。

input_type: 输入类型,log和stdin 默认为log.

document_type: 日志类型,默认是log,可以自定义,比如Nginx-log apache-log.

paths: 搜索文件的路径,以-开头。

encoding: 指定监控的文件编码类型

exclude_lines: 被filebeat排除的行,默认收集所有行。

include_lines: 被导出的行,默认所有行别导出。 如果exclude_lines和include_lines同时使用,先匹配include_lines后匹配

 

filebeat 全局配置文件:

spool_size: 这是一个阈值,spooler中的事件数超过这个阈值就会发送到输出无论是否达到超时时间。

idle_timeout: spooler的超时时间,达到此时间后,spooler会发送到输出,无论spool_size是否叨叨阈值。

registry_file: 记录filebeat的registry文件的位置。

shutdown_timeout:在发生数据输出时,等待多久去关闭filebeat.

转载请注明:靠谱运维 » ELK之filebeat详解

喜欢 (4)or分享 (0)
发表我的评论
取消评论

表情