2013-12-11 3 views
1

Я пытаюсь связать события logstash с возможным расположением файла на AWS S3. У нас есть файлы индексирования logstash напрямую, и когда файл закончил писать, мы отправляем его на S3.Добавление тегов в события logstash на основе md5 имени файла

Для повышения производительности S3, мы веер файлов, сохраняя их следующим образом:

hex(md5(filename.log))[0..2]/filename.log 

Это занимает первые 3 символа md5 hexdigest и сохраняют файл в папке с префиксом, обеспечивая довольно твердый вентилятор из файлов. К сожалению, я не могу определить, как помечать каждое событие журнала этой информацией.

Существует ruby filter type, который позволяет выполнять рубиновый код, но я не думаю, что он позволяет использовать результат вычисления.

filter { 
    ruby { 
    code => "require 'digest/md5'; Digest::MD5.hexdigest("mylong.file.name")[0..2]" 
    # now what? 
    } 
} 

Есть ли способ крепления тега или поля на основе префикса md5?

ответ

3

Ваш код будет содержать variable event which is the event itself.

Чтобы добавить поле «Foo» со значением «бар», вы могли бы написать что-то вроде этого:

event["foo"] = "bar" 

Посмотрите, как file input does it, например.

Если вы обнаружили, что ваш код немного громоздкий, в конфигурационном файле вы можете write your own input or filter plugin.

3

Попробуйте это:

filter { 
    ruby { 
     code => "require 'digest/md5';  
     event['md5'] = Digest::MD5.hexdigest("mylong.file.name")[0..2]" 
    } 
} 

Поле "md5" является то, что вы хотите.