Logstatsh throws cluster - Exception in monitor thread while connecting to server

Hello everyone this is my first post in this forum, well I would like to synchronize a MongoDB database with Elasticsearch thanks to Logstash, I used version 8.3.3 of ELK with a MongoDriver4.4. I have configured the pipeline input

input {
	jdbc {
		jdbc_driver_class => "com.wisecoders.dbschema.mongodb.JdbcDriver"
		jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/mongojdbc4.4.jar"
		jdbc_connection_string => "jdbc:mongodb://localhost:27017/testdb"
		jdbc_user => ""
		schedule => "* * * * *"
		statement => "db.address.find({},{'_id': false});"
	}
}

The Docker service has been configured as follows

  logstash:
    build:
      context: logstash/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - ./logstash/pipeline/:/usr/share/logstash/pipeline/:ro
      - ./logstash/config/:/usr/share/logstash/config/:ro
      - ./logstash/empty/:/usr/share/logstash/.DbSchema/logs/:rw

      - ./logstash/driver/bson-4.7.1.jar/:/usr/share/logstash/logstash-core/lib/jars/bson-4.7.1.jar/:ro
      - ./logstash/driver/bson-record-codec-4.7.1.jar/:/usr/share/logstash/logstash-core/lib/jars/bson-record-codec-4.7.1.jar/:ro
      - ./logstash/driver/graal-sdk-22.2.0.jar/:/usr/share/logstash/logstash-core/lib/jars/graal-sdk-22.2.0.jar/:ro
      - ./logstash/driver/gson-2.9.0.jar/:/usr/share/logstash/logstash-core/lib/jars/gson-2.9.0.jar/:ro
      - ./logstash/driver/icu4j-71.1.jar/:/usr/share/logstash/logstash-core/lib/jars/icu4j-71.1.jar/:ro
      - ./logstash/driver/js-22.2.0.jar/:/usr/share/logstash/logstash-core/lib/jars/js-22.2.0.jar/:ro
      - ./logstash/driver/js-scriptengine-22.2.0.jar/:/usr/share/logstash/logstash-core/lib/jars/js-scriptengine-22.2.0.jar/:ro
      - ./logstash/driver/mongodb-driver-core-4.7.1.jar/:/usr/share/logstash/logstash-core/lib/jars/mongodb-driver-core-4.7.1.jar/:ro
      - ./logstash/driver/mongodb-driver-sync-4.7.1.jar/:/usr/share/logstash/logstash-core/lib/jars/mongodb-driver-sync-4.7.1.jar/:ro
      - ./logstash/driver/mongojdbc4.4.jar/:/usr/share/logstash/logstash-core/lib/jars/mongojdbc4.4.jar/:ro
      - ./logstash/driver/regex-22.2.0.jar/:/usr/share/logstash/logstash-core/lib/jars/regex-22.2.0.jar/:ro
      - ./logstash/driver/truffle-api-22.2.0.jar/:/usr/share/logstash/logstash-core/lib/jars/truffle-api-22.2.0.jar/:ro  
    ports:
      - "5000:5000/tcp"
      - "5000:5000/udp"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on:
      - elasticsearch

When I run the docker-compose up command, all services start until I get the following error:

 [INFO ] 2022-08-13 11:03:00.965 [cluster-ClusterId{value='62f784e43c2db20a2addfdbe', description='null'}-localhost:27017] cluster - Exception in monitor thread while connecting to server localhost:27017
logstash_1       | com.mongodb.MongoSocketOpenException: Exception opening socket
logstash_1       |      at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.7.1.jar:?]
logstash_1       |      at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:180) ~[mongodb-driver-core-4.7.1.jar:?]
logstash_1       |      at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:193) [mongodb-driver-core-4.7.1.jar:?]
logstash_1       |      at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:157) [mongodb-driver-core-4.7.1.jar:?]
logstash_1       |      at java.lang.Thread.run(Thread.java:834) [?:?]
logstash_1       | Caused by: java.net.ConnectException: Connection refused (Connection refused)
logstash_1       |      at java.net.PlainSocketImpl.socketConnect(Native Method) ~[?:?]
logstash_1       |      at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[?:?]
logstash_1       |      at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) ~[?:?]
logstash_1       |      at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) ~[?:?]
logstash_1       |      at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) ~[?:?]
logstash_1       |      at java.net.Socket.connect(Socket.java:609) ~[?:?]
logstash_1       |      at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:107) ~[mongodb-driver-core-4.7.1.jar:?]
logstash_1       |      at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.7.1.jar:?]
logstash_1       |      at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.7.1.jar:?]

