1

我正在尝试向 Logstash 1.4.2 添加一个自定义过滤器,该过滤器作为 Debian 软件包安装。还安装了contrib 插件 ( http://logstash.net/docs/1.4.2/contrib-plugins )。此过滤器建立与 sqlite 数据库的连接,为此它使用 JDBC sqlite 驱动程序:

require "logstash/filters/base"
require "logstash/namespace"
require "jdbc/sqlite3"
require "java"

class LogStash::Filters::MyFilter < LogStash::Filters::Base

  (...)

  public
  def register

    if @database.nil?
       raise "You must specify 'database => ...' in your filter"
    elsif not File.exists?(@database)
       raise "The database does not exist"
    end

    url = "jdbc:sqlite:" + @database

    Java::OrgSqlite::JDBC #initialize the driver
    @connection = java.sql.DriverManager.getConnection(url)

    @logger.info("Using database", :path => @database)

  end # def register

  (...)

end # class LogStash::Filters::MyFilter

但是,当我尝试启动 logstash 时,我在日志中收到以下错误:

“无法加载 Java 类 org.sqlite.JDBC”

我尝试将sqlite-jdbc-3.7.2.jarcontrib 插件提供的文件放置到多个位置,但到目前为止,我无法弄清楚自定义插件所需的 JAR 的正确位置是什么,或者它是否是配置问题。

有任何想法吗?

4

1 回答 1

0

虽然我找不到在 Logstash 1.4 中使用外部 jar 的方法,但我可以通过将 SQlite JDBC 替换为Sequel来使其工作,该 Sequel 已经包含在内。

require "logstash/filters/base"
require "logstash/namespace"
require "sequel"

class LogStash::Filters::MyFilter < LogStash::Filters::Base

  (...)

  public
  def register

    if @database.nil?
       raise "You must specify 'database => ...' in your filter"
    elsif not File.exists?(@database)
       raise "The database does not exist"
    end

    @db = Sequel.connect("jdbc:sqlite:#{@database}")
    @logger.info("Using database", :path => @database)

  end # def register

  (...)

end # class LogStash::Filters::MyFilter
于 2014-09-17T10:19:25.417 回答