FreezeJ' Blog

filebeat6.8文档

2022-03-23

本文使用filebeat 6.8,使用yum安装,不同版本命令或配置可能不一样,自行鉴别
官方文档:https://www.elastic.co/guide/en/beats/filebeat/6.8/index.html

介绍

filebeat是一款轻量级的日志收集工具,是Beats套件之一,它将收集的日志转发输出到elasticsearch、logstash等后端。

工作原理:

更详细的的介绍可以参考:https://blog.csdn.net/hwjcmozw/article/details/109473925

命令行参数

子命令

enroll      注册到kibana集中管理
export      导出当前配置或模版
help        显示帮助
keystore    管理密钥
modules     管理模块
run         运行filebeat
setup       设置初始环境,包括索引模板,Kibana仪表板(如果可用)和机器学习作业(如果可用)。
test         测试配置文件
version     查看版本

查看版本

$ filebeat version
filebeat version 6.8.22 (amd64), libbeat 6.8.22 [24dac6020020a7333d4665b5dca5018e63f2dce5 built 2021-12-18 23:54:48 +0000 UTC]

测试配置文件

filebeat test config -c /etc/filebeat/filebeat.yml  # 测试配置文件
filebeat test output -c /etc/filebeat/filebeat.yml  # 测试output

模块管理

默认模块目录:/etc/filebeat/modules.d

filebeat modules list  # 列出当前模块,开启或关闭情况
filebeat modules enable xxxx xxxx  # 开启模块
filebeat modules disable xxxx xxxx  # 关闭模块

默认开启模块,会按照预设路径采集日志,如果需要自定义采集日志路径,需要修改模块的yml配置。以mysql.yml为例,编译安装后的mysql,需要修改错误日志和慢日志路径(var.paths)才能采集到:

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

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/data/mysql/mysql_master/data/mysql_error.log"]

  # Slow logs
  slowlog:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/data/mysql/mysql_master/data/slowquery.log"]

使用命令行来覆盖变量:

./filebeat -e -M "nginx.access.var.paths=[/usr/local/var/log/nginx/access.log*]"

通过配置文件来定义开启的模块:

filebeat.modules:
- module: nginx
- module: mysql
- module: system

初始化setup

初始化dashboard需要配置/etc/filebeat/filebeat.yml中的setup.kibana

初始化索引需要配置/etc/filebeat/filebeat.yml中的output.elasticsearch

添加配置后,命令行使用setup初始化:

$ filebeat setup
Loaded index template
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Loaded machine learning job configurations
Loaded Ingest pipelines

也可以使用以下子命令限制setup的范围:

--dashboards         Setup dashboards
--ilm-policy         Setup ILM policy
--machine-learning   Setup machine learning job configurations
--modules string     List of enabled modules (comma separated)
--pipelines          Setup Ingest pipelines
--template           Setup index template

储存密钥keystore

keystore主要是防止敏感信息被泄露,比如密码等,像ES的密码,这里可以生成一个key为ES_PWD,值为es的password的一个对应关系,在使用es的密码的时候就可以使用${ES_PWD}引用

$ filebeat keystore create  # 创建keystore
$ filebeat keystore add ES_PWD  # 添加一个名为ES_PWD的secret
Enter value for ES_PWD: ******
Successfully updated the keystore
$ filebeat keystore list  # 列出当前的key
ES_PWD
$ filebeat keystore remove ES_PWD  # 移除secret

定义好key和secret后,可以在配置文件中使用${ES_PWD}引用这个值。例如:

output.elasticsearch.password:"${ES_PWD}"

run运行

使用-e参数,把日志重定向到屏幕输出

filebeat run -c /etc/filebeat/filebeat.yml -e

导出export

输出当前配置

filebeat export config -c /etc/filebeat/filebeat.yml

输出模版信息

filebeat export template -c /etc/filebeat/filebeat.yml

配置文件

filebeat的配置文件,最简单的配置就是输入和输出,但是想要灵活的运用它来采集日志和输出到不同的后端,就需要更加细致的配置。

input配置

可选的输入类型:

这里只展开记录一下最常用的log输入类型,其它请查阅官方文档。

log

采用日志文件的形式作为输入,简单的例子:

filebeat.inputs:
- type: log
  paths:
    - /var/log/system.log
    - /var/log/wifi.log
- type: log
  paths:
    - "/var/log/apache2/*"
  fields:
    apache: true
  fields_under_root: true

paths表示日志的文件路径,可以使用通配符*来匹配文件。

fields表示向输出添加附加信息的自定义字段,这里采集apache日志添加了apache:true标记字段。

fields_under_root表示将自定义字段存储为顶级字段,设置前后效果如下图:

常用参数
tags 打多个标签,便于搜索

enabled 使用该enabled选项启用和禁用输入。默认情况下,启用设置为真。

exclude_lines排除匹配的正则表达式列表

include_lines包含匹配的正则表达式列表

exclude_files忽略的文件匹配的正则表达式列表。默认情况下不排除任何文件。