It seems that Logstash can't read the database, I don't know if it's missing, I've tested many configurations and versions but without success. A little help would be nice and thanks in advance.

Hi @momarious it looks like you are running Logstash in a docker container, in this case localhost will resolve to the container itself. If your database has an external ip address, then use this one instead of localhost or make logstash use network: host and use host.docker.internal as hostname.

Hello Sir @Ugo_Sangiorgi, I just tested the two options below and the error still persists

jdbc_connection_string => "jdbc:mongodb://mongo/testdb"
jdbc_connection_string => "jdbc:mongodb://mongo:27018/testdb"

I also tried to use a Mongo cluster before, but still nothing.

jdbc_connection_string => "jdbc:mongodb+srv://username:password@xxx.mongodb.net/testdb?retryWrites=true&w=majority"

@momarious You are getting a com.mongodb.MongoSocketOpenException: Exception opening socket that is giving you a Connection refused that is likely a network problem.

You could try to set logstash debug to trace: log.level: trace so you have a better understanding of how the mongodb library is trying to access an external url: logstash.yml | Logstash Reference [8.3] | Elastic

@Ugo_Sangiorgi I rebuilt the Docker service with a Mongo database configuration in Local

jdbc_connection_string => "jdbc:mongodb://mongo:27017/testdb"

without the mongo:27017 database existing, and it gave me the same statck tract.

