Как user_defined в logstash с помощью kv_plugin

В конфиге logstash:

 ruby {
            init => "@kname = ['url_path','url_args']"
            code => "
                new_event = LogStash::Event.new(Hash[@kname.zip(event.get('uri').split('?'))])
                new_event.remove('@timestamp')
                event.append(new_event)
            "
        }
        kv {
            prefix => "urlget_"
            source => "url_args"
            field_split => "& "
            remove_field => [ "url_args","uri","request" ]
        }

и получить uri лайк

"/a/b/c/?prarms=x&parmas=y..."

так как проанализировать uri в

module=a
controller=b
action=c

я попробовал вот так:

 mutate {
                replace =>{"btc_module"=>"a"}
                replace =>{"btc_action"=>"b"}
                replace =>{"btc_method"=>"c"}
        }

как получить реальное значение a b c в logstash?

или есть какие-то способы разобраться в конфиге лога nginx?

спасибо, мой английский должен быть улучшен...

1 ответ

Я думаю, что вы можете сделать это, не переходя в рубин.

Сначала используйте фильтр grok{}, чтобы получить часть пути вашего URL. Этот шаблон будет работать:

% {URIPATH: myPath}

Тогда вы можете грок {} myPath поле в ваши поля с этим шаблоном:

/% {СЛОВО:btc_module}/ {% СЛОВО:btc_action}/ {% СЛОВО:btc_method}/

Если вам не нужно myPath поле, когда вы закончите, поместите его в " [метаданные]".

Другие вопросы по тегам