relecture rapide

This commit is contained in:
gcolpart 2016-10-10 21:34:30 +02:00
parent 4dba8d6720
commit 419ca34149

View file

@ -1,18 +1,15 @@
--- ---
title: Howto Elasticsearch : installation et usage courant title: Howto Elasticsearch
--- ...
_Page en cours de vérification._ _Page en cours de vérification._
* Site officiel : <https://www.elastic.co/fr/products/elasticsearch>
* Documentation : <https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html> * Documentation : <https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html>
* Forum communautaire : <https://discuss.elastic.co/c/elasticsearch> * Forum : <https://discuss.elastic.co/c/elasticsearch>
Pour une installationde basique la suite ELK, voir l'article [HowtoELK]().
## Installation ## Installation
Nous utilisons les paquets Debian distribués par Elasticsearch, les paquets officiels Debian n'étant pas à jour (Elasticsearch est en développement actif…) : Vu le développement actif d'Elasticsearch, nous préconisons l'installation des paquets Debian distribués par Elasticsearch :
~~~ ~~~
# 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
@ -20,8 +17,6 @@ Nous utilisons les paquets Debian distribués par Elasticsearch, les paquets off
# apt 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.
Pour que le démon soit géré automatiquement par systemd : Pour que le démon soit géré automatiquement par systemd :
~~~ ~~~
@ -38,7 +33,6 @@ Dans `/etc/elasticsearch/logging.yml`
+rootLogger: ${es.logger.level}, file +rootLogger: ${es.logger.level}, file
~~~ ~~~
Si on a un `/tmp` en _noexec_, il faut changer le chemin, au risque d'avoir l'erreur suivante. Si on a un `/tmp` en _noexec_, il faut changer le chemin, au risque d'avoir l'erreur suivante.
~~~ ~~~
@ -64,7 +58,7 @@ Assurez-vous de créer le répertoire :
### Kopf - web admin interface for elasticsearch ### Kopf - web admin interface for elasticsearch
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
@ -169,7 +163,7 @@ On crée le dépôt sur le filesystem :
# chown elasticsearch: /home/backup-elasticsearch # chown elasticsearch: /home/backup-elasticsearch
~~~ ~~~
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. *Note :* en cas de cluster multi-nœuds, il faut penser que le filesystem doit être partagé (via NFS par exemple) 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` : Le dépôt doit être référencé dans la configuration `/etc/elasticsearch/elasticsearch.yml` :
@ -180,15 +174,15 @@ path.repo: ["/home/backup-elasticsearch"]
Après restart d'Elasticsearch on lui fait créer le snapshot **evobackup** : 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}}' $ 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 : Enfin, dans un script qui tourne régulièrement, on provoque la fixation d'un snapshot :
~~~ ~~~{.bash}
date=$(date +%H) $ date=$(date +%H)
curl -s -X DELETE "127.0.0.1:9200/_snapshot/evobackup/h${date}" | grep -v acknowledged..true $ 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 $ 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". 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".
@ -197,7 +191,7 @@ Ici, on crée un snapshot portant le numéro de l'heure courante. Il est supprim
_Basé sur le livre <http://exploringelasticsearch.com/book>_ _Basé sur le livre <http://exploringelasticsearch.com/book>_
On utilisera l'outil Curl pour faire les requêtes. On utilisera l'outil cURL pour faire les requêtes.
En plaçant à la fin d'une URI `?pretty=true` on pourra obtenir un JSON formaté, plus lisible pour les humains. En plaçant à la fin d'une URI `?pretty=true` on pourra obtenir un JSON formaté, plus lisible pour les humains.
### Avec une base de données d'exemple ### Avec une base de données d'exemple
@ -206,32 +200,32 @@ Nous allons utiliser une BDD d'exemple pour faire des tests.
Télécharger, <https://github.com/andrewvc/ee-datasets/archive/master.zip>, décompresser l'archive et exécuter le programme Java qui va injecter la BDD "movie_db" dans votre cluster ES. Télécharger, <https://github.com/andrewvc/ee-datasets/archive/master.zip>, décompresser l'archive et exécuter le programme Java qui va injecter la BDD "movie_db" dans votre cluster ES.
~~~ ~~~{.bash}
java -jar elastic-loader.jar http://localhost:9200 datasets/movie_db.eloader $ java -jar elastic-loader.jar http://localhost:9200 datasets/movie_db.eloader
~~~ ~~~
La BDD movie_db contient quelques noms de films, avec leurs informations associés (genre, date, acteurs, …). La BDD movie_db contient quelques noms de films, avec leurs informations associés (genre, date, acteurs, …).
Pour consulter tout son contenu : Pour consulter tout son contenu :
~~~ ~~~{.bash}
curl http://localhost:9200/movie_db/_search?pretty=true $ curl http://localhost:9200/movie_db/_search?pretty=true
~~~ ~~~
### En créant une BDD ### En créant une BDD
#### Opérations CRUD #### Opérations CRUD
Créer un index (équivalent d'une base de données) nommé « planet ». Créer un index (équivalent d'une base de données) nommé *planet* :
~~~ ~~~{.bash}
curl -X PUT localhost:9200/planet $ 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": {
@ -247,28 +241,28 @@ 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 :
~~~ ~~~{.bash}
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 :
~~~ ~~~{.bash}
curl localhost:9200/planet/hacker/1?pretty=true $ curl localhost:9200/planet/hacker/1?pretty=true
~~~ ~~~
Mise à jour du champ âge. Mise à jour du champ âge :
~~~ ~~~{.bash}
curl -X POST localhost:9200/planet/hacker/1/_update -d '{"doc": {"age": 19}}' $ curl -X POST localhost:9200/planet/hacker/1/_update -d '{"doc": {"age": 19}}'
~~~ ~~~
Suppression du document. Suppression du document :
~~~ ~~~{.bash}
curl -X DELETE localhost:9200/planet/hacker/1 $ curl -X DELETE localhost:9200/planet/hacker/1
~~~ ~~~
#### Recherche basique #### Recherche basique
@ -276,11 +270,8 @@ curl -X DELETE localhost:9200/planet/hacker/1
Recréons un index de test : Recréons un index de test :
~~~ ~~~
curl -X DELETE localhost:9200/planet $ curl -X DELETE localhost:9200/planet
~~~ $ curl -X PUT localhost:9200/planet -d '
~~~
curl -X PUT localhost:9200/planet -d '
{ {
"mappings": { "mappings": {
"hacker": { "hacker": {
@ -299,24 +290,24 @@ curl -X PUT localhost:9200/planet -d '
' '
~~~ ~~~
Ajoutons quelques documents. Ajoutons quelques documents :
~~~ ~~~
curl -X PUT localhost:9200/planet/hacker/1 -d ' $ curl -X PUT localhost:9200/planet/hacker/1 -d '
{ {
"handle": "mark", "handle": "mark",
"hobbies": ["rollerblading", "hacking", "coding"] "hobbies": ["rollerblading", "hacking", "coding"]
} }
' '
curl -X PUT localhost:9200/planet/hacker/2 -d ' $ curl -X PUT localhost:9200/planet/hacker/2 -d '
{ {
"handle": "gondry", "handle": "gondry",
"hobbies": ["writing", "skateboarding"] "hobbies": ["writing", "skateboarding"]
} }
' '
curl -X PUT localhost:9200/planet/hacker/3 -d ' $ curl -X PUT localhost:9200/planet/hacker/3 -d '
{ {
"handle": "jean-michel", "handle": "jean-michel",
"hobbies": ["coding", "rollerblades"] "hobbies": ["coding", "rollerblades"]
@ -324,10 +315,10 @@ curl -X PUT localhost:9200/planet/hacker/3 -d '
' '
~~~ ~~~
Recherchons ceux qui ont pour hobby « rollerblading ». Recherchons ceux qui ont pour hobby *rollerblading* :
~~~ ~~~
curl -X POST localhost:9200/planet/hacker/_search?pretty=true -d ' $ curl -X POST localhost:9200/planet/hacker/_search?pretty=true -d '
{ {
"query": { "query": {
"match": { "match": {