2014-01-15 2 views
2

Я использую logstash, чтобы постоянно искать новые файлы и передавать данные в разные системы.найти определенные файлы, используя шаблон glob

Сейчас я использую этот конфиг:

input { 

    file { 
    type => "source" 
    path => "/ebs/**/*-*csv" # recursivly check subfolders 
    sincedb_path => "/usr/local/logstash/sincedb" 
    sincedb_write_interval => 1 
    discover_interval => 4 
    start_position => "beginning" 
    stat_interval => 1 
    } 
} 

Это прекрасно работает, но то, что я хочу сделать, это что-то вроде этого:

path => "/ebs/**/*-[0-9]{10}.csv" 

Можно ли включать регулярное выражение, как это в путь?

ответ

2

Logstash File Input API поддерживает только glob (Wildcard), так как поддержка Unix оболочек. Например, если вы список файлов в системе Unix с помощью Глоб шаблона,

$ Ls [0-9] .csv

Он может показать файл "1.csv"

Но когда вы добавляете регулярное выражение,

$ Ls [0-9] {1} .csv

Система показывает

LS: [0-9] {1} .csv: Нет такого файла или каталога

Итак, если вы хотите добавить регулярное выражение, может быть, вы должны соответствовать globbing pattern , Такие, как

путь => «/ EBS/*/* - [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] .csv "

Надеюсь, это может вам помочь.

+0

Работает как очарование! – Vor

2

Вы можете использовать Rake::FileList, он идеально подходит от работы:

require rake 
FileList.new("/ebs/**/*-[0-9]{10}.csv") 

Если сделать работу для вас

+0

Это имеет смысл. Но для этого я предполагаю, что мне нужно будет изменить источник и перекомпилировать код. что на самом деле не является вариантом в моей ситуации. Я искал какое-то конкретное решение для логсташей. – Vor

+0

@Vor перекомпилировать код ruby ​​??? Ruby интерпретируется и не компилируется – bjhaid

+0

извините за недостаток информации. 'logstash' написано в' JRuby' – Vor