2017-09-25 2 views
0

Je veux envoyer des journaux d'un conteneur en cours d'exécution my_service à un autre exécutant la pile ELK avec le pilote syslog (donc je besoin du plugin logstash-input-syslog installé).pilote Syslog ne fonctionne pas avec Compose docker et l'élan pile

Je peaufinage this elk image (et le marquage comme elk-custom) par les éléments suivants Dockerfile-elk

(en utilisant le port 514 parce this seems to be the default port)

FROM sebp/elk 

WORKDIR /opt/logstash/bin 

RUN ./logstash-plugin install logstash-input-syslog 

EXPOSE 514 

Courir mes services par l'intermédiaire d'un docker-compose comme suit plus ou moins:

elk-custom: 
    # image: elk-custom 
    build: 
     context: . 
     dockerfile: Dockerfile-elk 
    ports: 
     - 5601:5601 
     - 9200:9200 
     - 5044:5044 
     - 514:514 

    my_service: 
    image: some_image_from_my_local_registry 
    depends_on: 
     - elk-custom 
    logging: 
    driver: syslog 
    options: 
     syslog-address: "tcp://elk-custom:514" 

Cependant:

ERROR: for b4cd17dc1142_namespace_my_service_1 Cannot start service my_service: failed to initialize logging driver: dial tcp: lookup elk-custom on 10.14.1.31:53: server misbehaving

ERROR: for api Cannot start service my_service: failed to initialize logging driver: dial tcp: lookup elk-custom on 10.14.1.31:53: server misbehaving ERROR: Encountered errors while bringing up the project.

Des suggestions?

MISE À JOUR: Apparemment, rien ne semble être à l'écoute sur le port 514, la cause de l'intérieur du conteneur, la commande netstat -a ne montre rien sur ce port .... aucune idée pourquoi ...

+1

Essayez de changer 'tcp: // elk-custom: 514' à' tcp: //127.0.0.1: 514' et voyez si cela aide –

+0

yep. cela semble faire le travail ... ma pile de service semble maintenant commencer ... en procédant à une configuration supplémentaire de logstash – pkaramol

Répondre

1

Vous devez utiliser tcp://127.0.0.1:514 au lieu de tcp://elk-custom:514. Raison d'être cette adresse est utilisée par docker et non par le conteneur. C'est pourquoi elk-custom n'est pas accessible. Cela ne fonctionne que lorsque vous mappez le port (ce que vous avez fait) et que le service elk est démarré en premier (ce que vous avez fait) et que l'adresse IP est accessible à partir de l'hôte docker pour lequel vous utiliseriez tcp://127.0.0.1:514

+0

Donc le transfert de logs sera fait par le démon docker, et il n'est pas ** conscient ** des noms d'hôte , alors que chaque conteneur/service défini dans 'docker-compose' ** ** est conscient du nom d'hôte de l'autre? Est-ce le cas? – pkaramol

+0

Oui, c'est correct. –

+0

Une suggestion comment cela fonctionne sur «rancher»? Aucun de '127.0.0.1' ou' elk-custom' (ie le nom du service) ne fonctionne, car ils causent le même problème: 'dial tcp: lookup elk-custom on 10.14.1.31:53: serveur se conduisant mal'' – pkaramol