Déplacement section rotaion des logs dans la partie configuration 7 ajout commande ménage gc*

This commit is contained in:
whirigoyen 2023-01-02 16:15:31 +01:00
parent 77da143c12
commit a36638daba

View file

@ -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 <https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking-changes.html>.
## 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 <https://www.elastic.co/guide/en/elasticsearch/reference/7.17/modules-network.html#network-interface-values>.
### 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