我遇到了logstash配置问题。您可以在下面找到我的logstash配置。
Ruby过滤器删除每个点 - “。”从我的领域。似乎每个工作都很好 - 数据过滤的结果是正确的,但弹性搜索神奇地回应:"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。
我想这里需要做一些澄清:
说实话,Ruby对我来说是一种魔力:)