У меня возникла проблема с конфигурацией logstash. Ниже вы можете найти мою конфигурацию logstash.Logstash to elasticsearch. Ключи с точками
Рубиновый фильтр удаляет каждую точку - "." из моих полей. Кажется, что все работает отлично - результат фильтрации данных правильный, но elasticsearch волшебно отвечает: "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"Field name [/ConsumerAdminWebService/getConsumerTransactions.call] cannot contain '.'"}
, где getConsumerTransactions.call
является одним из моих полевых ключей.
input {
http_poller {
urls => {
uatBackend1 => {
method => get
url => "http://some-url/"
headers => {
Accept => "application/json"
}
}
}
request_timeout => 60
# Run every 30 seconds
schedule => { cron => "* * * * * UTC"}
codec => "json"
metadata_target => "http_poller_metadata"
}
}
filter {
ruby {
init => "
def remove_dots hash
new = Hash.new
hash.each { |k,v|
if v.is_a? Hash
v = remove_dots(v)
end
new[ k.gsub('.','_') ] = v
if v.is_a? Array
v.each { |elem|
if elem.is_a? Hash
elem = remove_dots(elem)
end
new[ k.gsub('.','_') ] = elem
} unless v.nil?
end
} unless hash.nil?
return new
end
"
code => "
event.instance_variable_set(:@data,remove_dots(event.to_hash))
"
}
}
output {
elasticsearch {
hosts => localhost
}
}
Я боюсь, что эта строка коды не является правильной: event.instance_variable_set(:@data,remove_dots(event.to_hash))
- данные результата каким-то образом прижаты к событию, но исходные данные сохраняются неизменными и доставляются Elasticsearch апи.
Я полагаю, необходимы здесь некоторые пояснения:
- Я использую ES версии> 2,0 так точки не допускаются
- Рубиновый фильтр должен заменить точки с «_», и он прекрасно работает - в результате чего данные полностью исправьте, однако ES отвечает с указанной ошибкой. Я подозреваю, что фильтр не заменяет данные событий, а просто добавляет новый объект в объект Event. Затем ES все еще считывает первичные данные, а не обновленные.
Чтобы быть честным Руби является магия для меня :)
Какая версия ES вы используете? – Kulasangar
Я бы предположил, что вы проверяете исключения: begin event.instance_variable_set (: @ data, remove_dots (event.to_hash)) rescue Exception => e event ['logstash_ruby_exception'] = 'очистка поля:' + e. сообщение конец –
@Kulasangar Я использую ES версию 2.3.1. – adgon92