Logstash启动报错:找不到主类JvmOptionsParser求助
问题解决:Logstash挂载Cassandra驱动后启动失败
问题根源
你当前将Cassandra驱动挂载到了/usr/share/logstash/logstash-core/lib/jars目录,这个目录是Logstash存放核心依赖JAR的位置,直接挂载会覆盖原目录下的所有核心文件,导致Logstash启动时找不到org.logstash.launchers.JvmOptionsParser这类核心类,从而启动失败。
解决方案
1. 修改驱动挂载路径
将驱动挂载到Logstash专门用于存放第三方JAR的目录,推荐以下两个路径之一:
/usr/share/logstash/vendor/jars:官方推荐的第三方依赖存放目录/usr/share/logstash/plugins/jars:插件依赖存放目录
修改后的Docker Compose中Logstash服务的volumes配置如下:
logstash: image: logstash:7.17.18 container_name: logstash # restart: always volumes: - logstash_data:/usr/share/logstash/data - ./cassandra-driver/CassandraJDBC42.jar:/usr/share/logstash/vendor/jars/CassandraJDBC42.jar # 挂载单个驱动文件而非整个目录 - ./logstash/logstash.conf:/logstash_dir/logstash.conf command: logstash -f /logstash_dir/logstash.conf depends_on: - elasticsearch ports: - "9600:9600" environment: LS_JAVA_OPTS: "-Xmx256m -Xms256m" networks: - elastic
注意:不要挂载整个目录,只挂载单个驱动JAR文件,避免覆盖目标目录下的其他文件。
2. 验证Logstash配置文件
确保logstash.conf中的JDBC驱动路径指向正确的挂载位置,示例配置片段:
input { jdbc { jdbc_driver_library => "/usr/share/logstash/vendor/jars/CassandraJDBC42.jar" jdbc_driver_class => "com.datastax.driver.core.Driver" jdbc_connection_string => "jdbc:cassandra://cassandra-host:9042/keyspace" jdbc_user => "your-user" jdbc_password => "your-password" statement => "SELECT * FROM your_table" } }
3. 重启服务
执行docker compose down停止所有服务,再执行docker compose up -d重新启动,Logstash应该可以正常启动并加载Cassandra驱动。
额外注意事项
- 确保Cassandra JDBC驱动版本与Logstash(7.17.18)、Cassandra版本兼容,避免因版本不匹配导致的其他异常。
- 不要修改Logstash核心目录的内容,所有第三方依赖都应放在专门的第三方目录中。
内容的提问来源于stack exchange,提问作者therdean
相关产品推荐
相关产品推荐

