Fluent-Bit:如何提取文件名部分内容并追加到CloudWatch日志流名称中
Fluent-Bit:如何提取文件名部分内容并追加到CloudWatch日志流名称中
看起来你已经把Fluent-Bit的基础配置搭得差不多了,就差最后一步把文件名里的client.test提取到CloudWatch的日志流名称里对吧?我来帮你把现有配置理清楚,确保它能正常工作~
你的核心思路完全没问题:用rewrite_tag过滤器从文件路径里提取目标片段,再通过TAG的分段值来给日志流名称赋值。我把完整可运行的配置整理出来,关键部分都加了注释:
[INPUT] Name tail Path /var/log/nginx/*access.log Tag nginx.access Path_Key filepath # 这步是前提,让后续过滤器能拿到日志文件的完整路径 [FILTER] Name rewrite_tag Match nginx.access # 正则匹配文件路径,精准捕获`-access.log`前面的名称片段 Rule $filepath ^/var/log/nginx/(.*)-access.log$ nginx.access.$1 true Emitter_Name re_emitted # 给重发的事件指定唯一标识,避免重复处理冲突 [OUTPUT] Name cloudwatch_logs Match nginx.access.* # 匹配所有重写后的TAG region eu-west-2 log_group_name /aws/ec2/access-logs log_stream_name fluent-bit-${TAG[2]} # TAG被按`.`分割为数组,取第三段(索引从0开始)就是我们要的client.test auto_create_group true # 自动创建不存在的日志组或日志流 log_key log # 指定要发送的日志内容字段,根据实际情况调整
关键细节说明:
- 正则规则
^/var/log/nginx/(.*)-access.log$会精准匹配你的日志路径,把client.test这类名称片段捕获到$1变量里,最终生成新的TAGnginx.access.client.test。 log_stream_name中的${TAG[2]}:Fluent-Bit会把TAG按.分割成数组,nginx.access.client.test的数组元素依次是[0]nginx、[1]access、[2]client.test,刚好取到我们需要的文件名部分。- 务必保证INPUT段的
Path_Key filepath配置正确,否则rewrite_tag过滤器拿不到$filepath变量,整个提取规则就会失效。
如果之后你的日志文件名格式有调整,只需要修改rewrite_tag里的正则捕获组就能适配,现在这个配置应该就能让CloudWatch的日志流显示成fluent-bit-client.test啦~
备注:内容来源于stack exchange,提问作者user2500414
相关产品推荐
相关产品推荐

