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 ‘.’)