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} ~~~{.yaml}
cluster.name: _cluster_name_ cluster.name: _cluster_name_
node.name: _node_name_ node.name: _node_name_
network.host: 0.0.0.0
~~~ ~~~
On vérifie qu'on a bien un Java >= 1.7 activée 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 # 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 # systemctl enable elasticsearch
@ -96,7 +95,7 @@ Voir <https://www.elastic.co/guide/en/logstash/current/configuration.html>
# systemctl start logstash # 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 # systemctl enable logstash
@ -141,7 +140,7 @@ Documentation officielle : <https://www.elastic.co/guide/en/kibana/4.6/index.htm
# systemctl start kibana # 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 # 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 # 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 - # wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# aptitude update # apt update
# aptitude install elasticsearch openjdk-7-jre # apt install elasticsearch openjdk-7-jre
~~~ ~~~
Il faut penser à mettre `http://packages.elastic.co/.*` dans la whitelist de Squid si nécessaire. 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 : Pour que le démon soit géré automatiquement par systemd :
~~~
# update-rc.d elasticsearch defaults 95 10
~~~
Pour systemd :
~~~ ~~~
# systemctl enable elasticsearch # systemctl enable elasticsearch
@ -37,10 +31,10 @@ Pour systemd :
## Configuration ## 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` Dans `/etc/elasticsearch/logging.yml`
~~~ ~~~{.diff}
-rootLogger: ${es.logger.level}, console, file -rootLogger: ${es.logger.level}, console, file
+rootLogger: ${es.logger.level}, file +rootLogger: ${es.logger.level}, file
~~~ ~~~
@ -74,12 +68,14 @@ Assurez-vous de créer le répertoire :
https://github.com/lmenezes/elasticsearch-kopf 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 ## 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. 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' curl 'http://localhost:9200/_nodes?pretty=true'
~~~ ~~~
Si le master passe en DOWN, un autre est élu. Si le master passe en DOWN, un autre est élu.
~~~ ~~~
[2013-10-03 16:15:53,892][INFO ][discovery.zen ] [elastic2] master_le [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 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 ## 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 ## 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 # mkdir /home/backup-elasticsearch
$ curl -s 'localhost:9200/_flush' | grep -qe '"ok":true' # chown elasticsearch: /home/backup-elasticsearch
$ 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
~~~ ~~~
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 path.repo: ["/home/backup-elasticsearch"]
$ 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
~~~ ~~~
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 ## Principe de fonctionnement
@ -232,7 +232,7 @@ curl -X PUT localhost:9200/planet
Créer un type de donnée nommé « hacker ». 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": { "hacker": {
"properties": { "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. 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. Voir son contenu.