Pourquoi zookeeper n'utilise-t-il pas mon répertoire log4j. properties

Dans mon fichier zookeeper/conf/log4j.properties, j'ai défini le zookeeper.journal.dir à $HOME / zklogs

Quand j'utilise zkServer.sh il n'utilise pas ce répertoire. Au lieu de cela, il utilise le ${ZOO_LOG_DIR} qui, quand je l'écho, sort à"."

Je ne comprends pas comment résoudre ce problème, je ne vois pas le $ {ZOO_LOG_DIR} défini n'importe où. Je ne suis pas sûr de savoir comment il se met à "."à tous. Je ne sais pas non plus comment lancer zookeeper sans zkServer.sh. je suis noobish à linux aussi et un peu perdu à ce sujet question...

Est-ce que quelqu'un sait comment je peux résoudre ce problème afin qu'il utilise le répertoire défini dans mon fichier log4j.properties dans le répertoire conf?

* * * Mise à jour, j'ai trouvé dans zkEnv.sh dans le répertoire bin de mon installation zookeeper. Il y a le code:

if["x${ZOO_LOG_DIR}" = "x" ]
then
   ZOO_LOG_DIR="."
fi

Je ne suis pas sûr de ce qui se passe dans cette première ligne, mais il doit être ici que quelque chose va mal. Je m'attends à regarder zookeeper.journal.dir de mon fichier log4j. properties. Quelqu'un peut-il me dire si cela devait être vrai? Je n'ai pas vous voulez juste câbler le chemin ici...

21
demandé sur smuggledPancakes 2014-10-28 18:58:55

6 réponses

Je voulais ajouter comment j'ai résolu ce problème personnalisés mon environnement.

Il y a 2 mécanismes de journalisation qui fonctionnent ici:

  • bin/zkServer.sh redirige stdout et stderr du serveur zookeeper vers zookeeper.hors
  • log4j peut ajouter aux journaux à plusieurs endroits, y compris:
    • CONSOLE-qui se retrouve dans stdout et stderr du serveur zookeeper
    • ROLLINGFILE-qui est envoyé à zookeeper.log

Bin/zkServer.sh utilisations :

  • ZOO_LOG_DIR pour définir le chemin pour les deux zookeeper.et log4j.
  • ZOO_LOG4J_PROP pour définir le niveau de journalisation log4j et quels appenders de journaux sont activés

Les valeurs par défaut "éventuelles" dans la configuration conf / log4j. properties sont définies par une combinaison de scripts Zookeeper bash:

  • ZOO_LOG_DIR = . (le répertoire de travail à partir duquel zookeeper est démarré )
    • définir dans conf/log4j.properties comme zookeeper.journal.dir
  • ZOO_LOG4J_PROP = INFO, CONSOLE
    • définir dans conf/log4j.properties comme zookeeper.racine.enregistreur

L'effet de l'activation de la console log appender est que les journaux vont maintenant à stdout. Parce que bin/zkServer.sh redirige stdout et stderr vers zookeeper.dehors, les journaux log4j finissent dans zookeeper.hors. L'effet de désactiver ROLLINGFILE est qu'aucun zookeeper.fichier journal est créé.

Le gardien de zoo.le journal de sortie n'est pas tourné. La gardienne d'animaux.journal journal est d'être tourné et peut être défini pour expirer les anciens journaux.

Je voulais que les journaux roulent et soient expirés. La première chose que j'ai dû faire était de changer conf / log4j. properties pour provoquer l'expiration / suppression des anciens journaux. Je l'ai fait en définissant log4j. appender.ROLLINGFILE.MaxBackupIndex à l'intérieur de conf / log4j. properties. La deuxième chose que je devais faire était de définir le répertoire du journal, le niveau de journalisation et les appenders.

J'ai un script bash qui s'exécute chaque minute. S'il voit que zookeeper ne fonctionne pas, il fonctionne :

bin/zkServer.sh start

Je l'ai changé pour spécifier les variables environnementales attendues par bin/zkServer.sh.

sudo ZOO_LOG_DIR=/opt/zookeeper-3.4.6/logs ZOO_LOG4J_PROP='INFO,ROLLINGFILE' /opt/zookeeper-3.4.6/bin/zkServer.sh start

L'effet de la désactivation de la console log appender est que les journaux log4j ne finissent plus dans zookeeper.hors. L'effet d'activer ROLLINGFILE est que zookeeper.le fichier journal est créé, pivoté et expiré.

