Logstash连接CloudSQL PostgreSQL报错:找不到org.postgresql.Driver类
问题描述
想用Logstash查询CloudSQL PostgreSQL实例,但没找到相关示例。已执行命令构建postgres-socket-factory jar包:mvn -P jar-with-dependencies clean package -DskipTests
并将生成的jar作为Logstash JDBC驱动配置,配置内容如下:
input { jdbc { jdbc_driver_library => "/Users/gustavollermalylarrain/Documents/proyectos/labs/cloud-sql-jdbc-socket-factory/jdbc/postgres/target/postgres-socket-factory-1.6.4-SNAPSHOT.jar" jdbc_driver_class => "org.postgresql.Driver" jdbc_connection_string => "jdbc:postgresql:///people?cloudSqlInstance=cosmic-keep-148903:us-central1:llermaly&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=postgres&password=postgres" statement => "SELECT * FROM people;" jdbc_user => "postgres" jdbc_password => "postgres" } } output { stdout { codec => rubydebug { } } }
运行时出现错误:
Error: java.lang.ClassNotFoundException: org.postgresql.Driver. Are you sure you've included the correct jdbc driver in :jdbc_driver_library?
请问遗漏了什么步骤?
解决方案
核心问题是:postgres-socket-factory jar包仅包含CloudSQL连接所需的SocketFactory实现,不包含PostgreSQL JDBC核心驱动,所以Logstash找不到org.postgresql.Driver类。
按以下步骤修正:
- 下载与你的PostgreSQL版本兼容的官方JDBC驱动jar包(比如42.6.x系列),放到可访问路径。
- 修改Logstash配置中的
jdbc_driver_library,同时指定两个jar包路径:macOS/Linux用冒号分隔,Windows用分号分隔:jdbc_driver_library => "/Users/gustavollermalylarrain/Documents/proyectos/labs/cloud-sql-jdbc-socket-factory/jdbc/postgres/target/postgres-socket-factory-1.6.4-SNAPSHOT.jar:/path/to/postgresql-42.6.0.jar" - 你的
jdbc_connection_string已包含user和password参数,可删除配置里的jdbc_user和jdbc_password,避免重复冲突。
修正后的完整配置示例:
input { jdbc { jdbc_driver_library => "/Users/gustavollermalylarrain/Documents/proyectos/labs/cloud-sql-jdbc-socket-factory/jdbc/postgres/target/postgres-socket-factory-1.6.4-SNAPSHOT.jar:/path/to/postgresql-42.6.0.jar" jdbc_driver_class => "org.postgresql.Driver" jdbc_connection_string => "jdbc:postgresql:///people?cloudSqlInstance=cosmic-keep-148903:us-central1:llermaly&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=postgres&password=postgres" statement => "SELECT * FROM people;" } } output { stdout { codec => rubydebug } }
内容的提问来源于stack exchange,提问作者llermaly
相关产品推荐
相关产品推荐

