Logstash S3输入插件正则表达式前缀配置问题咨询
解决Logstash S3输入插件无法用正则指定文件前缀的问题
首先你说得没错,Logstash的S3输入插件确实不支持在prefix参数中使用正则表达式,prefix只接受固定前缀字符串,用来缩小S3对象的扫描范围。针对你的场景,我们可以用插件自带的include_pattern参数来实现正则匹配筛选,完美解决需求。
具体配置方案
你的目标是匹配所有logs/[8位日期]/app1/app1.log格式的文件,对应的Ruby正则可以写成^logs/\d{8}/app1/app1\.log$。把这个正则配置到include_pattern中,同时保留prefix为logs/来缩小扫描范围(提升效率,避免遍历整个桶的无关对象),完整配置示例如下:
s3 { access_key_id => "ABDCWERJKPOKJVB" secret_access_key => "4356ytghnfvgbh09oiujsedfvgh0piod" region => "as-sfg-2" bucket => "new-logs" prefix => "logs/" # 先限定前缀为logs/,减少需要扫描的对象数量 include_pattern => "^logs/\d{8}/app1/app1\.log$" # 正则匹配目标文件路径 }
关键细节说明
prefix的作用是先过滤出以logs/开头的所有对象,让插件只扫描这部分内容,避免浪费资源在无关文件上。include_pattern采用Ruby正则语法,注意转义特殊字符(比如.要写成\.)。这里的\d{8}专门匹配你示例中的8位数字日期格式,刚好覆盖20180304这类日期目录。- 如果后续需要排除某些特定文件,还可以配合
exclude_pattern参数使用,语法和include_pattern完全一致。
灵活扩展提示
如果之后需要匹配app1的所有日志文件(不只是app1.log),只需要调整正则即可,比如改成^logs/\d{8}/app1/.*\.log$就能匹配app1目录下所有以.log结尾的文件。
内容的提问来源于stack exchange,提问作者khaja mohiddin
相关产品推荐
相关产品推荐

