From a36638dabaa2e7483d7110dc0ff3e2cbd57aeca5 Mon Sep 17 00:00:00 2001 From: whirigoyen Date: Mon, 2 Jan 2023 16:15:31 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9placement=20section=20rotaion=20des=20lo?= =?UTF-8?q?gs=20dans=20la=20partie=20configuration=207=20ajout=20commande?= =?UTF-8?q?=20m=C3=A9nage=20gc*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoElasticsearch.md | 128 +++++++++++++++++++++++------------------- 1 file changed, 70 insertions(+), 58 deletions(-) diff --git a/HowtoElasticsearch.md b/HowtoElasticsearch.md index 0b0dbf2f..c58a3883 100644 --- a/HowtoElasticsearch.md +++ b/HowtoElasticsearch.md @@ -78,6 +78,7 @@ Si vous faites la mise à jour depuis une version inférieure à 5.0, il faut pe La liste complète des changements est diponible sur . + ## Configuration de base Les paramètres système se trouvent dans le fichier `/etc/default/elasticsearch`, les paramètres liés à la JVM sont dans `/etc/elasticsearch/jvm.options` et `/etc/elasticsearch/jvm.options.d/*.options` (*Note:* on privilégiera le deuxième - Attention, l'extention .options est importante pour que les réglages soient pris en compte) et les options applicatives (nom du cluster, nom du nœud, mémoire, réseau) se trouvent dans le fichier `/etc/elasticsearch/elasticsearch.yml`. @@ -129,6 +130,7 @@ On force directement dans les options de la JVM via le fichier `/etc/elasticsear ES_JAVA_OPTS="-Djava.io.tmpdir=/var/lib/elasticsearch/tmp" ~~~ + ### Mémoire allouée La mémoire allouée au tas de la JVM pour ElasticSearch sont les lignes `-Xms` et `-Xmx` dans `/etc/elasticsearch/jvm.options.d/evolinux.options`. @@ -152,6 +154,7 @@ Il est possible d'utiliser des adresses virtuelles, telles que `_local_` (127.0. Tous les détails sont sur . + ### Mode "production" Lorsqu'Elasticsearch est configuré pour écouter sur une IP non locale, il passe en mode "production". @@ -160,6 +163,73 @@ Il active alors un certain nombre de "bootstrap checks" qui bloquent le démarra On peut aussi forcer l'exécution de ces contrôles en activant `es.enforce.bootstrap.checks` à *true* dans les options de la JVM + +### Rotation des logs + +ElasticSearch fait de lui-même une rotation des logs en datant le fichier du jour et en créant un nouveau fichier. Par contre, aucune compression ni nettoyage n'est fait. Il est possible de déclencher une tâche tous les jours pour faire cela : + +~~~{.bash} +#!/bin/sh + +LOG_DIR=/var/log/elasticsearch +USER=elasticsearch +MAX_AGE=365 + +find ${LOG_DIR} -type f -user ${USER} \( -name "*.log.????-??-??" -o -name "*-????-??-??.log" \) -exec gzip --best {} \; +find ${LOG_DIR} -type f -user ${USER} \( -name "*.log.????-??-??.gz" -o -name "*-????-??-??.log.gz" \) -ctime +${MAX_AGE} -delete +~~~ + +En l'indiquant dans une crontab elle sera exécutée quand vous le souhaitez, exemple : + +~~~ +# crontab -l +10 1 * * * /path/to/rotate_elasticsearch_logs.sh +~~~ + +Le ramasse-miettes de la JVM produit aussi des logs, mais la JVM ne permet pas de faire leur rotation avec le jour dans le nom du fichier. A cause de cela, on ne peut pas juste mettre en place un simple cron de compression (car cela perturbe complètement la numérotation). A la place, on désactive la rotation par la JVM et on met en place un `logrotate` à la place : + +Dans `/etc/elasticsearch/jvm.options`, remplacer : + +~~~ +-Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,pid,tags:filecount=32,filesize=64m +par +-Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,pid,tags:filecount=0 +~~~ + +Puis redémarrer le service `elasticsearch`. + +Et créer `/etc/logrotate.d/elasticsearch` : + +~~~ +/var/log/elasticsearch/gc.log { + su elasticsearch elasticsearch + daily + rotate 365 + compress + nodelaycompress + missingok + copytruncate + dateext + dateformat .%Y-%m-%d +} +~~~ + +On peut ensuite faire le ménage et compresser les anciens `/var/log/elasticsearch/gc.log.??`, par exemple avec : + +~~~ +for f in $(ls -1 /var/log/elasticsearch/gc*[!.gz]); do gzip -f $f; done +~~~ + +Pour `logstash` : + +~~~ +LOG_DIR=/var/log/logstash/ +USER=logstash +MAX_AGE=365 +find ${LOG_DIR} -type f -user ${USER} -name "logstash-*-????-??-??.log" -exec gzip --best {} \; +~~~ + + ## Configuration avancée * Si on veut lancer Elasticsearch avec une JVM différente que celle par défaut sur le système, on peut définir JAVA_HOME dans `/etc/default/elasticsearch` : @@ -944,64 +1014,6 @@ $ curl -XPOST "localhost:9200/_snapshot/snaprepo/snapshot.daily/_restore" > *Note* : si vous avez un message d'erreur du type `{"error":"SnapshotRestoreException[[snaprepo:snapshot.daily] cannot restore index [foo] because it's open]","status":500}` vous pouvez fermer l'index en faisant `curl -XPOST "localhost:9200/foo/_close` -## Rotation des logs - -Elasticsearch fait de lui-même une rotation des logs en datant le fichier du jour et en créant un nouveau fichier. Par contre, aucune compression ni nettoyage n'est fait. Il est possible de déclencher une tâche tous les jours pour faire cela : - -~~~{.bash} -#!/bin/sh - -LOG_DIR=/var/log/elasticsearch -USER=elasticsearch -MAX_AGE=365 - -find ${LOG_DIR} -type f -user ${USER} \( -name "*.log.????-??-??" -o -name "*-????-??-??.log" \) -exec gzip --best {} \; -find ${LOG_DIR} -type f -user ${USER} \( -name "*.log.????-??-??.gz" -o -name "*-????-??-??.log.gz" \) -ctime +${MAX_AGE} -delete -~~~ - -En l'indiquant dans une crontab elle sera exécutée quand vous le souhaitez, exemple : - -~~~ -# crontab -l -10 1 * * * /path/to/rotate_elasticsearch_logs.sh -~~~ - -Le ramasse-miettes de la JVM produit aussi des logs, mais la JVM ne permet pas de faire leur rotation avec le jour dans le nom du fichier. A cause de cela, on ne peut pas juste mettre en place un simple cron de compression (car cela perturbe complètement la numérotation). A la place, on désactive la rotation par la JVM et on met en place un `logrotate` à la place : - -Dans `/etc/elasticsearch/jvm.options`, remplacer : - -~~~ --Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,pid,tags:filecount=32,filesize=64m -par --Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,pid,tags:filecount=0 -~~~ - -Puis redémarrer le service `elasticsearch`. - -Et créer `/etc/logrotate.d/elasticsearch` : - -~~~ -/var/log/elasticsearch/gc.log { - su elasticsearch elasticsearch - daily - rotate 365 - compress - nodelaycompress - missingok - copytruncate - dateext - dateformat .%Y-%m-%d -} -~~~ - -Pour `logstash` : - -~~~ -LOG_DIR=/var/log/logstash/ -USER=logstash -MAX_AGE=365 -find ${LOG_DIR} -type f -user ${USER} -name "logstash-*-????-??-??.log" -exec gzip --best {} \; -~~~ ## cluster