原始iLogtail使用boost::regex_match进行行首正则匹配,该函数的特性是对整个输入字符串进行全量匹配。当用户配置行首正则为cnt.*时,.*部分会匹配日志行中cnt之后的所有字符。
通过性能测试发现,regex_match的耗时随输入字符串长度线性增长。例如一条1072字符的日志行,即使行首只有3个字符cnt需要判断,regex_match仍然会扫描完整行所有1072个字符。在多行日志场景中,每一行(包括异常堆栈中的每一行)都需要进行行首正则匹配判断,长日志行会显著拖慢整体采集速度。这就是为什么在高吞吐场景下(日志行较长时),原始方案的采集速率仅有90MB/s。