BTW, conf / log4j. properties était apparemment déjà dans mon classpath. Je n'ai dû apporter aucun changement à cet égard.

Cette chaîne a contribué de manière significative à mon compréhension: https://groups.google.com/forum/#! MSG/NoSQL-databases / aebivnnt0xy/doky1X9-WfwJ

36
répondu Jeff Maass 2015-03-03 16:34:58

zkServer.sh obtient ses variables d'environnement à partir de zkEnv.sh Le fichier env définit un classpath qui inclut le fichier log4j s'il se trouve à l'emplacement attendu.

ZOOXFGDIR=ZOOBINDIR/../conf

J'ai laissé tomber quelques échos dans zkServer.sh pour retracer ce qui se passe. J'ai trouvé que classpath était défini correctement, mais logdir et log4j_prop n'étaient pas définis. Je les ai donc ajoutés à zkEnv.sh. Les journaux semblent apparaître à l'emplacement prévu maintenant.

ZOO_LOG_DIR="/var/log/zookeeper"
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
6
répondu jorfus 2016-10-10 22:24:38

Aussi loin que je peux voir de zkEnv.sh le dossier zookeeper / conf est déjà dans le classpath. Il y a deux problèmes là-bas:

  1. zkServer.sh ajoute " - Dzookeeper.journal.dir=."à la commande de lancement ZK sauf si vous spécifiez la variable D'environnement ZOO_LOG_DIR
  2. Même si vous spécifiez ZOO_LOG_DIR, ZK peut toujours être incapable de trouver votre fichier log4j. properties, car zkEnv.sh spécifie CLASSPATH comme ceci:

    $CLASSPATH="$ZOOCFGDIR:$CLASSPATH"

Cela fonctionne bien si votre $CLASSPATH la variable d'environnement n'est pas vide, mais quand elle est vide, elle laisse juste un deux-points final, ce qui bousille votre classpath. J'ai changé les lignes ci-dessus pour ceci:

#add the zoocfg dir to classpath
if [ "x${CLASSPATH}" = "x" ]
then
    CLASSPATH="$ZOOCFGDIR"
else
    CLASSPATH="$ZOOCFGDIR:$CLASSPATH"
fi

Et a également passé l'environnement ZOO_LOG_DIR pour ZK, car zkServer.sh génère-Dzookeeper.journal.DIR argument VM lors du démarrage de ZK. Voici la commande qui démarre ZooKeeper pour moi, le fait lire / opt / zookeeper / conf / log4j. properties et conserver les fichiers journaux dans / opt / zimbra / log:

ZOO_LOG_DIR=/opt/zimbra/log /opt/zookeeper/bin/zkServer.sh start
2
répondu Greg S 2015-02-12 05:33:05

Je crois que la réponse à ma question Est que je dois déplacer ce fichier log4j. properties dans mon classpath et ensuite et seulement alors zkEnv.sh lecture des valeurs que j'ai définies dans log4j. properties lorsque j'appelle zkServer.sh. je crois que je ne comprenais pas comment utiliser log4j correctement.

1
répondu smuggledPancakes 2014-10-31 16:04:11

Une autre option pour changer le répertoire du journal des fichiers via la variable D'environnement ZOO_LOG_DIR est de créer le vôtre zk-server-1/conf/zookeeper-env.sh.

Lecture des scripts zookeeper-3.4.6 dist bash (T. I. zkEnv.sh), ils source que zookeeper-env.sh fichier s'il existe. Voici son contenu (mon créé):

export ZOO_HOME=$ZOOKEEPER_PREFIX
echo $ZOO_HOME
export ZOO_LOG_DIR=$ZOO_HOME/logs

J'ai l'habitude d'avoir une variable PRODUCTNAME _HOME, qui pointe vers le répertoire d'installation supérieur de zookeeper. Ce top dir semble être nommé $ ZOOKEEPER_PREFIX par Zookeeper dist, que j'aliase avec $ ZOO_HOME und l'utilise pour la variable D'environnement ZOO_LOG_DIR.

À la fin de ce post, j'ai spooled les scripts bash debug info - m'aide à enquêter sur l'environnement ou les variables locales plus les valeurs sont utilisées.

Comme je le vois, le /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf dir est sur le CLASSPATH, d'où le fichier log4j. properties est éligible pour le chargement des ressources via le class-loader de java pour le framework log4j (qui est la façon dont log4j est implémenté AFAIR).

