Fluent Bit 日志合并正则表达式(上)

#作者:张桐瑞

前言

在处理日志时,Fluent Bit 使用正则表达式来解析和合并日志条目。针对error日志中部分错误日志不合并的问题,我们更新了正则表达式,并进行了测试以验证不同正则表达式的性能表现。以下是更新前后的配置:

[MULTILINE_PARSER]
    name          multiline-regex-go
    type          regex
    flush_timeout 1000
    rule      "start_state"   "/(\d+\:\d+\:\d+)/"  "cont"
    rule      "cont"          "/^\s+at.*|^[a-zA-Z]+.*/"              "cont"
[MULTILINE_PARSER]
    name          multiline-regex-new
    type          regex
    flush_timeout 1000
    rule      "start_state"   "/(\d{2}:\d{2}:\d{2})/"  "cont"
    rule      "cont"          "/^(?!.*(\d{2}:\d{2}:\d{2})).*$/"  "cont"

为了彻底解决 Fluent Bit 1.9.4 版本中 emitter_mem_buf_limit 内存溢出问题,官方社区在 3.0.2 版本进行了修复。详细修复内容请参考该修复 PR:GitHub PR #8473。因此,本章节也将测试 3.0.2 版本的性能指标。

测试方法

测试方案与流程

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

在 FILTER.multiline 中使用正则表达式 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
[FILTER]
    Name                  multiline
    Match                 *
    multiline.key_content log
    multiline.parser      multiline-regex-go
    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-3.0.2 -c etc/3.3.1-fluent.conf  &> logs/fluent-bit.log &

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

在 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
[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-3.0.2 -c etc/3.3.2-fluent.conf  &> logs/fluent-bit.log &

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

在 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
[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-3.0.2 -c etc/3.3.3-fluent.conf  &> logs/fluent-bit.log &

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

在 FILTER.multiline 中使用正则表达式 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 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 
[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.4-fluent.conf  &> logs/fluent-bit.log &

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

在 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 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 
[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.5-fluent.conf  &> logs/fluent-bit.log &

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

在 FILTER.multiline 中使用正则表达式 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
[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.6-fluent.conf  &> logs/fluent-bit.log &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值