2017-09-26 2 views
1

J'ai un fichier kafka connect qui doit être exécuté en tant que conteneur docker. J'ai besoin de capturer tous mes journaux de connexion sur un fichier journal dans le conteneur (de préférence dans un répertoire/fichier -/etc/kafka/kafka-connect-logs) qui peut ensuite être déplacé vers localhost (sur lequel tourne le moteur docker) en utilisant volumes dans le docker. Lorsque je modifie mon connect-log4j.properties pour ajouter dans un fichier journal, je vois qu'aucun fichier journal n'est créé. Si j'essaie la même chose sans docker et que je lance le kafka connect sur une VM linux locale en changeant connect-log4j.properties pour écrire des logs dans un fichier journal, cela fonctionne parfaitement mais pas avec docker. Toutes les suggestions seront très utiles.Les journaux Kafka-connect dans le conteneur docker

Docker File

FROM confluent/platform 

COPY Test.jar /usr/local/bin/ 
COPY kafka-connect-docker.sh /usr/local/bin/ 
COPY connect-distributed.properties /usr/local/bin/ 
COPY connect-log4j.properties /etc/kafka/connect-log4j.properties 

RUN ["apt-get", "update"] 
RUN ["apt-get", "install", "-yq", "curl"] 
RUN ["chown", "-R", "confluent:confluent", "/usr/local/bin/kafka-connect-docker.sh", "/usr/local/bin/connect-distributed.properties", "/usr/local/bin/Test.jar"] 
RUN ["chmod", "+x", "/usr/local/bin/kafka-connect-docker.sh", "/usr/local/bin/connect-distributed.properties", "/usr/local/bin/Test.jar"] 
RUN ["chown", "-R", "confluent:confluent", "/etc/kafka/connect-log4j.properties"] 
RUN ["chmod", "777", "/usr/local/bin/kafka-connect-docker.sh", "/etc/kafka/connect-log4j.properties"] 

EXPOSE 8083 

CMD [ "/usr/local/bin/kafka-connect-docker.sh" ] 

connect-log4j.properties

# Root logger option 
log4j.rootLogger = INFO, FILE 

# Direct log messages to stdout 
log4j.appender.FILE=org.apache.log4j.FileAppender 
log4j.appender.FILE.File=/etc/kafka/log.out 
# Define the layout for file appender 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.conversionPattern=%m% 

log4j.logger.org.apache.zookeeper=ERROR 
log4j.logger.org.I0Itec.zkclient=ERROR 

kafka-connect-docker.sh

#!/bin/bash 
export CLASSPATH=/usr/local/bin/Test.jar 
exec /usr/bin/connect-distributed /usr/local/bin/connect-distributed.properties 

Il fonctionne très bien lorsque j'utilise la valeur par défaut connect-log4j.properties (ajoute les journaux à la console), mais je suis incapable de créer un fichier journal dans docker. En outre, même processus sans docker fonctionne bien (crée un fichier journal) dans la machine virtuelle locale.

+1

Avez-vous essayé de déclarer le volume tout de suite et de placer le fichier directement dans le dossier du volume? Quelque chose comme VOLUME/etc/kafka dans votre fichier docker, puis sur docker exécuter la cartographie de ce volume? – hecko84

+0

Merci! Cela a aidé :-) –

+0

J'ai placé le résultat comme réponse aussi, voir ci-dessous – hecko84

Répondre

1

Résultat de la discussion:

Déclarez le volume tout de suite dans le dockerfile et configurer votre configuration de journalisation pour placer la sortie du journal directement au volume. Sur docker run (ou quelle que soit la façon dont vous démarrez votre conteneur), montez le volume et ça devrait aller.