Répertoire logs Nifi

De EjnTricks

Cet article présente la configuration standard de l'emplacement des fichiers traces.

L'instance NiFi est déployée sous C:\Apps\Nifi\1.9.2.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Etude

Par défaut, trois fichiers trace sont créés dans le répertoire logs d'une instance NiFi :

  • nifi-app.log
  • nifi-bootstrap.log
  • nifi-user.log

Or pour centraliser les fichiers traces, il peut être nécessaire de stocker ces fichiers dans un autre répertoire, comme /var/log sur un système Linux par exemple.

XML format icon.png Configuration

Le système de trace embarqué est Logback et le fichier de configuration logback.xml, dans le répertoire conf, est utilisé pour spécifier les fichiers traces mis en place. Par exemple, la configuration de la trace nifi-app.log est la suivante :

    <appender name="APP_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${org.apache.nifi.bootstrap.config.log.dir}/nifi-app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--
              For daily rollover, use 'app_%d.log'.
              For hourly rollover, use 'app_%d{yyyy-MM-dd_HH}.log'.
              To GZIP rolled files, replace '.log' with '.log.gz'.
              To ZIP rolled files, replace '.log' with '.log.zip'.
            -->
            <fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/nifi-app_%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <!-- keep 30 log files worth of history -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <immediateFlush>true</immediateFlush>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%date %level [%thread] %logger{40} %msg%n</pattern>
        </encoder>
    </appender>

Donc, le répertoire est spécifié à l'aide de la variable d'environnement org.apache.nifi.bootstrap.config.log.dir.


Command-icon.png Démarrage

Pour un démarrage sous Windows, la console indique les messages suivants.

c:\Apps\Nifi\1.9.2>bin\run-nifi.bat
The JAVA_HOME environment variable is not defined correctly.
Instead the PATH will be used to find the java executable.

2019-10-15 09:28:09,936 INFO [main] org.apache.nifi.bootstrap.Command Starting Apache NiFi...
2019-10-15 09:28:09,936 INFO [main] org.apache.nifi.bootstrap.Command Working Directory: c:\Apps\Nifi\1997F9~1.2
2019-10-15 09:28:09,937 INFO [main] org.apache.nifi.bootstrap.Command Command: java -classpath c:\Apps\Nifi\1997F9~1.2\.\conf;
c:\Apps\Nifi\1997F9~1.2\.\lib\javax.servlet-api-3.1.0.jar;c:\Apps\Nifi\1997F9~1.2\.\lib\jcl-over-slf4j-1.7.25.jar;
c:\Apps\Nifi\1997F9~1.2\.\lib\jetty-schemas-3.1.jar;c:\Apps\Nifi\1997F9~1.2\.\lib\jul-to-slf4j-1.7.25.jar;
c:\Apps\Nifi\1997F9~1.2\.\lib\log4j-over-slf4j-1.7.25.jar;c:\Apps\Nifi\1997F9~1.2\.\lib\logback-classic-1.2.3.jar;
c:\Apps\Nifi\1997F9~1.2\.\lib\logback-core-1.2.3.jar;c:\Apps\Nifi\1997F9~1.2\.\lib\nifi-api-1.9.2.jar;
c:\Apps\Nifi\1997F9~1.2\.\lib\nifi-framework-api-1.9.2.jar;c:\Apps\Nifi\1997F9~1.2\.\lib\nifi-nar-utils-1.9.2.jar;
c:\Apps\Nifi\1997F9~1.2\.\lib\nifi-properties-1.9.2.jar;c:\Apps\Nifi\1997F9~1.2\.\lib\nifi-runtime-1.9.2.jar;
c:\Apps\Nifi\1997F9~1.2\.\lib\slf4j-api-1.7.25.jar -Dorg.apache.jasper.compiler.disablejsr199=true -Xmx512m -Xms512m -Djavax.security.auth.useSubjectCredsOnly=true
-Djava.security.egd=file:/dev/urandom -Dsun.net.http.allowRestrictedHeaders=true -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true
-XX:+UseG1GC -Djava.protocol.handler.pkgs=sun.net.www.protocol -Dnifi.properties.file.path=c:\Apps\Nifi\1997F9~1.2\.\conf\nifi.properties
-Dnifi.bootstrap.listen.port=59307 -Dapp=NiFi -Dorg.apache.nifi.bootstrap.config.log.dir=c:\Apps\Nifi\1997F9~1.2\bin\..\\logs org.apache.nifi.NiFi

