S_lion's Studio

日志系统之Filebeat

字数统计: 6k阅读时长: 27 min
2021/12/18 Share

日志系统架构上可分为收集、纳管、展示三个层级,业界常说的ELK架构是指elasticsearch(搜索、存储)、Logstash(采集、清洗)、Kibana(展示)的日志系统解决方案。在日志采集方面,logstash对内存、CPU、io等资源消耗比较高,与同类产品Beats比,性能有较大的开销。

Beats是一个轻量级日志采集器,目前Beats家族有7个成员:

  • Packetbeat:网络数据(收集网络流量数据)
  • Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
  • Filebeat:日志文件(收集文件数据)
  • Winlogbeat:Windows事件日志(收集Windows事件日志数据)
  • Auditbeat:审计数据(收集审计日志)
  • Heartbeat:运行时间监控(收集系统运行时的数据)
  • Functionbeat: 面向云端数据的无服务器采集器

了解更多可查看官方文档

Filebeat

Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视服务器上指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch Logstash进行索引。

工作流程

启动Filebeat时,它将启动一个或多个input(输入),这些input会在指定的日志数据目录中查找。对于Filebeat所找到的每个日志,Filebeat都会启动harvester(收集器)。每个harvester都读取单个日志以获取新内容,并将新日志数据发送到libbeatlibbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的output(输出)。

实现原理

组件构成

Filebeatinputs(输入)和harvesters(收集器)这两个组件组成,这些组件一起工作来跟踪文件并将事件数据发送到指定的output(输出)。

harvester负责读取单个文件的内容。harvester逐行读取每个文件,并将内容发送到输出。为每个文件启动一个harvester。harvester负责打开和关闭文件,这意味着文件描述符在harvester运行时保持打开状态。如果在收集文件时删除或重命名文件,Filebeat将继续读取该文件。

一个input负责管理harvesters和寻找所有来源读取。如果input类型是log,则input将查找驱动器上与定义的路径匹配的所有文件,并为每个文件启动一个harvester。每个input在它自己的Go协程中运行,Filebeat当前支持多种输入类型。每个输入类型可以定义多次。日志输入检查每个文件,以查看是否需要启动一个harvester,是否已经在运行,或者是否可以忽略该文件(参见ignore_older)。只有在harvesters(收集器)关闭后文件的大小发生变化时,才会提取新行。

如何保存文件的状态

Filebeat保留每个文件的状态,并经常将状态刷新到磁盘中的注册表文件中。该状态用于记住harvester读取的最后一个偏移量,并确保发送所有日志行。如果无法访问输出(如Elasticsearch或Logstash),Filebeat将跟踪最后发送的行,并在输出再次可用时继续读取文件。当Filebeat运行时,每个输入的状态信息也保存在内存中。当Filebeat重新启动时,将使用来自注册表文件的数据重新构建状态,Filebeat在最后一个已知位置继续每个harvester。

对于每个输入,Filebeat都会保留它找到的每个文件的状态。由于文件可以重命名或移动,文件名和路径不足以标识文件。对于每个文件,Filebeat存储唯一的标识符,以检测文件是否以前被捕获。

如何保证至少一次数据消费

因为它将每个事件的传递状态存储在注册表文件中。在已定义的输出被阻止且未确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出确认已接收到事件为止。如果Filebeat在发送事件的过程中关闭,它不会等待输出确认所有事件后再关闭。当Filebeat重新启动时,将再次将Filebeat关闭前未确认的所有事件发送到输出。这样可以确保每个事件至少发送一次,但最终可能会有重复的事件发送到输出。通过设置shutdown_timeout选项,可以将Filebeat配置为在关机前等待特定时间。

安装

filebeat提供多种部署模式:

  • rpm包
  • docker
  • kubernetes

本次实验采用rpm包的方式进行。

环境描述

主机名 ip地址 系统环境 系统版本 内核版本
test1 192.168.100.10 cpu:x4 mem:8GB filesystem:50GB CentOS 7.9.2009 3.10.0-1160.el7.x86_64

本地之前已经安装了nginx服务,后面拿该服务作为用例测试。

因本次使用6.8.x版本filebeat进行实验,涉及到的配置可能与高版本有差异。

下载软件包

登录官网地址下载对应版本软件包

本地解压并安装

