Nettoyage Elasticsearch et ELK

This commit is contained in:
Jérémy Lecour 2016-09-28 11:37:31 +02:00 committed by Jérémy Lecour
parent 5309b7269b
commit 6c1393c3b2
2 changed files with 39 additions and 40 deletions

View file

@ -29,7 +29,6 @@ Elasticsearch est un serveur de base de donnée qui dispose d'une interface REST
~~~{.yaml}
cluster.name: _cluster_name_
node.name: _node_name_
network.host: 0.0.0.0
~~~
On vérifie qu'on a bien un Java >= 1.7 activée
@ -58,7 +57,7 @@ Plus détails sur la bonne configuration d'Elasticsearch sont sur [HowtoElasticS
# 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
@ -96,7 +95,7 @@ Voir <https://www.elastic.co/guide/en/logstash/current/configuration.html>
# 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
@ -141,7 +140,7 @@ Documentation officielle : <https://www.elastic.co/guide/en/kibana/4.6/index.htm
# systemctl start kibana
~~~
Pour que le démon soit géré automatiquement par SystemD :
Pour que le démon soit géré automatiquement par systemd :
~~~
# systemctl enable kibana

View file

@ -17,19 +17,13 @@ Nous utilisons les paquets Debian distribués par Elasticsearch, les paquets off
~~~
# echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# aptitude update
# aptitude install elasticsearch openjdk-7-jre
# apt update
# apt install elasticsearch openjdk-7-jre
~~~
Il faut penser à mettre `http://packages.elastic.co/.*` dans la whitelist de Squid si nécessaire.
Pour que le démon soit géré automatiquement par SysV init :
~~~
# update-rc.d elasticsearch defaults 95 10
~~~
Pour systemd :
Pour que le démon soit géré automatiquement par systemd :
~~~
# systemctl enable elasticsearch
@ -37,10 +31,10 @@ Pour systemd :
## Configuration
Il est conseillé de ne pas activer le logging stdout vers la console. Mais de conserver seulement vers les logs. (/var/log/elasticsearch).
Il est conseillé de ne pas activer le logging stdout vers la console, mais de conserver seulement vers les logs. (`/var/log/elasticsearch`).
Dans `/etc/elasticsearch/logging.yml`
~~~
~~~{.diff}
-rootLogger: ${es.logger.level}, console, file
+rootLogger: ${es.logger.level}, file
~~~
@ -74,12 +68,14 @@ Assurez-vous de créer le répertoire :
https://github.com/lmenezes/elasticsearch-kopf
~~~
/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
~~~
## Mode cluster
Exemples avec 3 instances nommés **elastic1**, **elastic2** et **elastic3**. Avec le mode d'auto découverte.
_Paragraphe à revoir car l'auto-découverte et le multicast ont changé._
Exemples avec 3 instances nommés **elastic1**, **elastic2** et **elastic3**.
Spécifier un nom de cluster dans `elasticsearch.yml` sur chaque machine.
@ -134,10 +130,8 @@ On peut consulter le status en faisant des requêtes de types RESTFul. :
curl 'http://localhost:9200/_nodes?pretty=true'
~~~
Si le master passe en DOWN, un autre est élu.
~~~
[2013-10-03 16:15:53,892][INFO ][discovery.zen ] [elastic2] master_le
ft [[elastic1][3tn7uHSHR8-donXO6JXFRA][inet[/192.168.4.201:9300]]], reason [shut
@ -159,40 +153,46 @@ discovery.zen.ping.unicast.hosts: ["elastic2", "elastic3"]
## Check Nagios
On check sur la page `/_cluster/health` si le status n'est pas en **red**.
On check sur la page `/_cat/health` si le status n'est pas en **red**.
~~~
/usr/lib/nagios/plugins/check_http -H localhost -u /_cluster/health -p 9200 -r '"status":"red",' --invert-regex
/usr/lib/nagios/plugins/check_http -I 127.0.0.1 -u /_cat/health?h=st -p 9200 -r 'red' --invert-regex
~~~
## Backup
Une sauvegarde simple peut être de sauvegarder `/var/lib/elasticsearch/`
La sauvegarde se fait par snapshots, dans un ou plusiers dépôts.
Il est néanmoins conseillé de désactiver/flusher les translogs avant la sauvegarde, puis de les réactiver :
On crée le dépôt sur le filesystem :
~~~
$ curl -s -X PUT 'localhost:9200/_settings' -d '{"index.translog.disable_flush": true}' >/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
# mkdir /home/backup-elasticsearch
# chown elasticsearch: /home/backup-elasticsearch
~~~
Une sauvegarde plus avancée est d'utiliser les snaphosts, un exemple :
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` :
~~~
$ 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
path.repo: ["/home/backup-elasticsearch"]
~~~
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 !
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".
## Principe de fonctionnement
@ -232,7 +232,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 +251,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.