Извлечение полей из путей в logstash

Я настраиваю logstash для сбора журналов от нескольких рабочих на нескольких хостах. В настоящее время я добавляю поля для хоста:

input {
    file {
            path => "/data/logs/box-1/worker-*.log"
            add_field => {
                "original_host" => "box-1" 
            }
    }
    file {
            path => "/data/logs/box-2/worker-*.log"
            add_field => {
                "original_host" => "box-2"
            }
    }

Однако я также хотел бы добавить поле {'worker': 'A'} и так далее. У меня много воркеров, поэтому я не хочу писать блок file { ... } для каждой комбинации хоста и воркера.

Есть ли у меня альтернативы?


person Wilfred Hughes    schedule 09.05.2014    source источник


Ответы (1)


Вы должны быть в состоянии сделать path => "/data/logs/*/worker-*.log", а затем добавить фильтр grok, чтобы получить то, что вам нужно.

filter { grok { match => [ "path", "/(?<original_host>[^/]+)/worker-(?<worker>.*).log" ] } }

или что-то очень близкое к этому... возможно, вы захотите окружить его if [path] =~ /worker/ в зависимости от того, что еще у вас есть в вашем файле конфигурации.

person Alcanzar    schedule 09.05.2014
comment
Гениально! Спасибо :) - person Wilfred Hughes; 09.05.2014