logstash 无导入错误

logstash nil import errors

我尝试在 logstash 中导入数据时遇到一些错误。我在我拥有的每个 "geo" 字段中都看到了它。这是我的一些配置文件

input {
    jdbc {
        jdbc_driver_library => "c:\binaries\driver\ojdbc6.jar"
        jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
        jdbc_connection_string => "jdbc:oracle:thin:@random:1521/random"
        jdbc_user => "user"
        jdbc_password => "password"

        statement => "select a.*, myfunc() as geo from foo a"

        type => "sometype"
    }
}

filter{
    if [type] == "sometype" {
        mutate {
            rename => { "sometype_id" => "id" }
            remove_field => ["gdo_geometry"]
            add_field => [ "display", "%{id}" ]
        }

        # parses string to json
        json{
            source => "geo"
            target => "geometry"
        }
    }
}

output {
    if [type] == "sometype" {
        elasticsearch {
            hosts => ["myesbox:80"]
            document_id => "%{id}"
            index => "sjw"
        }
    }
}

这是第二个。

input {
    jdbc {
        jdbc_driver_library => "c:\binaries\driver\ojdbc6.jar"
        jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
        jdbc_connection_string => "jdbc:oracle:thin:@random:1521/random"
        jdbc_user => "user"
        jdbc_password => "password"

        statement => "select a.*, myfunc() as geo from foo2 a"

        type => "sometype2"
    }
}

filter{
    if [type] == "sometype2" {
        mutate {
            rename => { "sometype2_id" => "id" }
            remove_field => ["gdo_geometry"]
            add_field => [ "display", "%{id}" ]
        }

        # parses string to json
        json{
            source => "geo"
            target => "geometry"
        }
    }
}

output {
    if [type] == "sometype2" {
        elasticsearch {
            hosts => ["myesbox:80"]
            document_id => "%{id}"
            index => "sjw"
        }
    }
}

这是错误消息(对我的数据库表中的每条记录重复一次)。

{:timestamp=>"2016-01-05T13:33:18.258000-0800", :message=>"Trouble parsing json", :source=>"geo", :raw=>nil, :exception=>java.lang.ClassCastException: org.jruby.RubyNil cannot be cast to org.jruby.RubyIO, :level=>:warn}

有趣的是,该字段似乎确实导入成功。我可以看到按预期填充的数据。但我不知道为什么会生成此警告。我是 运行 作为

的 logstash
logstash -f /my/logstash/dir

另外值得注意的是,如果我修改第一个配置文件并将源 json 过滤器名称更改为 "geom" 而不是 "geo" - 此警告将不再发生。它似乎只在我有多个具有相同 field/json 过滤器组合的配置文件时才会发生。因此,如果我随后添加了第三个配置文件并且它有一个 "geo" 字段被 json 过滤器解析 - 问题再次出现 - 尽管我仍然看不到第一个配置的任何警告消息文件 -- 只有第二个和第三个。

这里的问题原来是logstash 2.0版本的bug。我不确定到底是什么问题,但是升级到 2.1 为我解决了这个问题。