docker kafka / logstash

0

Próbuje zrobić tak by na świat były tylko otworzone dwa porty jeden to kafka ktory przyjmuje na topic jakies dane i jeden wyjsciowy na kibane.

Moj config logstasha wyglada tak

input {
    kafka {
            bootstrap_servers => "kafka1"
            topics => ["boring-logs"]
    }
}
filter {
grok {
    match => [ "message", "%{GREEDYDATA}" ]
  } 
}
output {
   elasticsearch {
      hosts => ["elasticsearch"]
      index => "boring-logs"
      workers => 1
    }
}

Mam takiego docker-compose.

services:

  elasticsearch:
    build:
      context: elasticsearch/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
      ELASTIC_PASSWORD: changeme
      
  logstash:
    build:
      context: logstash/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro
    ports:
      - "5000:5000"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    depends_on:
      - elasticsearch

  kibana:
    build:
      context: kibana/
      args:
        ELK_VERSION: $ELK_VERSION
    volumes:
      - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

  zoo1:
    image: zookeeper:3.4.9
    hostname: zoo1
    ports:
      - "2182:2181"
    environment:
        ZOO_MY_ID: 1
        ZOO_PORT: 2182
        ZOO_SERVERS: server.1=zoo1:2888:3888
    volumes:
      - ./zk-single-kafka-single/zoo1/data:/data
      - ./zk-single-kafka-single/zoo1/datalog:/datalog

  kafka1:
    image: confluentinc/cp-kafka:5.2.1
    hostname: kafka1
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: 127.0.0.1:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_DOCKER_INTERNAL:PLAINTEXT,LISTENER_DOCKER_EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_DOCKER_INTERNAL
      KAFKA_ZOOKEEPER_CONNECT: "zoo1:2182"
      KAFKA_BROKER_ID: 1
      KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    volumes:
      - ./zk-single-kafka-single/kafka1/data:/var/lib/kafka/data
    depends_on:
      - zoo1

Ale niestety dostaje info o tym ze logstash nie moze sie podlaczyc do brokera kafki. Ktos ma jakis pomysl?

0

Spróbuj zamienić 127.0.0.1:9092 na 0.0.0.0:9092.

0
Patryk27 napisał(a):

Spróbuj zamienić 127.0.0.1:9092 na 0.0.0.0:9092.

Zmieniłem i teraz dostaje

logstash_1       |   Error: Failed to construct kafka consumer

Więc przyczyna lezy w dns wewnatrz dockera

2

depends_on nie gwarantuje Ci, że proces zaczyna nasłuchiwać na określonym porcie, tylko że kontener został uruchomiony. Wewnątrz kontenera procesy mogą nadal startować.
W efekcie, jeden z procesów może próbować podłączyć się do usługi, która jeszcze nie zaczęła nasłuchiwać. Możesz to zweryfikować uruchamiając jeden kontener, czekając X czasu, sprawdzając np. netstatem czy na danym porcie coś słucha, podnieść kolejny kontener itd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1