joma@kopernikus-u:~/dev/programme/zk-local-ensemble$ bash -x zk-server-1/bin/zkServer.sh start
+ '[' x = x ']'
+ JMXLOCALONLY=false
+ '[' x = x ']'
+ echo 'JMX enabled by default'
JMX enabled by default
+ ZOOMAIN='-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain'
+ ZOOBIN=zk-server-1/bin/zkServer.sh
++ dirname zk-server-1/bin/zkServer.sh
+ ZOOBIN=zk-server-1/bin
++ cd zk-server-1/bin
++ pwd
+ ZOOBINDIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin
+ '[' -e zk-server-1/bin/../libexec/zkEnv.sh ']'
+ . /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/zkEnv.sh
++ ZOOBINDIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin
++ ZOOKEEPER_PREFIX=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
++ '[' x = x ']'
++ '[' -e /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf ']'
++ ZOOCFGDIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf
++ '[' -f /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zookeeper-env.sh ']'
++ . /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zookeeper-env.sh
+++ export ZOO_HOME=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
+++ ZOO_HOME=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
+++ echo /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/..
+++ export ZOO_LOG_DIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs
+++ ZOO_LOG_DIR=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs
++ '[' x = x ']'
++ ZOOCFG=zoo.cfg
++ ZOOCFG=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
++ '[' -f /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/java.env ']'
++ '[' x/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs = x ']'
++ '[' x = x ']'
++ ZOO_LOG4J_PROP=INFO,CONSOLE
++ '[' /home/joma/entwicklung/programme/jdk1.7.0_51 '!=' '' ']'
++ JAVA=/home/joma/entwicklung/programme/jdk1.7.0_51/bin/java
++ CLASSPATH=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:
++ for i in '"$ZOOBINDIR"/../src/java/lib/*.jar'
++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
++ '[' -e '/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../share/zookeeper/zookeeper-*.jar' ']'
++ for i in '"$ZOOBINDIR"/../zookeeper-*.jar'
++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
++ LIBPATH=("${ZOOBINDIR}"/../lib/*.jar)
++ for i in '"${LIBPATH[@]}"'
++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
++ for i in '"${LIBPATH[@]}"'
++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
++ for i in '"${LIBPATH[@]}"'
++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
++ for i in '"${LIBPATH[@]}"'
++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
++ for i in '"${LIBPATH[@]}"'
++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
++ for d in '"$ZOOBINDIR"/../build/lib/*.jar'
++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
++ CLASSPATH='/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/classes:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:'
++ case "`uname`" in
+++ uname
++ cygwin=false
++ false
+ '[' x '!=' x ']'
+ '[' x '!=' x ']'
++ dirname /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
+ '[' x/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf '!=' x/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf ']'
+ false
+ KILL=kill
+ echo 'Using config: /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg'
Using config: /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
+ '[' -z '' ']'
++ grep '^[[:space:]]*dataDir' /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
++ sed -e 's/.*=//'
+ ZOO_DATADIR=/home/joma/dev/programme/zk-local-ensemble/data/zk1
+ '[' '!' -d /home/joma/dev/programme/zk-local-ensemble/data/zk1 ']'
+ ZOOPIDFILE=/home/joma/dev/programme/zk-local-ensemble/data/zk1/zookeeper_server.pid
+ '[' '!' -w /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs ']'
+ _ZOO_DAEMON_OUT=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs/zookeeper.out
+ case $1 in
+ echo -n 'Starting zookeeper ... '
Starting zookeeper ... + '[' -f /home/joma/dev/programme/zk-local-ensemble/data/zk1/zookeeper_server.pid ']'
+ '[' 0 -eq 0 ']'
+ /bin/echo -n 24744
+ nohup /home/joma/entwicklung/programme/jdk1.7.0_51/bin/java -Dzookeeper.log.dir=/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../logs -Dzookeeper.root.logger=INFO,CONSOLE -cp '/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/classes:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../build/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/slf4j-api-1.6.1.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/netty-3.7.0.Final.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/log4j-1.2.16.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../lib/jline-0.9.94.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../zookeeper-3.4.6.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../src/java/lib/*.jar:/home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf:' -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/joma/dev/programme/zk-local-ensemble/zk-server-1/bin/../conf/zoo.cfg
+ sleep 1
+ echo STARTED
STARTED
1
répondu Joerg M. 2015-05-13 22:53:55

Peut-être pas la réponse recherchée, mais pour zookeeper-3.4.11 dans le répertoire conf, vous pouvez définir les niveaux et la configuration appropriés dans le fichier log4j. properties

0
répondu Antoni 2018-01-28 08:42:06