如何为Fluent-Bit CRI解析器添加匹配任意位置日志级别字段的正则?
解决方案
要在CRI日志中提取任意位置的level字段,你需要调整正则表达式,在捕获完整message的同时,单独捕获其中的INFO/WARNING/ERROR关键字。以下是可行的修改方案:
修改后的正则表达式
^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*?(?<level>INFO|WARNING|ERROR).*)$
正则说明
- 保留原有的
time、stream、logtag字段捕获逻辑 - 在
message的捕获组中,通过(?<level>INFO|WARNING|ERROR)命名捕获组提取级别关键字 .*?是非贪婪匹配,确保能找到第一个出现的级别关键字,后续的.*保留message的剩余内容
Fluent-Bit配置示例
在你的CRI解析器配置块中,替换正则并确保字段映射正确:
[PARSER] Name cri Format regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*?(?<level>INFO|WARNING|ERROR).*)$ Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L%z
补充说明
- 如果日志中可能存在多个级别关键字,这个正则会提取第一个出现的;若需要提取最后一个,可将正则调整为
^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*(?<level>INFO|WARNING|ERROR).*)$(去掉?改为贪婪匹配) - 测试时可以用Fluent-Bit的
-v参数运行,查看字段提取情况,确认level字段是否正确生成
内容的提问来源于stack exchange,提问作者luke33
相关产品推荐
相关产品推荐

