Logstash 转义 JSON 键
Logstash escape JSON Keys
我有多个系统将数据作为 JSON 请求正文发送。这是我的简单配置文件。
input {
http {
port => 5001
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
}
}
在大多数情况下,这工作得很好。我可以用 kibana 查看 json 数据。
在某些情况下,JSON 将不会被处理。它与 JSON 转义有关。例如:如果一个键包含'.',则JSON将不会被处理。
我无法控制JSON。有没有办法在 JSON 键中转义这些字符?
更新:如评论中所述,我将举一个 JSON 字符串的示例(内容已更改。但我已经测试了 JSON 字符串。它的行为与原文。):
{
"http://example.com": {
"a": "",
"b": ""
}
}
我的研究终于让我回到了 post。
在 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 (Field name cannot contain ‘.’)
我有多个系统将数据作为 JSON 请求正文发送。这是我的简单配置文件。
input {
http {
port => 5001
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
}
}
在大多数情况下,这工作得很好。我可以用 kibana 查看 json 数据。 在某些情况下,JSON 将不会被处理。它与 JSON 转义有关。例如:如果一个键包含'.',则JSON将不会被处理。
我无法控制JSON。有没有办法在 JSON 键中转义这些字符?
更新:如评论中所述,我将举一个 JSON 字符串的示例(内容已更改。但我已经测试了 JSON 字符串。它的行为与原文。):
{
"http://example.com": {
"a": "",
"b": ""
}
}
我的研究终于让我回到了 post。
在 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 (Field name cannot contain ‘.’)