Logstash转义JSON密钥

时间:2016-06-12 12:29:47

标签: elasticsearch logstash kibana

我有多个系统以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": ""
  }
}

1 个答案:

答案 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