基于性能瓶颈分析,团队确定的关键优化方向是实现部分匹配——只对日志行首进行匹配,而不是整行。
为避免重复造轮子,调研后发现 Boost 库提供了替代方案 boost::regex_search 函数,通过适当配置即可精确满足需求。优化后的关键改进点是:
- 使用 boost::regex_search 替代 boost::regex_match。
- 添加 boost::match_continuous 标志,确保只匹配前缀,如果字符串的开头子串满足正则表达式就返回成功。
这种实现方式允许精确控制匹配过程,只关注日志行首,正是多行日志处理所需要的。测试发现新方案的执行时间基本保持稳定,不受日志长度影响。
实际采集效果显著:优化后的多行采集速度从 98MB/s 提升到 350MB/s,性能提升幅度 257%(约 3.57 倍),已接近单行采集的 425MB/s(相对性能比 82.35%),且在保持单线程的情况下实现了显著性能提升。
为了让客户不改动采集配置,团队还设计了兼容性策略:用户配置的行首正则通常包含 .* 后缀,iLogtail 会自动分析正则表达式,检测到 .* 后缀存在时动态调整移除它。客户只需升级 iLogtail 到 2.1 版本及以上,就能享受该多行采集性能优化。




