Configuration Log Logstash
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.
Sommaire
Votre avis
Nobody voted on this yet
|
|
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
.
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
.
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.log
oùFORMAT
est remplacé par le format des traces, avec une rotation tous les 100; -
logstash-slowlog-FORMAT.log
oùFORMAT
est remplacé par le format des traces, avec une rotation tous les 100;
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-----
Où <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
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
.
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
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
.