我在使用logstash配置時遇到問題。你可以在下面找到我的logstash配置。Logstash到elasticsearch。帶點的鍵
Ruby過濾器刪除每個點 - 「。」來自我的領域。看來,每一個工作正常 - 數據過濾的結果是正確的,但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 API。
我想作一些澄清這裏需要:
- 我用ES版> 2.0,以便點不準
- 紅寶石濾波應以「_」代替點和它的偉大工程 - 得到的數據是完全但是ES正確回覆提到的錯誤。我懷疑這個過濾器不會取代事件數據,而只是向事件對象添加一個新的字段。 ES然後仍然讀取原始數據而不是更新的數據。
說實話Ruby是一個神奇的給我:)
什麼是您使用的ES版本? – Kulasangar
我建議你檢查異常:begin event.instance_variable_set(:@ data,remove_dots(event.to_hash)) rescue exception => e event ['logstash_ruby_exception'] ='field dot cleanup:'+ e。消息 結束 –
@Kulasangar我使用ES版本2.3.1。 – adgon92