1
2
3
4
5
6
[root@test1 ~]# ls
anaconda-ks.cfg filebeat-6.8.8-x86_64.rpm
[root@test1 ~]# rpm -iv filebeat-6.8.8-x86_64.rpm
警告:filebeat-6.8.8-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
软件包准备中...
filebeat-6.8.8-1.x86_64

配置filebeat

默认的配置文件在/etc/filebeat/filebeat.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@test1 ~]# rpm -qc filebeat
/etc/filebeat/filebeat.yml
/etc/filebeat/modules.d/apache2.yml.disabled
/etc/filebeat/modules.d/auditd.yml.disabled
/etc/filebeat/modules.d/elasticsearch.yml.disabled
/etc/filebeat/modules.d/haproxy.yml.disabled
/etc/filebeat/modules.d/icinga.yml.disabled
/etc/filebeat/modules.d/iis.yml.disabled
/etc/filebeat/modules.d/iptables.yml.disabled
/etc/filebeat/modules.d/kafka.yml.disabled
/etc/filebeat/modules.d/kibana.yml.disabled
/etc/filebeat/modules.d/logstash.yml.disabled
/etc/filebeat/modules.d/mongodb.yml.disabled
/etc/filebeat/modules.d/mysql.yml.disabled
/etc/filebeat/modules.d/nginx.yml.disabled
/etc/filebeat/modules.d/osquery.yml.disabled
/etc/filebeat/modules.d/postgresql.yml.disabled
/etc/filebeat/modules.d/redis.yml.disabled
/etc/filebeat/modules.d/suricata.yml.disabled
/etc/filebeat/modules.d/system.yml.disabled
/etc/filebeat/modules.d/traefik.yml.disabled

配置示例文件:/etc/filebeat/filebeat.reference.yml(包含所有未过时的配置项)

官方的配置介绍

输入与输出配置

filebeat 支持的input(输出)有以下几种:

filebeat 支持的output(输出)有以下几种:

其中常用的输入是log,输出是es,本次不搭建es了,输出类型选择file。

