Configuration Log Logstash

De EjnTricks

Cet article présente la configuration de ces traces pour une installation de Logstash.

Pour rappel, l'installation a été réalisée manuellement avec une externalisation du fichier de configuration.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Pré requis

La configuration des fichiers traces s'effectue à l'aide de deux fichiers dans le répertoire config. Le premier, logstash.yml, permet de positionner des variables d'environnements. Le second, log4j2.properties contient la configuration de l'outil Log4J2.

Dans le cadre de cette installation, le répertoire config a été externalisé dans le répertoire /var/opt/logstash/common.


Icon-Configuration-Settings.png Variables environnement

La première configuration a mettre en place concerne l'option path.logs dans la section Debugging Settings du fichier logstash.yml. Il faut spécifier l'emplacement du répertoire où sont créés les fichiers traces. Afin de centraliser les logs, les fichiers seront placés dans le répertoire /var/log/logstash.

# ------------ Debugging Settings --------------
#
# Options for log.level:
#   * fatal
#   * error
#   * warn
#   * info (default)
#   * debug
#   * trace
#
# log.level: info
# path.logs:
path.logs: /var/log/logstash/

Il est nécessaire de préparer l'environnement.

#sudo mkdir /var/log/logstash
#sudo chown logstash:adm /var/log/logstash
#sudo chmod o-rwx /var/log/logstash

A noter, les permissions sont accordées au groupe adm comme cela est d'usage pour ce type de fichier sur une instance Linux.


Logo LOG4J.jpg Log4J2

Logstash utilise le framework Log4J2 pour générer les traces d'exécution. La configuration s'effectue simplement à travers le fichier log4j2.properties dans le répertoire config.

La configuration standard permet de générer un ensemble de fichier.

  • logstash-FORMAT.logFORMAT est remplacé par le format des traces, avec une rotation tous les 100;
  • logstash-slowlog-FORMAT.logFORMAT est remplacé par le format des traces, avec une rotation tous les 100;


Icon ACL.png Permission

L'objectif est d'avoir les permissions suivantes.

  • Lecture et écriture pour propriétaire;
  • Lecture pour le groupe;
  • Aucune pour les utilisateurs.

L'utilisation de Log4J2 permet de mettre en place ces sécurité à l'aide de l'élément de configuration filePermissions sur les appenders. Pour cela, il faut modifier le fichier log4j2.properties afin d'y ajouter des configurations du type suivant.

appender.<APPENDER_NAME>.filePermissions = rw-r-----

<APPENDER_NAME> est remplacé par le nom de l'appender cible.

Dans le cadre de cette installation, ils sont tous modifiés.

status = error
name = LogstashPropertiesConfig

appender.console.type = Console
appender.console.name = plain_console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %m%n

appender.json_console.type = Console
appender.json_console.name = json_console
appender.json_console.layout.type = JSONLayout
appender.json_console.layout.compact = true
appender.json_console.layout.eventEol = true

appender.rolling.type = RollingFile
appender.rolling.name = plain_rolling
appender.rolling.fileName = ${sys:ls.logs}/logstash-${sys:ls.log.format}.log
appender.rolling.filePattern = ${sys:ls.logs}/logstash-${sys:ls.log.format}-%d{yyyy-MM-dd}-%i.log.gz
appender.rolling.filePermissions = rw-r-----
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %-.10000m%n
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 100MB

appender.json_rolling.type = RollingFile
appender.json_rolling.name = json_rolling
appender.json_rolling.fileName = ${sys:ls.logs}/logstash-${sys:ls.log.format}.log
appender.json_rolling.filePattern = ${sys:ls.logs}/logstash-${sys:ls.log.format}-%d{yyyy-MM-dd}-%i.log.gz
appender.json_rolling.filePermissions = rw-r-----
appender.json_rolling.policies.type = Policies
appender.json_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.json_rolling.policies.time.interval = 1
appender.json_rolling.policies.time.modulate = true
appender.json_rolling.layout.type = JSONLayout
appender.json_rolling.layout.compact = true
appender.json_rolling.layout.eventEol = true
appender.json_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.json_rolling.policies.size.size = 100MB


rootLogger.level = ${sys:ls.log.level}
rootLogger.appenderRef.console.ref = ${sys:ls.log.format}_console
rootLogger.appenderRef.rolling.ref = ${sys:ls.log.format}_rolling

