读取名称中包含日期的日志文件时出现问题

Issue in reading log file that contains date in it's name

我有 2 个 linux 盒子设置,其中 1 个盒子包含一个组件,该组件生成日志并在其中安装 logstash 以传输日志。在其他盒子里,我有 redis elasticsearch 和 logstash。这里 logstash 将充当 logstash 索引器来查找数据。

现在我的问题是第一个框组件每天都会生成新的日志文件,但日志文件名的不同之处只是随日期而变化。

喜欢

counters-20151120-0.log

counters-20151121-0.log

counters-20151122-0.log

等等,我在我的 logstash shipper conf 文件中包含了以下类型的代码:

file {
    path => "/opt/data/logs/counters-%{YEAR}%{MONTHNUM}%{MONTHDAY}*.log"
    type => "rg_counters"
  }

在我的 logstash 索引器中,我有以下类型的代码来捕获这些日志文件:

if [type] == "rg_counters" {
                grok{
                        match => ["message", "%{YEAR}%{MONTHNUM}%{MONTHDAY}\s*%{HOUR}:%{MINUTE}:%{SECOND}\s*(?<counters_raw_data>[0-9\-A-Z]*)\s*(?<counters_operation_type>[\-A-Z]*)\s*%{GREEDYDATA:counters_extradata}"]
        }
    }

output {
elasticsearch { host => ["elastichost1","elastichost1"  ] port => "9200" protocol => "http" }
stdout { codec => rubydebug }
}

请注意,这是有效的设置,其他类型的日志文件正在成功传输和处理,因此不存在设置问题。

问题是如何处理文件名中包含日期的日志文件。

这里有什么帮助吗?

提前致谢!!

根据评论...

而不是尝试在您的路径中使用正则表达式模式:

path => "/opt/data/logs/counters-%{YEAR}%{MONTHNUM}%{MONTHDAY}*.log"

只需使用 glob 模式:

path => "/opt/data/logs/counters-*.log"

logstash 会记住它之前查看过哪些文件(inode)。