Fluent Bit 日志合并正则表达式(上)
#作者:张桐瑞
文章目录
- 前言
- 测试方法
- 1.使用 Fluent Bit 3.0.2 版本,仅配置 multiline -> modify 插件。
- 2.使用 Fluent Bit 3.0.2 版本,仅配置 multiline -> modify 插件。
- 3.使用 Fluent Bit 3.0.2 版本,仅配置 multiline -> modify 插件。
- 4.使用 Fluent Bit 1.9.4 版本,仅配置 modify -> multiline 插件。
- 5.使用 Fluent Bit 1.9.4 版本,仅配置 modify -> multiline 插件。
- 6.使用 Fluent Bit 1.9.4 版本,仅配置 multiline -> modify 插件。
前言
在处理日志时,Fluent Bit 使用正则表达式来解析和合并日志条目。针对error日志中部分错误日志不合并的问题,我们更新了正则表达式,并进行了测试以验证不同正则表达式的性能表现。以下是更新前后的配置:
[MULTILINE_PARSER]name multiline-regex-gotype regexflush_timeout 1000rule "start_state" "/(\d+\:\d+\:\d+)/" "cont"rule "cont" "/^\s+at.*|^[a-zA-Z]+.*/" "cont"
[MULTILINE_PARSER]name multiline-regex-newtype regexflush_timeout 1000rule "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 1Parsers_File parsers.confHTTP_Server OnHTTP_Listen 0.0.0.0HTTP_PORT 3302
[INPUT]Name tailTag regex-fluentDB ./db/regex-fluent.dbRead_from_Head truePath /var/log/pods/logtest/*.logPath_Key pod_log_path
[FILTER]Name multilineMatch *multiline.key_content logmultiline.parser multiline-regex-goemitter_mem_buf_limit 2048M
[FILTER]Name modifyMatch *Add paas_log_belong userAdd paas_log_type middlewareAdd paas_collection_type userfileAdd paas_account_id 123456789Add paas_region_id lftstAdd paas_product_id cccAdd paas_instance_name test10Add paas_host_ip 127.0.0.1Add paas_manager_ip 127.0.0.1Add pod_namespace defaultAdd pod_name test-0Add pod_container_name test
[OUTPUT]Name fileMatch *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 1Parsers_File parsers.confHTTP_Server OnHTTP_Listen 0.0.0.0HTTP_PORT 3302
[INPUT]Name tailTag regex-fluentDB ./db/regex-fluent.dbRead_from_Head truePath /var/log/pods/logtest/*.logPath_Key pod_log_pathmultiline.parser multiline-regex-go
[FILTER]Name modifyMatch *Add paas_log_belong userAdd paas_log_type middlewareAdd paas_collection_type userfileAdd paas_account_id 123456789Add paas_region_id lftstAdd paas_product_id cccAdd paas_instance_name test10Add paas_host_ip 127.0.0.1Add paas_manager_ip 127.0.0.1Add pod_namespace defaultAdd pod_name test-0Add pod_container_name test
[OUTPUT]Name fileMatch *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 1Parsers_File parsers.confHTTP_Server OnHTTP_Listen 0.0.0.0HTTP_PORT 3302
[INPUT]Name tailTag regex-fluentDB ./db/regex-fluent.dbRead_from_Head truePath /var/log/pods/logtest/*.logPath_Key pod_log_pathmultiline.parser multiline-regex-new
[FILTER]Name modifyMatch *Add paas_log_belong userAdd paas_log_type middlewareAdd paas_collection_type userfileAdd paas_account_id 123456789Add paas_region_id lftstAdd paas_product_id cccAdd paas_instance_name test10Add paas_host_ip 127.0.0.1Add paas_manager_ip 127.0.0.1Add pod_namespace defaultAdd pod_name test-0Add pod_container_name test
[OUTPUT]Name fileMatch *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 1Parsers_File parsers.confHTTP_Server OnHTTP_Listen 0.0.0.0HTTP_PORT 3194
[INPUT]Name tailTag regex-old-1.9.4DB ./db/regex-old-1.9.4.dbRead_from_Head truePath /var/log/pods/logtest/*.logPath_Key pod_log_path
[FILTER]Name modifyMatch *Add paas_log_belong userAdd paas_log_type middlewareAdd paas_collection_type userfileAdd paas_account_id 123456789Add paas_region_id lftstAdd paas_product_id cccAdd paas_instance_name test10Add paas_host_ip 127.0.0.1Add paas_manager_ip 127.0.0.1Add pod_namespace defaultAdd pod_name test-0Add pod_container_name test
[FILTER]Name multilineMatch *multiline.key_content logmultiline.parser multiline-regex-goemitter_mem_buf_limit 2048M
[OUTPUT]Name fileMatch *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 1Parsers_File parsers.confHTTP_Server OnHTTP_Listen 0.0.0.0HTTP_PORT 3194
[INPUT]Name tailTag regex-old-1.9.4DB ./db/regex-old-1.9.4.dbRead_from_Head truePath /var/log/pods/logtest/*.logPath_Key pod_log_path
[FILTER]Name modifyMatch *Add paas_log_belong userAdd paas_log_type middlewareAdd paas_collection_type userfileAdd paas_account_id 123456789Add paas_region_id lftstAdd paas_product_id cccAdd paas_instance_name test10Add paas_host_ip 127.0.0.1Add paas_manager_ip 127.0.0.1Add pod_namespace defaultAdd pod_name test-0Add pod_container_name test
[FILTER]Name multilineMatch *multiline.key_content logmultiline.parser multiline-regex-newemitter_mem_buf_limit 2048M
[OUTPUT]Name fileMatch *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 1Parsers_File parsers.confHTTP_Server OnHTTP_Listen 0.0.0.0HTTP_PORT 3194
[INPUT]Name tailTag regex-old-1.9.4DB ./db/regex-old-1.9.4.dbRead_from_Head truePath /var/log/pods/logtest/*.logPath_Key pod_log_path
[FILTER]Name multilineMatch *multiline.key_content logmultiline.parser multiline-regex-goemitter_mem_buf_limit 2048M
[FILTER]Name modifyMatch *Add paas_log_belong userAdd paas_log_type middlewareAdd paas_collection_type userfileAdd paas_account_id 123456789Add paas_region_id lftstAdd paas_product_id cccAdd paas_instance_name test10Add paas_host_ip 127.0.0.1Add paas_manager_ip 127.0.0.1Add pod_namespace defaultAdd pod_name test-0Add pod_container_name test
[OUTPUT]Name fileMatch *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 &