Filebeat使用

825 阅读7分钟

安装使用

测试版本8.13.2

下载对应的包

www.elastic.co/cn/download… 文档: www.elastic.co/guide/en/be… 当然也可以:下载后解压,可以根据需要下载x86或者arm等包

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.13.2-linux-x86_64.tar.gz
tar xzvf filebeat-8.13.2-linux-x86_64.tar.gz

image.png 之所以下载压缩包,是因为个人感觉这样配置起来更好维护以及修改配置。

配置文件filebeat.yml

filebeat.yml能配置的内容都在filebeat.reference.yml中www.elastic.co/guide/en/be… 可以对照着在filebeat.yml中添加和修改。 我目前采取配置的方式是,输入和module的配置文件在一个文件夹中,当然module的默认配置文件都在modules.d文件夹中,配置采用热加载的方式。所以filebeat.yml的配置如下:

filebeat.config:
# 输入配置
  inputs:
    enabled: true
    path: /usr/local/bin/xxx/app/filebeat/configs/*.yml
    # 开启热加载   
    # https://www.elastic.co/guide/en/beats/filebeat/current/_live_reloading.html
    reload.enabled: true
    reload.period: 5s
  modules:
    enabled: true
    path: /usr/local/bin/xxx/app/filebeat/modules.d/*.yml
    # 开启热加载
    reload.enabled: true
    reload.period: 5s
# 队列配置,也有磁盘队列配置
# https://www.elastic.co/guide/en/beats/filebeat/current/configuring-internal-queue.html
queue:
  mem:
    events: 3200
    flush.min_events: 400
    # 消息在队列中存放的时间,如果是0就不会存在,直接到输出。
    # 测试了一下,如果配置0,相同条件下吞吐量更高一些
    flush.timeout: 0s
# 能使用的cpu核心数
max_procs: 5

# 配置输出,这里选择使用输出到kafka,filebeat只能配置一个输出.
output.kafka:
  enable: true
  hosts: ["10.16.16.243:9092"]
  topic: "filebeat_test"
  # 获取message
  codec.format:
    string: '%{[message]}'

# filebeat的日志配置
logging:
  level: info
  to_files: true
  files:
  # 日志文件大小,默认10M
    rotateeverybytesedit: 10485760
    path: /usr/local/bin/xxx/app/filebeat/logs
    # 文件前缀名称
    name: filebeat
    # 日志滚动保留个数
    keepfiles: 7
    # 日志文件权限
    permissionsedit: 0640

filebeat和ES以及Kibana结合相对好一些,目前需求的原因并未测试与ES以及Kibana的结合。实时上,输出到kafka后就能接入到大部分的数据处理中间件,比如Clickhouse就可以直接从kafka消费数据。

配置input配置文件

我采用的是热加载的方式,所以根据配置路径创建输入的配置文件,例如配置文件名称是input1.yml

# syslog输入
- type: syslog
  # 自动解析syslog日志格式,通常有rfc3164和rfc5424
  format: auto
  # syslog的协议,还可以配置成udp,具体请参考输入文档
  protocol.tcp:
    host: "10.16.16.243:514"

直接写对应的type就好,这里展示了配置一个syslog服务为输入,更多的输入参考文档:www.elastic.co/guide/en/be… 都可以从- type配置开始。如果所有的配置都是在filebeat.yml中,则需要从filebeat.inputs:开始 image.png 另外,在每一个输入下面都可以配置processors,用于对消息的处理:

# syslog输入
- type: syslog
  # 自动解析syslog日志格式,通常有rfc3164和rfc5424
  format: auto
  # syslog的协议,还可以配置成udp,具体请参考输入文档
  protocol.tcp:
    host: "10.16.16.243:514"
  processors:
    # 在消息上添加字段
    - add_fields:
      target: project
      fields:
        name: myproject
        id: '574734885120952459'
# 启动一个http服务,可以启动一个http服务
- type: http_endpoint
  enabled: true
  listen_address: 127.0.0.1
  listen_port: 8080
  url: "/open/"
  response_code: 200
  response_body: '{"message": "success"}'

更多processors,参考文档:www.elastic.co/guide/en/be… 另外,processors中有一个syslog的,是对syslog格式的消息进行处理。

配置保存完后,如果filebeat服务已经启动,则会自动加载。

配置module配置文件

module是filebeat已经适配好的输入。具体参考: www.elastic.co/guide/en/be… www.elastic.co/guide/en/be… 我采用是热加载的方式,如上面filebeat.yml的配置 默认module的配置文件,在modules.d文件夹下面,都是以disabled结尾。要使用的话,可以手动将disabled后去掉,也可以执行命令:filebeat modules enable mysql 。但是还是要编辑配置的。

- module: mysql
  # Error logs
  error:
    enabled: ture

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

  # Slow logs
  slowlog:
    enabled: false

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

保存后就可以加载。module中所支持的,输出到kibana是最好的,能很好的进行展示。

启动服务

如果是调试看一下,可以执行filebeat -e直接启动。 还可以配置systemctl启动,启动命令如下:

/usr/local/bin/xxx/app/filebeat/filebeat -c /usr/local/bin/xxx/app/filebeat/filebeat.yml

自动配置的systemctl,会根据-c指定的配置文件运行。

为何选择filebeat

在资源消耗方面,Filebeat和Rsyslog各有特点,具体对比如下:

Filebeat

  • 资源占用:Filebeat设计为轻量级日志采集器,对系统资源(CPU和内存)的消耗相对较低。它是用Go语言编写的,没有运行时依赖,如JVM,这意味着它启动更快,内存占用少。Filebeat的工作原理是监控文件变化,读取新数据并发送到指定的目的地(如Logstash、Elasticsearch或Kafka),而不是在本地进行大量处理或解析工作,这有助于保持其资源消耗低。
  • 性能:由于其轻量化设计,Filebeat在处理大量日志文件或高速日志生成场景时,能够有效减少对系统的影响。它通过简单而高效的文件跟踪机制来减少I/O操作,从而优化性能。

Rsyslog

  • 资源占用:Rsyslog相比Filebeat,在进行日志处理、过滤和改写时可能消耗更多的系统资源。特别是在处理复杂过滤规则和改写动作时,Rsyslog的CPU和内存使用可能会较高。它支持多种协议和丰富的功能,这使得它在某些场景下的资源需求高于Filebeat。
  • 性能与可伸缩性:尽管Rsyslog在资源消耗上可能不如Filebeat轻量,但它在日志处理的灵活性和可伸缩性方面表现出色。Rsyslog支持磁盘辅助队列和纯磁盘队列,能够有效地处理日志风暴,确保日志在系统重启或网络故障时不会丢失,这对于高可用性和大规模日志处理场景非常重要。

总结

  • 对于希望最小化资源消耗、快速部署且日志处理需求相对简单的环境,Filebeat通常是更优选择。
  • 对于需要强大的日志处理能力,包括复杂的过滤、改写规则,以及对日志传输可靠性和可伸缩性有更高要求的场景,Rsyslog可能是更适合的解决方案。尽管它可能消耗更多资源,但其丰富的功能和稳定性为大型企业环境提供了必要的支撑。

从功能丰富度,资源消耗,学成成本等三个方面对filebeat, rsyslog,Logstash 做排序:

功能丰富度:

  1. Logstash - 功能最为丰富,提供了强大的数据处理能力,包括复杂的过滤、转换、解析等功能,支持多种输入输出插件,适用于构建高度定制化的日志处理管道。
  2. Rsyslog - 功能也比较全面,支持多种日志格式、过滤条件、行动(如转发、存储、重写日志内容)以及高级特性如队列管理,适用于需要在服务器端直接进行较复杂日志处理的场景。支持丰富的输入和输出www.rsyslog.com/doc/configu…
  3. Filebeat - 功能相对简洁,专注于日志文件的收集与传输,不包含复杂的解析或转换功能,适合与Logstash或Elasticsearch等工具配合使用,以实现更复杂的日志处理流程。输出项目前较少,输入的HTTP JSON支持从API拉取数据,也支持起一个http服务(在测试阶段)

资源消耗(从低到高):

  1. Filebeat - 设计为轻量级,资源占用低,特别适合资源有限的环境。
  2. Rsyslog - 相对于Filebeat,资源消耗较高,尤其是当配置复杂时,但仍然比Logstash高效。
  3. Logstash - 由于其强大的处理能力,尤其是在执行复杂的数据转换和过滤时,资源消耗最大,特别是在CPU和内存使用上。java开发

学习成本(从低到高):

  1. Filebeat - 配置简单,学习曲线较平缓,容易上手。yaml配置文件很清晰,可以快速掌握,另外文档量少,可以快速阅读。
  2. Rsyslog - 虽然功能比Filebeat复杂,但其配置文件结构相对清晰,通过实践可以较快掌握。另外一种写法,需要适应
  3. Logstash - 由于其高度的灵活性和复杂性,学习成本最高,特别是要熟练掌握各种配置选项、过滤器和插件的使用。