# Slowlog

appender.console_slowlog.type = Console
appender.console_slowlog.name = plain_console_slowlog
appender.console_slowlog.layout.type = PatternLayout
appender.console_slowlog.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %m%n

appender.json_console_slowlog.type = Console
appender.json_console_slowlog.name = json_console_slowlog
appender.json_console_slowlog.layout.type = JSONLayout
appender.json_console_slowlog.layout.compact = true
appender.json_console_slowlog.layout.eventEol = true

appender.rolling_slowlog.type = RollingFile
appender.rolling_slowlog.name = plain_rolling_slowlog
appender.rolling_slowlog.fileName = ${sys:ls.logs}/logstash-slowlog-${sys:ls.log.format}.log
appender.rolling_slowlog.filePattern = ${sys:ls.logs}/logstash-slowlog-${sys:ls.log.format}-%d{yyyy-MM-dd}-%i.log.gz
appender.rolling_slowlog.filePermissions = rw-r-----
appender.rolling_slowlog.policies.type = Policies
appender.rolling_slowlog.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling_slowlog.policies.time.interval = 1
appender.rolling_slowlog.policies.time.modulate = true
appender.rolling_slowlog.layout.type = PatternLayout
appender.rolling_slowlog.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %.10000m%n
appender.rolling_slowlog.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling_slowlog.policies.size.size = 100MB

appender.json_rolling_slowlog.type = RollingFile
appender.json_rolling_slowlog.name = json_rolling_slowlog
appender.json_rolling_slowlog.fileName = ${sys:ls.logs}/logstash-slowlog-${sys:ls.log.format}.log
appender.json_rolling_slowlog.filePattern = ${sys:ls.logs}/logstash-slowlog-${sys:ls.log.format}-%d{yyyy-MM-dd}-%i.log.gz
appender.json_rolling_slowlog.filePermissions = rw-r-----
appender.json_rolling_slowlog.policies.type = Policies
appender.json_rolling_slowlog.policies.time.type = TimeBasedTriggeringPolicy
appender.json_rolling_slowlog.policies.time.interval = 1
appender.json_rolling_slowlog.policies.time.modulate = true
appender.json_rolling_slowlog.layout.type = JSONLayout
appender.json_rolling_slowlog.layout.compact = true
appender.json_rolling_slowlog.layout.eventEol = true
appender.json_rolling_slowlog.policies.size.type = SizeBasedTriggeringPolicy
appender.json_rolling_slowlog.policies.size.size = 100MB

logger.slowlog.name = slowlog
logger.slowlog.level = trace
logger.slowlog.appenderRef.console_slowlog.ref = ${sys:ls.log.format}_console_slowlog
logger.slowlog.appenderRef.rolling_slowlog.ref = ${sys:ls.log.format}_rolling_slowlog
logger.slowlog.additivity = false


User-group-icon.png Nom groupe

Les fichiers de trace étant créés par le compte de démarrage du service, les permissions sont hérités de celui-ci. Or il n'existe pas d'option pour indiquer le groupe. Donc dans le cadre de cette installation, les permissions sont affectées à logstash:logstash, or il est souhaité que ce soit logstash:adm.

La documentation de Log4J2 indique qu'il est possible d'effectuer ce paramétrage à l'aide de la propriété fileGroup, cf https://logging.apache.org/log4j/2.x/manual/appenders.html#FileAppender.

Cependant, cela ne semble pas fonctionner avec cette installation, et pour être homogène avec les autres produits de la suite ELK, la commande chmod est utilisée avec l'argument g+s sur le répertoire des traces.

#sudo chmod g+s /var/log/logstash

Ainsi, les propriétés sont hérités lors de la création d'un nouveau fichier dans le répertoire /var/log/logstash.


Java format icon.png JVM

Un autre type de trace est configuré pour le garbage collector de la JVM dans le fichier startup.options, dans le répertoire config de la distribution.

L'option LS_GC_LOG_FILE permet de spécifier l'emplacement du fichier, soit /var/log/logstash/gc.log.

# Enable GC logging by uncommenting the appropriate lines in the GC logging
# section in jvm.options
LS_GC_LOG_FILE=/var/log/logstash/gc.log

Warning-icon.png Attention contrairement aux configuration Log4J2, il n'est pas possible de spécifier des permissions sur ce fichier. Les droits seront alors ceux par défaut, soit 644.