下面是对log组件的官方配置项介绍进行简要解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
paths:                      #指定要监控的日志,目前按照Go语言的glob函数处理。没有对配置目录做递归处理,比如配置的如果是:
- /var/log/* /*.log,则只会去/var/log目录的所有子目录中寻找以".log"结尾的文件,而不会寻找/var/log目录下以".log"结尾的文件。
recursive_glob.enabled: #启用全局递归模式,默认是开启的,例如/foo/**包括/foo, /foo/*, /foo/*/*,如果启用,它将单个**扩展为一个8级深度*模式。
encoding: #指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的
exclude_lines: ['^DBG'] #不包含匹配正则的行,如果还指定了multiline,则每个多行消息在被exclude_lines过滤之前被合并成一行。
include_lines: ['^ERR', '^WARN'] #包含匹配正则的行,如果还指定了multiline,则每个多行消息在被include_lines过滤之前被合并成一行。
harvester_buffer_size: 16384 #每个harvester在获取文件时使用的缓冲区的字节大小
max_bytes: 10485760 #单个日志消息可以拥有的最大字节数。max_bytes之后的所有字节都被丢弃而不发送。默认值为10MB (10485760)
exclude_files: ['\.gz$'] #用于匹配希望Filebeat忽略的文件的正则表达式列表
ingore_older: 0 #默认为0,表示禁用,可以配置2h,2m等,注意ignore_older必须大于close_inactive的值.表示忽略超过设置值未更新的文件或者文件从来没有被harvester收集
close_* #close_ *配置选项用于在特定标准或时间之后关闭harvester。 关闭harvester意味着关闭文件处理程序。如果在harvester关闭后文件被更新,则在scan_frequency过后,文件将被重新拾取。 但是,如果在harvester关闭时移动或删除文件,Filebeat将无法再次接收文件,并且harvester未读取的任何数据都将丢失。
close_inactive #启动选项时,如果在指定时间没有被读取,将关闭文件句柄,读取的最后一条日志定义为下一次读取的起始点,而不是基于文件的修改时间,如果关闭的文件发生变化,一个新的harverster将在scan_frequency运行后被启动,建议至少设置一个大于读取日志频率的值,配置多个prospector来实现针对不同更新速度的日志文件,使用内部时间戳机制,来反映记录日志的读取,每次读取到最后一行日志时开始倒计时使用,2h 5m 来表示。
close_rename #当选项启动,如果文件被重命名和移动,filebeat关闭文件的处理读取
close_removed #该选项默认是启动的,Filebeat会在文件被移除时关闭harvester。通常,只有在close_inactive指定的时间段内,文件才应该被删除。然而,如果一个文件被提前删除,而没有启用close_removed, Filebeat会保持文件打开,以确保收割器已经完成。
close_eof #适合只写一次日志的文件,然后filebeat关闭文件的处理读取
close_timeout #当选项启动时,filebeat会给每个harvester设置预定义时间,不管这个文件是否被读取,达到设定时间后,将被关闭,close_timeout不能等于ignore_older,会导致文件更新时,不会被读取,如果output一直没有输出日志事件,这个timeout是不会被启动的,至少要要有一个事件发送,然后haverter将被关闭,设置0,表示不启动
clean_inactived #从注册表文件中删除先前收获的文件的状态,设置必须大于ignore_older+scan_frequency,以确保在文件仍在收集时没有删除任何状态,配置选项有助于减小注册表文件的大小,特别是如果每天都生成大量的新文件,此配置选项也可用于防止在Linux上重用inode的Filebeat问题
clean_removed #启动选项后,如果文件在磁盘上找不到,Filebeat将从注册表中清除这些文件。
scan_frequency #prospector检查指定用于收集的路径中的新文件的频率,默认10s
tail_files: #如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,而不是从文件开始处重新发送所有内容。
symlinks: #符号链接选项允许Filebeat除常规文件外,可以收集符号链接。收集符号链接时,即使报告了符号链接的路径,Filebeat也会打开并读取原始文件。
backoff: #backoff选项指定Filebeat如何积极地抓取新文件进行更新。默认1s,backoff选项定义Filebeat在达到EOF之后再次检查文件之间等待的时间。
max_backoff: #在达到EOF之后再次检查文件之前Filebeat等待的最长时间
backoff_factor: #指定backoff尝试等待时间几次,默认是2
harvester_limit: #harvester_limit选项限制一个prospector并行启动的harvester数量,直接影响文件打开数
multiline.pattern #必须匹配的regexp模式
multiline.negate #定义上面的模式匹配条件的动作是否定的,默认是false,假如模式匹配条件'^b',默认是false模式,表示讲按照模式匹配进行匹配 将不是以b开头的日志行进行合并,如果是true,表示将不以b开头的日志行进行合并
multiline.match #指定Filebeat如何将匹配行组合成事件,在之前或者之后,取决于上面所指定的negate
multiline.max_lines #可以组合成一个事件的最大行数,超过将丢弃,默认500
multiline.timeout #定义超时时间,如果开始一个新的事件在超时时间内没有发现匹配,也将发送日志,默认是5s
1
2
3
4
5
6
7
8
9
10
11
12
所有输入都支持以下配置选项:
enable: true #表示是该类型配置生效
max_procs #设置可以同时执行的最大CPU数。默认值为系统中可用的逻辑CPU的数量。
name #为该filebeat指定名字,默认为主机的hostname
tags #列表中添加标签,用于过滤,例如:tags: ["json"]
fields #可选字段,选择额外的字段进行输出可以是标量值,元组,字典等嵌套类型
默认在sub-dictionary位置
filebeat.inputs:
fields:
log_type: trace
namespace: default
fields_under_root #如果值为ture,那么fields存储在输出文档的顶级位置

file组件的配置项如下进行简要解释:

1
2
3
4
5
6
7
output.file:
enabled: true #启用输出
path: "tmp/filebeat" #生成文件的路径
filename: slions_nginx_fb #生成文件的名称
rotate_every_kb: 1000 #每个文件的最大大小,达到这个大小时,将轮转文件。
number_of_files: 3 #保留的文件个数
permissions: 0600 #创建文件时使用的权限。默认值是0600

配置文件

测试用例nginx服务的日志路径为/var/log/nginx

