diff --git a/HowtoELK.md b/HowtoELK.md index 8e738c01..51ae970a 100644 --- a/HowtoELK.md +++ b/HowtoELK.md @@ -17,7 +17,7 @@ Elasticsearch est un serveur de base de donnée qui dispose d'une interface REST ~~~ # wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add - # echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | tee -a /etc/apt/sources.list.d/elastic.list -# apt update && apt install elasticsearch openjdk-7-jre openjdk-7-jre-headless +# apt install elasticsearch openjdk-7-jre openjdk-7-jre-headless ~~~ ## Configuration de base @@ -47,17 +47,13 @@ Plus détails sur la bonne configuration d'Elasticsearch sont sur [HowtoElasticS # chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/ ~~~ -~~~ -# cd /etc; git add -A; git commit -m "Install Elasticsearch" -~~~ - ## Démarrage ~~~ # systemctl start elasticsearch ~~~ -Pour que le démon soit géré automatiquement par systemd : +Pour que le démon soit géré automatiquement par SystemD : ~~~ # systemctl enable elasticsearch @@ -80,8 +76,7 @@ Documentation officielle : # systemctl start logstash ~~~ -Pour que le démon soit géré automatiquement par systemd : +Pour que le démon soit géré automatiquement par SystemD : ~~~ # systemctl enable logstash @@ -112,7 +107,7 @@ Documentation officielle : /dev/null +$ curl -s 'localhost:9200/_flush' | grep -qe '"ok":true' +$ if [ $? -eq 0 ]; then + rsync -a --delete /var/lib/elasticsearch/ /home/backup/elasticsearch/ + else + echo "Error when flushing ES translog indexes." + fi +$ curl -s -XPUT 'localhost:9200/_settings' -d '{"index.translog.disable_flush": false}' > /dev/null ~~~ -NB : en cas de cluster multi-nœuds, il faut penser que le filesystem doit être partagé (via NFS ou autre) car chaque nœud ne gère que ses propres données. - -Le dépôt doit être référencé dans la configuration `/etc/elasticsearch/elasticsearch.yml` : +Une sauvegarde plus avancée est d'utiliser les snaphosts, un exemple : ~~~ -path.repo: ["/home/backup-elasticsearch"] +$ cd /srv/snapshots +$ for i in $(ls -1d snapshot-* | head -n -10 | sed s'/snapshot-snapshot_//g'); do curl -s -XDELETE "localhost:9200/_snapshot/backup/snaps hot_${i}"; done +$ date=$(date +%Y-%m-%d) +$ curl -s -XDELETE "localhost:9200/_snapshot/backup/snapshot_${date}" | grep -v acknowledged..true +$ curl -s -XPUT "localhost:9200/_snapshot/backup/snapshot_${date}?wait_for_completion=true" -o /tmp/es_snapshot_${date}.log ~~~ -Après restart d'Elasticsearch on lui fait créer le snapshot **evobackup** : - -~~~ -# curl -XPUT 127.0.0.1:9200/_snapshot/evobackup -d '{"type": "fs", "settings": {"location": "/home/backup-elasticsearch/evobackup", "compress": true}}' -~~~ - -Enfin, dans un script qui tourne régulièrement, on provoque la fixation d'un snapshot : - -~~~ -date=$(date +%H) -curl -s -X DELETE "127.0.0.1:9200/_snapshot/evobackup/h${date}" | grep -v acknowledged..true -curl -s -X PUT "127.0.0.1:9200/_snapshot/evobackup/h${date}?wait_for_completion=true" -o /tmp/es_snapshot_h${date}.log -~~~ - -Ici, on crée un snapshot portant le numéro de l'heure courante. Il est supprimé avant d'être recréé afin d'avoir des snapshots "roulants". +Attention, en mode cluster il faut gérer des montages NFS sur les nœuds slaves car chacun écrit uniquement les données qu'il a ! ## Principe de fonctionnement @@ -232,7 +231,7 @@ curl -X PUT localhost:9200/planet Créer un type de donnée nommé « hacker ». ~~~ -curl -X PUT localhost:9200/planet/hacker/_mapping -d ' +curl -X PUT localhost:9200/planet/hacker/_mapping -d @- <<< ' { "hacker": { "properties": { @@ -251,7 +250,7 @@ curl -X PUT localhost:9200/planet/hacker/_mapping -d ' Créer un document de type hacker avec l'ID 1. ~~~ -curl -X PUT localhost:9200/planet/hacker/1 -d '{"handle": "jean-michel", "age": 18}' +curl -X PUT localhost:9200/planet/hacker/1 -d @- <<< '{"handle": "jean-michel", "age": 18}' ~~~ Voir son contenu.