logstash         |  org.logstash.config.ir.compiler.ComputeStepSyntaxElement@3fdc2b9c
logstash         | [2022-08-14T13:59:53,692][INFO ][logstash.javapipeline    ][firstpipeline] Pipeline Java execution initialization time {"seconds"=>6.34}
logstash         | [2022-08-14T13:59:54,018][INFO ][logstash.inputs.jdbc     ][firstpipeline] ECS compatibility is enabled but `target` option was not specified. This may cause fields to be set at the top-level of the event where they are likely to clash with the Elastic Common Schema. It is recommended to set the `target` option to avoid potential schema conflicts (if your data is ECS compliant or non-conflicting, feel free to ignore this message)
logstash         | [2022-08-14T13:59:54,040][INFO ][logstash.javapipeline    ][firstpipeline] Pipeline started {"pipeline.id"=>"firstpipeline"}
logstash         | [2022-08-14T13:59:54,063][DEBUG][logstash.javapipeline    ] Pipeline started successfully {:pipeline_id=>"firstpipeline", :thread=>"#<Thread:0x795c7042 run>"}
logstash         | [2022-08-14T13:59:54,125][DEBUG][org.logstash.execution.PeriodicFlush][firstpipeline] Pushing flush onto pipeline.
logstash         | [2022-08-14T13:59:54,189][TRACE][logstash.agent           ] Converge results {:success=>true, :failed_actions=>[], :successful_actions=>["id: firstpipeline, action_type: LogStash::PipelineAction::Create"]}
logstash         | [2022-08-14T13:59:54,281][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:firstpipeline], :non_running_pipelines=>[]}
logstash         | [2022-08-14T13:59:54,747][DEBUG][logstash.inputs.jdbc     ][firstpipeline][419a6b60e3e009bab89969a864f8de86a02344dbec9e8945efb4d241eba45fd6] loading /usr/share/logstash/logstash-core/lib/jars/mongojdbc4.4.jar
logstash         | /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/cronline.rb:77: warning: constant ::Fixnum is deprecated
logstash         | [2022-08-14T13:59:55,936][DEBUG][logstash.instrument.periodicpoller.jvm] collector name {:name=>"ParNew"}
logstash         | [2022-08-14T13:59:55,936][DEBUG][logstash.instrument.periodicpoller.jvm] collector name {:name=>"ConcurrentMarkSweep"}
logstash         | [2022-08-14T13:59:59,695][DEBUG][org.logstash.execution.PeriodicFlush][firstpipeline] Pushing flush onto pipeline.
logstash         | Aug 14, 2022 2:00:00 PM com.wisecoders.dbschema.mongodb.JdbcDriver connect
logstash         | INFO: Connect URL: mongodb://mongo:27017/testdb
logstash         | Aug 14, 2022 2:00:00 PM com.wisecoders.dbschema.mongodb.JdbcDriver connect
logstash         | INFO: Connect URL: mongodb://mongo:27017/testdb
logstash         | Aug 14, 2022 2:00:00 PM com.wisecoders.dbschema.mongodb.JdbcDriver connect
logstash         | INFO: MongoClient URL: mongodb://mongo:27017/testdb rewritten as mongodb://mongo:27017/testdb
logstash         | Aug 14, 2022 2:00:00 PM com.wisecoders.dbschema.mongodb.JdbcDriver connect
logstash         | INFO: MongoClient URL: mongodb://mongo:27017/testdb rewritten as mongodb://mongo:27017/testdb
logstash         | [2022-08-14T14:00:00,966][DEBUG][org.mongodb.driver.cluster][firstpipeline][419a6b60e3e009bab89969a864f8de86a02344dbec9e8945efb4d241eba45fd6] Updating cluster description to  {type=UNKNOWN, servers=[{address=mongo:27017, type=UNKNOWN, state=CONNECTING}]
logstash         | [2022-08-14T14:00:01,006][INFO ][org.mongodb.driver.client][firstpipeline][419a6b60e3e009bab89969a864f8de86a02344dbec9e8945efb4d241eba45fd6] MongoClient with metadata {"driver": {"name": "mongo-java-driver|sync", "version": "4.7.1"}, "os": {"type": "Linux", "name": "Linux", "architecture": "amd64", "version": "5.10.16.3-microsoft-standard-WSL2"}, "platform": "Java/Eclipse Adoptium/11.0.15+10"} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=null, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=null, streamFactoryFactory=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.Jep395RecordCodecProvider@4575139e]}, clusterSettings={hosts=[mongo:27017], srvServiceName=mongodb, mode=SINGLE, requiredClusterType=UNKNOWN, requiredReplicaSetName='null', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='30000 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, sendBufferSize=0}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, sendBufferSize=0}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=2147483647, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=false, invalidHostNameAllowed=false, context=null}, applicationName='null', compressorList=[], uuidRepresentation=UNSPECIFIED, serverApi=null, autoEncryptionSettings=null, contextProvider=null}
logstash         | [2022-08-14T14:00:01,037][INFO ][org.mongodb.driver.cluster][firstpipeline][419a6b60e3e009bab89969a864f8de86a02344dbec9e8945efb4d241eba45fd6] Cluster description not yet available. Waiting for 30000 ms before timing out
logstash         | [2022-08-14T14:00:01,060][DEBUG][org.mongodb.driver.connection][firstpipeline][419a6b60e3e009bab89969a864f8de86a02344dbec9e8945efb4d241eba45fd6] Closing connection connectionId{localValue:1}
logstash         | [2022-08-14T14:00:01,061][DEBUG][org.mongodb.driver.connection][firstpipeline][419a6b60e3e009bab89969a864f8de86a02344dbec9e8945efb4d241eba45fd6] Closing connection connectionId{localValue:2}
logstash         | [2022-08-14T14:00:01,067][INFO ][org.mongodb.driver.cluster][firstpipeline][419a6b60e3e009bab89969a864f8de86a02344dbec9e8945efb4d241eba45fd6] Exception in monitor thread while connecting to server mongo:27017
logstash         | com.mongodb.MongoSocketOpenException: Exception opening socket
logstash         |      at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.7.1.jar:?]
logstash         |      at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:180) ~[mongodb-driver-core-4.7.1.jar:?]
logstash         |      at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:193) [mongodb-driver-core-4.7.1.jar:?]
logstash         |      at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:157) [mongodb-driver-core-4.7.1.jar:?]
logstash         |      at java.lang.Thread.run(Thread.java:829) [?:?]
logstash         | Caused by: java.net.ConnectException: Connection refused (Connection refused)
logstash         |      at java.net.PlainSocketImpl.socketConnect(Native Method) ~[?:?]
logstash         |      at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412) ~[?:?]
logstash         |      at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255) ~[?:?]
logstash         |      at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237) ~[?:?]
logstash         |      at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[?:?]
logstash         |      at java.net.Socket.connect(Socket.java:609) ~[?:?]
logstash         |      at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:107) ~[mongodb-driver-core-4.7.1.jar:?]
logstash         |      at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.7.1.jar:?]
logstash         |      at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.7.1.jar:?]
logstash         |      ... 4 more

Looks like it has nothing to do with the DB. Maybe a missing plugin something like that ??

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.