Attention, la console indique le démarrage d'un nouveau process Java. Mais celui-ci est bien exécuté depuis un process en cours, le message vient de la classe org.apache.nifi.bootstrap.Command. Cependant il est constaté que la valeur c:\Apps\Nifi\1997F9~1.2\bin\..\\logs est spécifiée sur la variable d'environnement org.apache.nifi.bootstrap.config.log.dir.

Il est également important de regarder les scripts de démarrage, run-nifi.bat sous Windows ou nifi.sh sous Linux.

Concernant <cod>run-nifi.bt</code>, les instructions suivantes sont mises en place.

set JAVA_ARGS=-Dorg.apache.nifi.bootstrap.config.log.dir=%NIFI_LOG_DIR% -Dorg.apache.nifi.bootstrap.config.pid.dir=%NIFI_PID_DIR% -Dorg.apache.nifi.bootstrap.config.file=%BOOTSTRAP_CONF_FILE%

Donc la variable est spécifiée à l'aide d'une autre variable d'environnement NIFI_LOG_DIR. Or celle-ci est mise en place dans le script nifi-env.bat, qui est exécuté au démarrage.

set NIFI_ROOT=%~sdp0..\

rem The directory for the NiFi pid file
set NIFI_PID_DIR=%NIFI_ROOT%\run

rem The directory for NiFi log files
set NIFI_LOG_DIR=%NIFI_ROOT%\logs


Pour les systèmes Linux, les scripts de démarrages sont légèrement différent. Le fichier nifi.sh contient les instructions suivantes pour configurer les emplacements communs.

    #setup directory parameters
    BOOTSTRAP_LOG_PARAMS="-Dorg.apache.nifi.bootstrap.config.log.dir='${NIFI_LOG_DIR}'"
    BOOTSTRAP_PID_PARAMS="-Dorg.apache.nifi.bootstrap.config.pid.dir='${NIFI_PID_DIR}'"
    BOOTSTRAP_CONF_PARAMS="-Dorg.apache.nifi.bootstrap.config.file='${BOOTSTRAP_CONF}'"

La variable NIFI_LOG_DIR est mise en place dans le script nifi-env.sh.

export NIFI_HOME=$(cd "${SCRIPT_DIR}" && cd .. && pwd)

#The directory for the NiFi pid file
export NIFI_PID_DIR="${NIFI_HOME}/run"

#The directory for NiFi log files
export NIFI_LOG_DIR="${NIFI_HOME}/logs"


Lors du démarrage de NiFi, les variables d'environnement passées au script seront fournis au process démarré par la classe org.apache.nifi.bootstrap.Command.


Icon-Configuration-Settings.png Configuration

Afin de spécifier un emplacement différent, il suffit donc de modifier la déclaration de la variable NIFI_LOG_DIR dans les scripts nifi-env.bat ou nifi.sh, en fonction de l'OS.

Dans le cadre de Linux, il suffit donc de modifier le script ainsi pour générer les fichiers traces dans le répertoire /var/log/nifi.

export NIFI_HOME=$(cd "${SCRIPT_DIR}" && cd .. && pwd)

#The directory for the NiFi pid file
export NIFI_PID_DIR="${NIFI_HOME}/run"

#The directory for NiFi log files
#export NIFI_LOG_DIR="${NIFI_HOME}/logs"
export NIFI_LOG_DIR="/var/log/nifi"