filebeat 配置文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
filebeat.inputs:
- type: log
enabled: true
fields:
log_se: slions
paths:
- /var/log/nginx/*.log #绝对路径
scan_frequency: 3s #检测频率
close_inactive: 1m #在指定时间没有被读取,将关闭文件句柄
close_timeout: 1h #harvester设置预定义关闭时间
clean_inactive: 48h #从注册表文件中删除先前收获的文件的状态
ignore_older: 46h #忽略超过设置值未更新的文件或者文件从来没有被harvester收集
max_bytes: 1000000 #单个日志消息可以拥有的最大字节数
encoding: utf-8 #文件编码
output.file:
enabled: true #启用输出
path: "tmp/filebeat" #生成文件的路径
filename: slions_nginx_fb #生成文件的名称
rotate_every_kb: 1000 #每个文件的最大大小,达到这个大小时,将轮转文件。
number_of_files: 3 #保留的文件个数
permissions: 0600 #创建文件时使用的权限。默认值是0600

查看当前/var/log/nginx目录

1
2
3
4
5
6
7
[root@test1 nginx]# ll /var/log/nginx/
总用量 28
-rw-r----- 1 root adm 106 12月 20 09:45 access.log
-rw-r----- 1 nginx adm 703 12月 7 14:38 access.log-20211207.gz
-rw-r----- 1 root adm 472 12月 17 14:32 access.log-20211218.gz
-rw-r----- 1 root adm 10875 12月 19 12:39 access.log-20211219
-rw-r-----. 1 root adm 0 12月 6 19:47 error.log

启动filebeat

查看通过rpm安装的filebeat默认的启动文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@test1 nginx]# systemctl cat filebeat.service --no-pager
# /usr/lib/systemd/system/filebeat.service
[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
Documentation=https://www.elastic.co/products/beats/filebeat
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat
Restart=always

[Install]
WantedBy=multi-user.target

启动服务

1
2
[root@test1 nginx]# systemctl start filebeat
[root@test1 nginx]# systemctl enable filebeat

编辑/var/log/nginx/access.log

1
2
3
[root@test1 nginx]# cat access.log
[192.168.100.10] - 我的老家就住在这个屯
[192.168.100.10] - 我是这个屯里土生土长的人

查看日志

观察日志输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2021-12-20T11:11:08.761+0800    INFO    instance/beat.go:611    Home path: [/usr/share/filebeat] Config path: [/etc/filebeat] Data path: [/var/lib/filebeat] Logs path: [/var/log/filebeat]
2021-12-20T11:11:08.762+0800 INFO instance/beat.go:618 Beat UUID: a9f23f5d-a653-418b-9563-dbd1ef658c0c
2021-12-20T11:11:08.763+0800 INFO [seccomp] seccomp/seccomp.go:116 Syscall filter successfully installed
2021-12-20T11:11:08.763+0800 INFO [beat] instance/beat.go:931 Beat info {"system_info": {"beat": {"path": {"config": "/etc/filebeat", "data": "/var/lib/filebeat", "home": "/usr/share/filebeat", "logs": "/var/log/filebeat"}, "type": "filebeat", "uuid": "a9f23f5d-a653-418b-9563-dbd1ef658c0c"}}}
2021-12-20T11:11:08.763+0800 INFO [beat] instance/beat.go:940 Build info {"system_info": {"build": {"commit": "ecd273d59ab89c70355504b89445563e9a987812", "libbeat": "6.8.8", "time": "2020-03-18T22:26:53.000Z", "version": "6.8.8"}}}
2021-12-20T11:11:08.763+0800 INFO [beat] instance/beat.go:943 Go runtime info {"system_info": {"go": {"os":"linux","arch":"amd64","max_procs":4,"version":"go1.10.8"}}}
2021-12-20T11:11:08.765+0800 INFO [beat] instance/beat.go:947 Host info {"system_info": {"host": {"architecture":"x86_64","boot_time":"2021-12-19T12:09:18+08:00","containerized":false,"name":"test1","ip":["127.0.0.1/8","::1/128","192.168.100.10/24","192.168.100.10/32","fe80::c386:ac85:34e8:af4c/64","172.17.0.1/16","172.18.0.1/16","fe80::42:cbff:fe39:a363/64","fe80::5028:e0ff:fe0e:66c/64","fe80::b8b1:54ff:fe2c:8485/64","fe80::38eb:d3ff:feed:c2f/64","fe80::90ec:66ff:fedb:fe9e/64","fe80::ac4f:9fff:fe22:13c3/64","fe80::6499:51ff:fe96:94ff/64","10.96.0.1/32","10.96.0.10/32","244.244.0.0/32","fe80::48ab:a9ff:fe87:a4fd/64","244.244.0.1/24","fe80::2c97:87ff:fe1b:58a1/64","fe80::6417:4aff:fe52:9e62/64","fe80::94ef:1ff:fe57:d967/64"],"kernel_version":"3.10.0-1160.el7.x86_64","mac":["00:0c:29:85:bf:35","02:42:69:f9:b2:45","02:42:cb:39:a3:63","52:28:e0:0e:06:6c","ba:b1:54:2c:84:85","3a:eb:d3:ed:0c:2f","92:ec:66:db:fe:9e","ae:4f:9f:22:13:c3","66:99:51:96:94:ff","b2:68:e8:ca:48:45","be:df:d2:f3:67:0b","4a:ab:a9:87:a4:fd","2e:97:87:1b:58:a1","66:17:4a:52:9e:62","96:ef:01:57:d9:67"],"os":{"family":"redhat","platform":"centos","name":"CentOS Linux","version":"7 (Core)","major":7,"minor":9,"patch":2009,"codename":"Core"},"timezone":"CST","timezone_offset_sec":28800,"id":"8666f48bd1b948818ebf5c08ddddcb2a"}}}
2021-12-20T11:11:08.766+0800 INFO [beat] instance/beat.go:976 Process info {"system_info": {"process": {"capabilities": {"inheritable":null,"permitted":["chown","dac_override","dac_read_search","fowner","fsetid","kill","setgid","setuid","setpcap","linux_immutable","net_bind_service","net_broadcast","net_admin","net_raw","ipc_lock","ipc_owner","sys_module","sys_rawio","sys_chroot","sys_ptrace","sys_pacct","sys_admin","sys_boot","sys_nice","sys_resource","sys_time","sys_tty_config","mknod","lease","audit_write","audit_control","setfcap","mac_override","mac_admin","syslog","wake_alarm","block_suspend"],"effective":["chown","dac_override","dac_read_search","fowner","fsetid","kill","setgid","setuid","setpcap","linux_immutable","net_bind_service","net_broadcast","net_admin","net_raw","ipc_lock","ipc_owner","sys_module","sys_rawio","sys_chroot","sys_ptrace","sys_pacct","sys_admin","sys_boot","sys_nice","sys_resource","sys_time","sys_tty_config","mknod","lease","audit_write","audit_control","setfcap","mac_override","mac_admin","syslog","wake_alarm","block_suspend"],"bounding":["chown","dac_override","dac_read_search","fowner","fsetid","kill","setgid","setuid","setpcap","linux_immutable","net_bind_service","net_broadcast","net_admin","net_raw","ipc_lock","ipc_owner","sys_module","sys_rawio","sys_chroot","sys_ptrace","sys_pacct","sys_admin","sys_boot","sys_nice","sys_resource","sys_time","sys_tty_config","mknod","lease","audit_write","audit_control","setfcap","mac_override","mac_admin","syslog","wake_alarm","block_suspend"],"ambient":null}, "cwd": "/", "exe": "/usr/share/filebeat/bin/filebeat", "name": "filebeat", "pid": 71667, "ppid": 1, "seccomp": {"mode":"filter","no_new_privs":true}, "start_time": "2021-12-20T11:11:08.640+0800"}}}
2021-12-20T11:11:08.766+0800 INFO instance/beat.go:280 Setup Beat: filebeat; Version: 6.8.8
2021-12-20T11:11:08.766+0800 INFO fileout/file.go:97 Initialized file output. path=tmp/filebeat/slions_nginx_fb max_size_bytes=1024000 max_backups=3 permissions=-rw-------
2021-12-20T11:11:08.766+0800 INFO [publisher] pipeline/module.go:110 Beat name: test1
2021-12-20T11:11:08.769+0800 INFO instance/beat.go:402 filebeat start running.
2021-12-20T11:11:08.769+0800 INFO registrar/registrar.go:97 No registry file found under: /var/lib/filebeat/registry. Creating a new registry file.
2021-12-20T11:11:08.769+0800 INFO [monitoring] log/log.go:117 Starting metrics logging every 30s
2021-12-20T11:11:08.772+0800 INFO registrar/registrar.go:134 Loading registrar data from /var/lib/filebeat/registry
2021-12-20T11:11:08.772+0800 INFO registrar/registrar.go:141 States Loaded from registrar: 0
2021-12-20T11:11:08.772+0800 WARN beater/filebeat.go:367 Filebeat is unable to load the Ingest Node pipelines for the configured modules because the Elasticsearch output is not configured/enabled. If you have already loaded the Ingest Node pipelines or are using Logstash pipelines, you can ignore this warning.
2021-12-20T11:11:08.772+0800 INFO crawler/crawler.go:72 Loading Inputs: 1
2021-12-20T11:11:08.772+0800 INFO log/input.go:148 Configured paths: [/var/log/nginx/*.log]
2021-12-20T11:11:08.772+0800 INFO input/input.go:114 Starting input of type: log; ID: 9032486846567354227
2021-12-20T11:11:08.772+0800 INFO crawler/crawler.go:106 Loading and starting Inputs completed. Enabled inputs: 1
2021-12-20T11:11:08.772+0800 INFO log/harvester.go:255 Harvester started for file: /var/log/nginx/access.log

查看filebeat文件

1
2
3
[root@test1 nginx]# cat /tmp/filebeat/slions_nginx_fb
{"@timestamp":"2021-12-20T03:11:08.772Z","@metadata":{"beat":"filebeat","type":"doc","version":"6.8.8"},"offset":0,"input":{"type":"log"},"host":{"name":"test1"},"message":"[192.168.100.10] - 我的老家就住在这个屯","source":"/var/log/nginx/access.log","log":{"file":{"path":"/var/log/nginx/access.log"}},"prospector":{"type":"log"},"fields":{"log_se":"slions"},"beat":{"name":"test1","hostname":"test1","version":"6.8.8"}}
{"@timestamp":"2021-12-20T03:11:08.773Z","@metadata":{"beat":"filebeat","type":"doc","version":"6.8.8"},"source":"/var/log/nginx/access.log","input":{"type":"log"},"fields":{"log_se":"slions"},"beat":{"name":"test1","hostname":"test1","version":"6.8.8"},"message":"[192.168.100.10] - 我是这个屯里土生土长的人","offset":50,"log":{"file":{"path":"/var/log/nginx/access.log"}},"prospector":{"type":"log"},"host":{"name":"test1"}}

收集到的文件内容放置在了message中。

查看注册表文件

从之前的filebeat日志中可知注册表文件为/var/lib/filebeat/registry

1
2
2021-12-20T11:11:08.769+0800    INFO    registrar/registrar.go:97       No registry file found under: /var/lib/filebeat/registry. Creating a new registry file.
2021-12-20T11:11:08.772+0800 INFO registrar/registrar.go:134 Loading registrar data from /var/lib/filebeat/registry

默认的路径是 ${path.data}/registry,可编辑配置文件中 filebeat.registry_file: registry对其修改。

配置registry_flush 来控制何时将注册表项写入磁盘(刷新)的超时值。当一个未写的更新超过这个值时,当一个未写的更新超过这个值时,它会触发对磁盘的写操作。默认是0,既每批事件成功发布后,注册表将被写入磁盘。

每收集到一个文件都会将相关信息记录到注册表中,其中通过inode定位文件,通过offset识别位置,通过timestamp记录时间戳。

1
2
[root@test1 nginx]# cat /var/lib/filebeat/registry
[{"source":"/var/log/nginx/access.log","offset":106,"timestamp":"2021-12-20T11:12:13.778841289+08:00","ttl":172800000000000,"type":"log","meta":null,"FileStateOS":{"inode":72139638,"device":64768}}]

注册表文件仅在刷新新事件时更新,而不是在预定义的时间段内更新。这意味着,在TTL过期的情况下,只有在处理新事件时,这些状态才会被删除。

Debug

默认情况下,Filebeat将其所有输出发送到syslog。在前台运行Filebeat时,使用-e命令行标志将输出重定向到标准错误。

1
filebeat -e

通过指定-c标志来使用不同的配置文件。

1
filebeat -e -c myfilebeatconfig.yml

启用一个或多个debug选择器,可以增加调试消息的冗长程度。例如,要查看与发布者相关的消息:

1
filebeat -e -d "publisher"

查看所有的调试输出,使用*:

1
filebeat -e -d "*"
CATALOG
  1. 1. Filebeat
    1. 1.1. 工作流程
    2. 1.2. 实现原理
      1. 1.2.1. 组件构成
      2. 1.2.2. 如何保存文件的状态
      3. 1.2.3. 如何保证至少一次数据消费
  2. 2. 安装
    1. 2.1. 环境描述
    2. 2.2. 下载软件包
    3. 2.3. 本地解压并安装
  3. 3. 配置filebeat
    1. 3.1. 输入与输出配置
    2. 3.2. 配置文件
  4. 4. 启动filebeat
    1. 4.1. 启动服务
    2. 4.2. 查看日志
    3. 4.3. 查看filebeat文件
    4. 4.4. 查看注册表文件
  5. 5. Debug