我在尝试在logstash中进行数据导入时遇到了一些错误。我正在为我所拥有的每个“地理”领域看到它。以下是我的一些配置文件
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” - 将不再出现此警告。它似乎只发生在我有多个配置文件具有相同的字段/ json过滤器组合时。所以,如果我然后添加了第三个配置文件并且它有一个由json过滤器解析的“geo”字段 - 问题再次出现 - 尽管我仍然看不到第一个配置文件的任何警告消息 - 只有第二个第三。
答案 0 :(得分:0)
这里的问题实际上证明是2.0版本的logstash的一个错误。我不确定究竟是什么问题,但升级到2.1为我解决了这个问题。