在Logstash中使用正则表达式作为输入文件路径

时间:2014-06-04 14:10:38

标签: logstash

我想用logstash解析日志文件目录。 当日志格式如下:

server-20140604.log
server-20140603.log
server-20140602.log

没有问题,我正在使用这样的球:

input {
 file {
   path=>["D:/*.log"]
 }
}

但我的日志格式如下:

server.log
server.log.1
server.log.2
client.log
client.log.1
client.log.2

所以我想知道如何告诉logstash在文件夹中解析名称中以“server”表达式开头的所有文件。我真的需要这样做,因为我在文件夹中有其他文件(即客户端日志),我不想解析但也无法从文件夹中删除。

1 个答案:

答案 0 :(得分:1)

使用此配置,我只能解析所有以前缀server开头的日志文件。

input {
        file {
                path => ["D:/server*"]
        }
}

output {
    stdout {
                codec => rubydebug
        }
}

我认为您遇到的可能问题是start_position配置。这意味着logstash开始在哪里读取日志。请参阅here。请记住,此选项仅修改文件为新文件且之前未见过的first contact情况。如果之前已经看过某个文件,则此选项无效。

当您停止logstash时,logstash会在您的主目录中保存.sincedb *。下次启动时,logstash将根据.sindb *开始读取文件。如果您不向server.log输入新日志,则logstash将永远不会解析旧日志。

您可以尝试执行的操作是在启动logstash之前删除所有.sincedb并将start_posistion添加到您的配置中。在您的评论中,您说如果覆盖server.log logstash可以从头开始解析文件,那是因为logstash将其检测为新文件而.sincedb *不保存有关此文件的任何信息。 logstash会解析它!您可以尝试找出.sincedb并尝试删除它。