harvester_buffer_size每个收集器在获取文件时使用的缓冲区大小(以字节为单位)。默认值为 16384。

tail_files 未记录在register的,从最后一行开始记录。(适合新部署filebeat,系统已经存在大量数据的情况,避免把所有已经存在的数据全部录入,开启该设置,等register文件记录好了旧文件的offest位置后可以去掉。)

max_bytes单个日志消息可以拥有的最大字节数。之后的所有字节

max_bytes都被丢弃而不发送。此设置对于可能变得很大的多行日志消息特别有用。默认值为 10MB (10485760)。

ignore_older 如果启用此选项,Filebeat 将忽略在指定时间跨度之前修改的所有文件。

其它参数比较少用到,完整参数可以参考官方文档:https://www.elastic.co/guide/en/beats/filebeat/6.8/filebeat-input-log.html

匹配多行输入

filebeat默认读取日志文件以单行作为一个日志信息单元,比如java的堆栈日志,需要使用multiline参数来匹配。官方文档:https://www.elastic.co/guide/en/beats/filebeat/6.8/multiline-examples.html

例子:

匹配以日期开头的日志,使用日期作为多行日志的断行依据(以下例子日期匹配正则不精确,仅作例子)

- type: log
  paths:
    - /data/server/logs/*.log
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  multiline.timeout: "5s"
  multiline.max_lines: 500

结果:

官方还提供了一个测试正则的脚本:https://go.dev/play/p/uAd5XHxscu

扩展配置

扩展input

filebeat.config.inputs:
  enabled: true
  path: configs/*.yml

扩展modules

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

可以添加reload参数来实现定时重新加载

filebeat.config.inputs:
  enabled: true
  path: configs/*.yml
  reload.enabled: true
  reload.period: 10s

output配置

可选output:

输出到elasticsearch

官方文档:https://www.elastic.co/guide/en/beats/filebeat/6.8/elasticsearch-output.html

配置样例:

output.elasticsearch:
  hosts: ["https://localhost:9200"]
  index: "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
  ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
  ssl.certificate: "/etc/pki/client/cert.pem"
  ssl.key: "/etc/pki/client/cert.key"
  username: "filebeat_internal"
  password: "YOUR_PASSWORD"

常用参数
compression_level 压缩等级,可选0-9,默认为0表示不开启压缩,最高为9压缩等级最高,开启压缩可以减少带宽,但是会增加性能开销。

escape_html 跳过html转义,默认为true

worker 并发数,默认为1

proxy_url 代理url

index 索引,默认为filebeat-%{[beat.version]}-%{+yyyy.MM.dd}

indices 多个索引

output.elasticsearch:
  hosts: ["http://localhost:9200"]
  indices:
    - index: "warning-%{[beat.version]}-%{+yyyy.MM.dd}"
      when.contains:
        message: "WARN"
    - index: "error-%{[beat.version]}-%{+yyyy.MM.dd}"
      when.contains:
        message: "ERR"
output.elasticsearch:
  hosts: ["http://localhost:9200"]
  indices:
    - index: "%{[fields.log_type]}"
      mappings:
        critical: "sev1"
        normal: "sev2"
      default: "sev3"

输出到logstash

官方文档:https://www.elastic.co/guide/en/beats/filebeat/6.8/logstash-output.html

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

常用参数

compression_level 压缩等级,可选0-9,默认为0表示不开启压缩,最高为9压缩等级最高,开启压缩可以减少带宽,但是会增加性能开销。

escape_html 跳过html转义,默认为true

index 索引

proxy_url 代理url

loadbalance 负载,默认为false,需要多个hosts

输出到kafka

官方文档:https://www.elastic.co/guide/en/beats/filebeat/6.8/kafka-output.html

output.kafka:
  # initial brokers for reading cluster metadata
  hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]

  # message topic selection + partitioning
  topic: '%{[fields.log_topic]}'
  partition.round_robin:
    reachable_only: false

  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

输出到redis

output.redis:
  hosts: ["localhost"]
  password: "my_password"
  key: "filebeat"
  db: 0
  timeout: 5
通过keys分类

根据内容分类

message内容包含INFO字符串,发送到info_list,当message内容包含DEBUG字符串,发送到debug_list,匹配不到发送到默认default_list

output.redis:
  hosts: ["localhost"]
  key: "default_list"
  keys:
    - key: "info_list"   # send to info_list if `message` field contains INFO
      when.contains:
        message: "INFO"
    - key: "debug_list"  # send to debug_list if `message` field contains DEBUG
      when.contains:
        message: "DEBUG"

根据值分类

fileset.modulesystem,发送到system_log,以此类推。

output.redis:
  hosts: ["localhost"]
  key: "default_log"
  keys:
    - key: "%{[fileset.module]}"
      mappings:
        system: "system_log"
        elasticsearch: "elasticsearch_log"
        auditd: "auditd_log"

输出到文件

output.file:
  path: "/tmp/filebeat"
  filename: filebeat
  #rotate_every_kb: 10000
  #number_of_files: 7
  #permissions: 0600

输出到终端

output.console:
  pretty: true
Tags: ELK