Fluent Bit 日志合并正则表达式(下) - 实践

#作者:张桐瑞

7.使用 Fluent Bit 1.9.4 版本,仅配置 multiline -> modify 插件。

在 FILTER.multiline 中使用正则表达式 new 进行压力测试。

测试配置文件

[SERVICE]
Flush 1
Parsers_File parsers.conf
HTTP_Server  On
HTTP_Listen  0.0.0.0
HTTP_PORT    3194
[INPUT]
Name         tail
Tag          regex-old-1.9.4
DB           ./db/regex-old-1.9.4.db
Read_from_Head true
Path  /var/log/pods/logtest/*.log
Path_Key  pod_log_path
[FILTER]
Name                  multiline
Match                 *
multiline.key_content log
multiline.parser      multiline-regex-new
emitter_mem_buf_limit 2048M
[FILTER]
Name modify
Match *
Add paas_log_belong         user
Add paas_log_type           middleware
Add paas_collection_type    userfile
Add paas_account_id         123456789
Add paas_region_id          lftst
Add paas_product_id         ccc
Add paas_instance_name      test10
Add paas_host_ip            127.0.0.1
Add paas_manager_ip         127.0.0.1
Add pod_namespace           default
Add pod_name                test-0
Add pod_container_name      test
[OUTPUT]
Name file
Match *
Path /vdata/logtest

启动命令

touch /var/log/pods/logtest/error.log
./bin/fluent-bit-1.9.4 -c etc/3.3.7-fluent.conf  &> logs/fluent-bit.log &

8.使用 Fluent Bit 1.9.4 版本,仅配置 multiline -> modify 插件。

在 INPUT.tail 中使用正则表达式 old 进行压力测试。
测试配置文件

[SERVICE]
Flush 1
Parsers_File parsers.conf
HTTP_Server  On
HTTP_Listen  0.0.0.0
HTTP_PORT    3194
[INPUT]
Name         tail
Tag          regex-old-1.9.4
DB           ./db/regex-old-1.9.4.db
Read_from_Head true
Path  /var/log/pods/logtest/*.log
Path_Key  pod_log_path
multiline.parser      multiline-regex-go
[FILTER]
Name modify
Match *
Add paas_log_belong         user
Add paas_log_type           middleware
Add paas_collection_type    userfile
Add paas_account_id         123456789
Add paas_region_id          lftst
Add paas_product_id         ccc
Add paas_instance_name      test10
Add paas_host_ip            127.0.0.1
Add paas_manager_ip         127.0.0.1
Add pod_namespace           default
Add pod_name                test-0
Add pod_container_name      test
[OUTPUT]
Name file
Match *
Path /vdata/logtest

启动命令

touch /var/log/pods/logtest/error.log
./bin/fluent-bit-1.9.4 -c etc/3.3.8-fluent.conf  &> logs/fluent-bit.log &

能识别到文件,但是不采集

[root@cdp-10-191-193-8 fluentbit]# cat logs/fluent-bit.log
Fluent Bit v1.9.4
* Copyright (C) 2015-2022 The Fluent Bit Authors
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io
​
[2024/07/08 17:13:06] [ info] [fluent bit] version=1.9.4, commit=08de43e474, pid=2373901
[2024/07/08 17:13:06] [ info] [storage] version=1.2.0, type=memory-only, sync=normal, checksum=disabled, max_chunks_up=128
[2024/07/08 17:13:06] [ info] [cmetrics] version=0.3.1
[2024/07/08 17:13:06] [ info] [input:tail:tail.0] multiline core started
[2024/07/08 17:13:06] [ info] [output:file:file.0] worker #0 started
[2024/07/08 17:13:06] [ info] [http_server] listen iface=0.0.0.0 tcp_port=3194
[2024/07/08 17:13:06] [ info] [sp] stream processor started
[2024/07/08 17:13:06] [ info] [input:tail:tail.0] inotify_fs_add(): inode=1074791925 watch_fd=1 name=/var/log/pods/logtest/error.log

采集的日志文件有变化

[root@cdp-10-191-193-8 fluentbit]# ls -l /var/log/pods/logtest/error.log
-rw-r--r-- 1 root root 11941696512  7月  8 17:20 /var/log/pods/logtest/error.log
[root@cdp-10-191-193-8 fluentbit]# ls -l /var/log/pods/logtest/error.log
-rw-r--r-- 1 root root 11983160736  7月  8 17:20 /var/log/pods/logtest/error.log
[root@cdp-10-191-193-8 fluentbit]# ls -l /var/log/pods/logtest/error.log
-rw-r--r-- 1 root root 12107553408  7月  8 17:20 /var/log/pods/logtest/error.log

output指定的目录无任何内容

[root@cdp-10-191-193-8 fluentbit]# ls -l /vdata/logtest/
总用量 0
[root@cdp-10-191-193-8 fluentbit]#

也无法采集到监控

9.使用 Fluent Bit 1.9.4 版本,仅配置 multiline -> modify 插件。

在 INPUT.tail 中使用正则表达式 new 进行压力测试。
测试配置文件

[SERVICE]
Flush 1
Parsers_File parsers.conf
HTTP_Server  On
HTTP_Listen  0.0.0.0
HTTP_PORT    3194
[INPUT]
Name         tail
Tag          regex-old-1.9.4
DB           ./db/regex-old-1.9.4.db
Read_from_Head true
Path  /var/log/pods/logtest/*.log
Path_Key  pod_log_path
multiline.parser      multiline-regex-new
[FILTER]
Name modify
Match *
Add paas_log_belong         user
Add paas_log_type           middleware
Add paas_collection_type    userfile
Add paas_account_id         123456789
Add paas_region_id          lftst
Add paas_product_id         ccc
Add paas_instance_name      test10
Add paas_host_ip            127.0.0.1
Add paas_manager_ip         127.0.0.1
Add pod_namespace           default
Add pod_name                test-0
Add pod_container_name      test
[OUTPUT]
Name file
Match *
Path /vdata/logtest

启动命令

touch /var/log/pods/logtest/error.log
./bin/fluent-bit-1.9.4 -c etc/3.3.9-fluent.conf  &> logs/fluent-bit.log &

10.使用 Fluent Bit 3.0.2 版本,仅配置 multiline 插件。

在 INPUT.tail 中使用正则表达式 old 进行压力测试。
测试配置文件

[SERVICE]
Flush 1
Parsers_File parsers.conf
HTTP_Server  On
HTTP_Listen  0.0.0.0
HTTP_PORT    3302
[INPUT]
Name         tail
Tag          regex-fluent
DB           ./db/regex-fluent.db
Read_from_Head true
Path  /var/log/pods/logtest/*.log
Path_Key  pod_log_path
multiline.parser      multiline-regex-go
[OUTPUT]
Name file
Match *
Path /vdata/logtest

启动命令

touch /var/log/pods/logtest/error.log
./bin/fluent-bit-3.0.2 -c etc/3.3.10-fluent.conf  &> logs/fluent-bit.log &

11.使用 Fluent Bit 3.0.2 版本,仅配置 multiline 插件。

在 INPUT.tail 中使用正则表达式 new 进行压力测试。
测试配置文件

[SERVICE]
Flush 1
Parsers_File parsers.conf
HTTP_Server  On
HTTP_Listen  0.0.0.0
HTTP_PORT    3302
[INPUT]
Name         tail
Tag          regex-fluent
DB           ./db/regex-fluent.db
Read_from_Head true
Path  /var/log/pods/logtest/*.log
Path_Key  pod_log_path
multiline.parser      multiline-regex-new
[OUTPUT]
Name file
Match *
Path /vdata/logtest

启动命令

touch /var/log/pods/logtest/error.log
./bin/fluent-bit-3.0.2 -c etc/3.3.11-fluent.conf  &> logs/fluent-bit.log &

12.使用 Fluent Bit 1.9.4 版本,仅配置 multiline 插件。

在 FILTER.multilinel 中使用正则表达式 old 进行压力测试。
测试配置文件

[SERVICE]
Flush 1
Parsers_File parsers.conf
HTTP_Server  On
HTTP_Listen  0.0.0.0
HTTP_PORT    3194
[INPUT]
Name         tail
Tag          regex-old-1.9.4
DB           ./db/regex-old-1.9.4.db
Read_from_Head true
Path  /var/log/pods/logtest/*.log
Path_Key  pod_log_path
[FILTER]
Name                  multiline
Match                 *
multiline.key_content log
multiline.parser      multiline-regex-go
emitter_mem_buf_limit 2048M
[OUTPUT]
Name file
Match *
Path /vdata/logtest

启动命令

touch /var/log/pods/logtest/error.log
./bin/fluent-bit-1.9.4 -c etc/3.3.12-fluent.conf  &> logs/fluent-bit.log &

13.使用 Fluent Bit 1.9.4 版本,仅配置 multiline 插件。

在 FILTER.multilinel 中使用正则表达式 new 进行压力测试。
测试配置文件

[SERVICE]
Flush 1
Parsers_File parsers.conf
HTTP_Server  On
HTTP_Listen  0.0.0.0
HTTP_PORT    3194
[INPUT]
Name         tail
Tag          regex-old-1.9.4
DB           ./db/regex-old-1.9.4.db
Read_from_Head true
Path  /var/log/pods/logtest/*.log
Path_Key  pod_log_path
[FILTER]
Name                  multiline
Match                 *
multiline.key_content log
multiline.parser      multiline-regex-new
emitter_mem_buf_limit 2048M
[OUTPUT]
Name file
Match *
Path /vdata/logtest

启动命令

touch /var/log/pods/logtest/error.log
./bin/fluent-bit-1.9.4 -c etc/3.3.13-fluent.conf  &> logs/fluent-bit.log &

测试结论

本次实验所获得的所有数据,均通过实际测试得出,具体为在每秒内向采集文件写入40M的数据量:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试结果

在3.0.2版本的Fluent Bit中,无法在FILTER.multiline中使用正则表达式进行日志处理,导致无法采集到输入监控数据,并且输出性能也表现不佳。
在1.9.4版本的Fluent Bit中,不能在INPUT.tail中使用multiline进行日志处理,无法采集到输入和输出的监控数据,同时输出功能无法正常工作。

使用新版本的正则表达式 multiline-regex-new 在性能上稍逊于老版本的 multiline-regex-go,因为新版本的正则表达式修复了老版本在日志合并过程中出现的问题,确保了更准确的日志合并。

下降百分比计算方法如下:

下降百分比 = ((老版本速度 - 新版本速度) / 老版本速度) * 100%

1.9.4 版本使用 modify -> multiline 数据流下降:14%
((11.2M - 9.6M) / 11.2M) * 100% = 14%

1.9.4 版本使用 multiline -> modify 数据流下降:42.5%
((40M - 23M) / 40M) * 100% = 42.5%

3.0.2 版本使用 multiline -> modify 数据流下降:44%
((27.6M - 15.2M) / 27.6M) * 100% = 44%

posted on 2025-08-13 12:12  ljbguanli  阅读(11)  评论(0)    收藏  举报