Configuration Logs ElasticSearch
Cet article présente la configuration de ces traces pour une installation de ElasticSearch
.
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, elasticsearch.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/elasticsearch/common
.
Variables environnement
La première configuration à mettre en place concerne l'option path.logs
dans la section Paths
du fichier elasticsearch.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/elasticsearch
.
#
# Path to log files:
#
#path.logs: /path/to/logs
path.logs: /var/log/elasticsearch
Il est nécessaire de préparer l'environnement.
#sudo mkdir /var/log/elasticsearch #sudo chown elasticsearch:adm /var/log/elasticsearch #sudo chmod o-rwx /var/log/elasticsearch
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
ElasticSearch
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.
-
CLUSTER.log
oùCLUSTER
est remplacé par le nom du cluster configuré, avec une rotation tous les 128 Mo et journalière; -
CLUSTER_deprecation.log
oùCLUSTER
est remplacé par le nom du cluster configuré, avec une rotation tous les gigas; -
CLUSTER_index_search_slowlog.log
oùCLUSTER
est remplacé par le nom du cluster configuré, avec une rotation journalière; -
CLUSTER_index_indexing_slowlog.log
oùCLUSTER
est remplacé par le nom du cluster configuré, avec une rotation journalière;
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
# log action execution errors for easier debugging
logger.action.name = org.elasticsearch.action
logger.action.level = debug
appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n
appender.rolling.type = RollingFile
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%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.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 128MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
appender.rolling.strategy.action.condition.type = IfFileName
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB
rootLogger.level = info
rootLogger.appenderRef.console.ref = console
rootLogger.appenderRef.rolling.ref = rolling
appender.deprecation_rolling.type = RollingFile
appender.deprecation_rolling.name = deprecation_rolling
appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.log
appender.deprecation_rolling.layout.type = PatternLayout
appender.deprecation_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.log.gz
appender.deprecation_rolling.filePermissions = rw-r-----
appender.deprecation_rolling.policies.type = Policies
appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.deprecation_rolling.policies.size.size = 1GB
appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy
appender.deprecation_rolling.strategy.max = 4
logger.deprecation.name = org.elasticsearch.deprecation
logger.deprecation.level = warn
logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling
logger.deprecation.additivity = false
appender.index_search_slowlog_rolling.type = RollingFile
appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling
appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog.log
appender.index_search_slowlog_rolling.layout.type = PatternLayout
appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n
appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog-%d{yyyy-MM-dd}.log
appender.index_search_slowlog_rolling.filePermissions = rw-r-----
appender.index_search_slowlog_rolling.policies.type = Policies
appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.index_search_slowlog_rolling.policies.time.interval = 1
appender.index_search_slowlog_rolling.policies.time.modulate = true
logger.index_search_slowlog_rolling.name = index.search.slowlog
logger.index_search_slowlog_rolling.level = trace
logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling
logger.index_search_slowlog_rolling.additivity = false
appender.index_indexing_slowlog_rolling.type = RollingFile
appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling
appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog.log
appender.index_indexing_slowlog_rolling.layout.type = PatternLayout
appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n
appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog-%d{yyyy-MM-dd}.log
appender.index_indexing_slowlog_rolling.filePermissions = rw-r-----
appender.index_indexing_slowlog_rolling.policies.type = Policies
appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.index_indexing_slowlog_rolling.policies.time.interval = 1
appender.index_indexing_slowlog_rolling.policies.time.modulate = true
logger.index_indexing_slowlog.name = index.indexing.slowlog.index
logger.index_indexing_slowlog.level = trace
logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling
logger.index_indexing_slowlog.additivity = false
appender.audit_rolling.type = RollingFile
appender.audit_rolling.name = audit_rolling
appender.audit_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_access.log
appender.audit_rolling.layout.type = PatternLayout
appender.audit_rolling.layout.pattern = [%d{ISO8601}] %m%n
appender.audit_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_access-%d{yyyy-MM-dd}.log
appender.audit_rolling.filePermissions = rw-r-----
appender.audit_rolling.policies.type = Policies
appender.audit_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.audit_rolling.policies.time.interval = 1
appender.audit_rolling.policies.time.modulate = true
logger.xpack_security_audit_logfile.name = org.elasticsearch.xpack.security.audit.logfile.LoggingAuditTrail
logger.xpack_security_audit_logfile.level = info
logger.xpack_security_audit_logfile.appenderRef.audit_rolling.ref = audit_rolling
logger.xpack_security_audit_logfile.additivity = false
logger.xmlsig.name = org.apache.xml.security.signature.XMLSignature
logger.xmlsig.level = error
logger.samlxml_decrypt.name = org.opensaml.xmlsec.encryption.support.Decrypter
logger.samlxml_decrypt.level = fatal
logger.saml2_decrypt.name = org.opensaml.saml.saml2.encryption.Decrypter
logger.saml2_decrypt.level = fatal
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 à elasticsearch:elasticsearch
, or il est souhaité que ce soit elasticsearch: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/elasticsearch
Ainsi, les propriétés sont hérités lors de la création d'un nouveau fichier dans le répertoire /var/log/elasticsearch
.
JVM
Un autre type de trace est configuré pour le garbage collector
de la JVM
dans le fichier jvm.properties
, dans le répertoire config
de la distribution.
En fonction de la version utilisée, l'option loggc
(version 8
de Java
) ou log:gc
(version 9
) doit être modifiée. Seul le répertoire de stockage est modifié, avec l'emplacement /var/log/elasticsearch
au lieu du sous répertoire logs
de l'instance.
## JDK 8 GC logging
8:-XX:+PrintGCDetails
8:-XX:+PrintGCDateStamps
8:-XX:+PrintTenuringDistribution
8:-XX:+PrintGCApplicationStoppedTime
#8:-Xloggc:logs/gc.log
8:-Xloggc:/var/log/elasticsearch/gc.log
8:-XX:+UseGCLogFileRotation
8:-XX:NumberOfGCLogFiles=32
8:-XX:GCLogFileSize=64m
# JDK 9+ GC logging
#9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m
9-:-Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,pid,tags:filecount=32,filesize=64m
# due to internationalization enhancements in JDK 9 Elasticsearch need to set the provider to COMPAT otherwise
# time/date parsing will break in an incompatible way for some date patterns and locals
9-:-Djava.locale.providers=COMPAT
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
.