Bertug
Bertug

Reputation: 1090

Spring Boot application Docker Compose Logstash connection issue

I'm trying to run a Spring Boot application using Docker Compose, which includes MongoDB, Elasticsearch, Kibana, and Logstash. However, when my Spring Boot app starts, it can't connect to Logstash and throws the following error:

13:18:21,297 |-WARN in net.logstash.logback.appender.LogstashTcpSocketAppender[logstash] - Log destination logstash/<unresolved>:5001: connection failed. java.net.ConnectException: Connection refused

Here's my docker-compose.yml:

services:
  mongodb:
    image: mongo
    container_name: mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME: xxx
      MONGO_INITDB_ROOT_PASSWORD: xxx
      MONGO_INITDB_DATABASE: xxx
    ports:
      - "1905:27017"
    volumes:
      - db_data:/data/db
    networks:
      - chooseone_network
      
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.3.3
    container_name: elasticsearch
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.type=single-node"
      - xpack.security.enabled=false
    ports:
      - "9200:9200"
    volumes:
      - elasticsearch_data:/usr/share/elasticsearch/data
      - ./config/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro,Z
    networks:
      - elastic_network

  kibana:
    image: docker.elastic.co/kibana/kibana:8.3.3
    container_name: kibana
    ports:
      - "5601:5601"
    environment:
      ELASTICSEARCH_URL: http://elasticsearch:9200
      ELASTICSEARCH_HOSTS: '["http://elasticsearch:9200"]'
    depends_on:
      - elasticsearch
    networks:
      - elastic_network

  logstash:
    image: docker.elastic.co/logstash/logstash:8.3.3
    container_name: logstash
    volumes:
      - ./config/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro,Z
      - ./config/logstash/pipeline:/usr/share/logstash/pipeline:ro,Z
      - ./logs:/logs
    ports:
      - 5001:5000/tcp
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    command: bin/logstash -f /usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch
    networks:
      - elastic_network

  chooseone:
    image: bertugmete/chooseone:0.0.2
    container_name: chooseone
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - AWS_ACCESS_KEY=***  
      - AWS_SECRET_KEY=***
      - AWS_S3_REGION=xxx
      - AWS_S3_BUCKET_NAME=xxx
      - ARTIFACT_VERSION=0.0.2 
    depends_on:
      - mongodb
      - logstash
      - kibana
      - elasticsearch
    networks:
      - chooseone_network
      - elastic_network
    volumes:
      - ./logs:/app/logs

networks:
  elastic_network:
    driver: bridge
  chooseone_network:
    driver: bridge

volumes:
  elasticsearch_data:
    driver: local
  db_data:

Here is my logback-spring.xml configuration for Logstash:

<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>logstash:5001</destination>
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <mdc />
                <logLevel />
                <loggerName />
                <threadName />
                <message />
                <logstashMarkers />
                <stackTrace />
                <pattern>
                    <pattern>
                        {
                        "app": "chooseone",
                        "environment": "${spring.profiles.active:-default}",
                        "timestamp": "%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ}",
                        "errorCode": "%mdc{errorCode}",
                        "errorMessage": "%mdc{errorMessage}",
                        "uri": "%mdc{requestURI}",
                        "method": "%mdc{httpMethod}",
                        "status": "%mdc{responseStatus}",
                        "requestBody": "%mdc{requestBody}",
                        "responseBody": "%mdc{responseBody}",
                        "ip": "%mdc{clientIp}",
                        "timeTaken": "%mdc{timeTaken}"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="logstash" />
    </root>
</configuration>

I've checked the Logstash service, and it seems to be running, but my Spring Boot app is still unable to connect.

Any suggestions on what could be causing the connection refusal?

Upvotes: 0

Views: 153

Answers (0)

Related Questions