Logstash从6.6.2升级至7.13.3后grok正则语法报错如何解决
问题根因
报错是Logstash 7.x依赖的更高版本JRuby对正则语法校验更严格导致的:
原有正则中的字符类[\w-.]里,连字符-放在\w和.之间,会被解析为「匹配\w到.之间字符」的范围运算符,而这个范围在ASCII码中是无效的,因此抛出RegexpError: unmatched range specifier in char-class错误。
修改方案
要保留原有匹配逻辑(匹配字母、数字、下划线、减号、点号),只需要调整连字符在字符类中的位置,避免被识别为范围运算符即可,推荐将连字符移到字符类的最末尾,可读性最高且不会改变匹配规则。
修改后的配置代码
grok { match => { "message_string" => "(?<ucd_environment_name1>(?<=release_ucd_environment_name:)[\w.-]*)" } }
其余同类报错的配置行,只要把字符类中放在中间的-移到字符类的首尾位置,就可以同步修复问题,原有匹配逻辑完全不变。
内容的提问来源于stack exchange,提问作者Tom Smith
相关产品推荐
相关产品推荐

