【星海随笔】云解决方案学习日志篇(三) 工作原理篇

Filebeat工作原理

Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent ,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。
使用了背压敏感协议,因此不会使管道过载。当Logstash数据处理繁忙时,Filebeat放慢它的读取速度。一旦压力解除,Filebeat将恢复到原来的速度,继续传输数据。

Filebeat主要由下面几个组件组成: harvester、prospector 、input
一台服务器只能启动一个filebeat进程。

在这里插入图片描述
参考文档:https://cloud.tencent.com/developer/article/1367784

filebeat主要模块
Crawler: 管理所有Input收集数据并发送事件到libbeat的Publisher
Input: 对应可配置的一种输入类型,每种类型都有具体的Input和Harvester实现。 配置项
Harvester: 对应一个输入源,是收集数据的实际工作者。配置中,一个具体的Input可以包含多个输入源(Harvester)
module: 简化了一些常见程序日志(比如nginx日志)收集、解析、可视化(kibana dashboard)配置项
fileset: module下具体的一种Input定义(比如nginx包括access和error log),包含:1)输入配置;2)es ingest node pipeline定义;3)事件字段定义;4)示例kibana dashboard
Registrar:用于在事件发送成功后记录文件状态

libbeat主要模块
Publisher:
client: 提供Publish接口让filebeat将事件发送到Publisher。在发送到队列之前,内部会先调用processors(包括input 内部的processors和全局processors)进行处理。
processor: 事件处理器,可对事件按照配置中的条件进行各种处理(比如删除事件、保留指定字段等)。配置项
queue: 事件队列,有memqueue(基于内存)和spool(基于磁盘文件)两种实现。配置项
outputs: 事件的输出端,比如ES、Logstash、kafka等。配置项
acker: 事件确认回调,在事件发送成功后进行回调
autodiscover:用于自动发现容器并将其作为输入源

harvester
  • 负责读取单个文件的内容
  • harvester逐行读取每个文件(一行一行读取),并把这些内容发送到输出
  • 每个文件启动一个harvester,并且harvester负责打开和关闭这些文件,这就意味着harvester运行时文件描述符保持着打开的状态。
  • 在harvester正在读取文件内容的时候,文件被删除或者重命名了,那么Filebeat就会续读这个文件,这就会造成一个问题,就是只要负责这个文件的harvester没有关闭,那么磁盘空间就不会被释放
  • 默认情况下,Filebeat保存文件打开直到close_inactive到达

Harvester负责读取单个文件的内容。读取每个文件,并将内容发送到配置指定的output,每个文件启动一个harvester, harvester负责打开和关闭文件,这意味着在运行时文件描述符保持打开状态。
如果文件在读取时被删除或重命名,Filebeat将继续读取文件。这有副作用,即在harvester关闭之前,磁盘上的空间被保留。默认情况下,Filebeat将文件保持打开状态,直到达到close_inactive状态

prospector
  • prospector负责管理harvester并找到所有要读取的文件来源

  • 如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester

  • Filebeat目前支持两种prospector类型:log和stdin

  • Filebeat如何保持文件的状态

Filebeat保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中
该状态用于记住harvester正在读取的最后偏移量,并确保发送所有日志行。
如果输出(例如ElasticSearch或Logstash)无法访问,Filebeat会跟踪最后发送的行,并在输出再次可以用时继续读取文件。
在Filebeat运行时,每个prospector内存中也会保存的文件状态信息,当重新启动Filebat时,将使用注册文件的数量来重建文件状态,Filebeat将每个harvester在从保存的最后偏移量继续读取
文件状态记录在data/registry文件中

input
  • 一个input负责管理harvester,并找到所有要读取的源

  • 如果input类型是log,则input查找驱动器上与已定义的log路径匹配的所有文件,并为每个文件启动一个harvester

  • 每个input都在自己的Go例程中运行

  • 下面的例子配置Filebeat从所有匹配指定的log模式的文件中读取行


模块的使用

查看有哪些模块

./filebeat modules list

启动和关闭模块

#启动
./filebeat modules enable nginx 
#禁用
./filebeat modules disable nginx 
使用

nginx安装参考文档: https://blog.csdn.net/qq_52589631/article/details/129675424?spm=1001.2014.3001.5501
创建一个 nginx-log.yml 配置文件,启动nginx的模块功能

filebeat modules enable nginx

nginx-log.yml配置文件内容

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx1/logs/*.log #nginx日志存放路径
  tags: ["nginx"]
  fields_under_root: false 
setup.template.settings:
  index.number_of_shards: 1
output.elasticsearch:
  hosts: ["192.168.40.150:9200","192.168.40.137:9200","192.168.40.138:9200"]

cd modules.d/
vim nginx.yml

# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.9/filebeat-module-nginx.html

- module: nginx
  # Access logs
  access:
    enabled: true
    # 添加日志文件
    var.paths: ["/usr/local/nginx1/logs/access.log*"]

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    #var.paths:

  # Error logs
  error:
    enabled: true
    var.paths: ["/usr/local/nginx1/logs/error.log*"]
filebeat.inputs:
setup.template.settings:
  index.number_of_shards: 1
output.elasticsearch:
  hosts: ["192.168.40.150:9200","192.168.40.137:9200","192.168.40.138:9200"]
filebeat.config.modules:
  path: $

相关推荐

  1. 随笔】Promethes() metrics

    2024-06-17 11:38:03       47 阅读
  2. MYSQL原理学习简记()

    2024-06-17 11:38:03       40 阅读
  3. 随笔】ELK优化

    2024-06-17 11:38:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-17 11:38:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-17 11:38:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-17 11:38:03       82 阅读
  4. Python语言-面向对象

    2024-06-17 11:38:03       91 阅读

热门阅读

  1. 施耐德140PLC模块140CRA93100

    2024-06-17 11:38:03       37 阅读
  2. C语言指针简介及例子

    2024-06-17 11:38:03       28 阅读
  3. c++/c中野指针和悬空指针的示例

    2024-06-17 11:38:03       29 阅读
  4. 静态语言之rust

    2024-06-17 11:38:03       29 阅读
  5. elasticsearch的入门与实践

    2024-06-17 11:38:03       36 阅读
  6. CUDA算子优化:矩阵乘GEMM优化(三)

    2024-06-17 11:38:03       33 阅读
  7. jenkins docker配置方法

    2024-06-17 11:38:03       31 阅读