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 为我解决了这个问题。
我尝试在 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}
有趣的是,该字段似乎确实导入成功。我可以看到按预期填充的数据。但我不知道为什么会生成此警告。我是 运行 作为
的 logstashlogstash -f /my/logstash/dir
另外值得注意的是,如果我修改第一个配置文件并将源 json 过滤器名称更改为 "geom" 而不是 "geo" - 此警告将不再发生。它似乎只在我有多个具有相同 field/json 过滤器组合的配置文件时才会发生。因此,如果我随后添加了第三个配置文件并且它有一个 "geo" 字段被 json 过滤器解析 - 问题再次出现 - 尽管我仍然看不到第一个配置的任何警告消息文件 -- 只有第二个和第三个。
这里的问题原来是logstash 2.0版本的bug。我不确定到底是什么问题,但是升级到 2.1 为我解决了这个问题。