我有多个系统以JSON Request Body的形式发送数据。这是我简单的配置文件。
input {
http {
port => 5001
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
}
}
在大多数情况下,这很好用。我可以用kibana查看json数据。 在某些情况下,不会处理JSON。它与JSON转义有关。例如:如果某个键包含'。',则不会处理JSON。
我无法控制JSON。有没有办法在JSON密钥中转义这些字符?
更新:正如评论中所提到的,我将给出JSON字符串的示例(内容已更改。但我测试了JSON字符串。它具有与原始字符串相同的行为。):
{
"http://example.com": {
"a": "",
"b": ""
}
}
答案 0 :(得分:1)
我的研究终于让我回到了我的岗位上。
允许使用密钥中的Elasticsearch 2.0点之前。从版本2.0开始,情况就不再如此。 logstash论坛中的一个用户开发了一个ruby脚本,用于处理json键中的点:
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))
"
}
}
所有学分都转到@ hanzmeier1234(WebIDL)