22
0
Fork 0

Mise à jour pour Elasticsearch et ELK (5.0)

This commit is contained in:
Jérémy Lecour 2016-10-24 10:48:48 +02:00 committed by Jérémy Lecour
parent d5cb30f8ff
commit c486414ba8
2 changed files with 103 additions and 119 deletions

View File

@ -5,20 +5,40 @@ categories: nosql pack
Cette documentation décrit l'installation et la configuration de la suite Elastic, anciennement nommée **ELK** (Elasticsearch + Logstash + Kibana).
# Elasticsearch
## Pré-requis
## Installation
Les composants de la suite doivent être installés à partir du dépôt APT de la société Elastic (éditrice de la suite Elastic)
~~~
# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" >> /etc/apt/sources.list.d/elastic.list
# apt install elasticsearch openjdk-7-jre
# systemctl enable elasticsearch && systemctl start elasticsearch
# echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" >> /etc/apt/sources.list.d/elastic.list
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
~~~
Pour plus de détails, voir [HowtoElasticsearch#installation]()
Pour Elasticsearch et Logstash, il faut avoir Java 1.8, disponible depuis les `jessie-backports`.
## Configuration
~~~
# apt install openjdk-8-jre
# update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
~~~
## Elasticsearch
Il existe un guide détaillé d'installation et configuation pour Elasticsearch : [HowtoElasticsearch#installation]().
### Installation
~~~
# apt install elasticsearch
~~~
### Démarrage
~~~
# systemctl enable elasticsearch
# systemctl start elasticsearch
~~~
### Configuration
Préciser *node.name* dans le fichier `/etc/elasticsearch/elasticsearch.yml` :
@ -26,69 +46,40 @@ Préciser *node.name* dans le fichier `/etc/elasticsearch/elasticsearch.yml` :
node.name: bar
~~~
Pour plus détails, voir [HowtoElasticsearch#configuration]().
## Installation de quelques plugins
~~~
# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
# chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/
~~~
Pour plus détails, voir [HowtoElasticsearch#plugins]().
## Utile
* les logs sont dans `/var/log/elasticsearch/_cluster_name_.log`
* l'interface **Head** est disponible sur http://127.0.0.1:9200/_plugin/head/
* l'interface **Kopf** est disponible sur http://127.0.0.1:9200/_plugin/kopf/
# Logstash
## Logstash
Logstash est un service qui récupère des données depuis des sources variées (ports TCP/UDP, fichiers…), les transforme et les renvois vers des sorties variées (fichiers, Elasticsearch, syslog…).
C'est un logiciel écrit en Ruby, qui tourne sur une JVM (grace à JRuby).
Documentation officielle : <https://www.elastic.co/guide/en/logstash/2.4/index.html>
Documentation officielle : <https://www.elastic.co/guide/en/logstash/5.0/index.html>
## Installation
### Installation
~~~
# echo "deb http://packages.elastic.co/logstash/2.4/debian stable main" | tee -a /etc/apt/sources.list.d/elastic.list
# apt install logstash
# systemctl enable logstash
# systemctl start logstash
~~~
Dans `/etc/default/logstash` il faut penser à ajuster la ram allouée.
### Configuration
À ce stade, aucun "pipeline" Logstash n'est configuré.
Voir <https://www.elastic.co/guide/en/logstash/current/configuration.html>
Voir <https://www.elastic.co/guide/en/logstash/5.0/configuration.html>
## Démarrage
~~~
# systemctl start logstash
~~~
Pour que le démon soit géré automatiquement par systemd :
~~~
# systemctl enable logstash
~~~
# Kibana
## Kibana
Kibana est une interface de visualisation des donnes stockées dans Elasticsearch.
C'est un logiciel écrit principalement en NodeJS, où tout est embarqué dans un processus principal.
Documentation officielle : <https://www.elastic.co/guide/en/kibana/4.6/index.html>
Documentation officielle : <https://www.elastic.co/guide/en/kibana/5.0/index.html>
## Installation
### Installation
~~~
# echo "deb http://packages.elastic.co/kibana/4.6/debian stable main" | tee -a /etc/apt/sources.list.d/elastic.list
# apt install kibana
# /opt/kibana/bin/kibana plugin --install elastic/sense
# chown -R kibana: /opt/kibana
~~~
~~~
@ -104,24 +95,16 @@ Documentation officielle : <https://www.elastic.co/guide/en/kibana/4.6/index.htm
}
~~~
## Démarrage
~~~
# systemctl start kibana
~~~
Pour que le démon soit géré automatiquement par systemd :
### Démarrage
~~~
# systemctl enable kibana
# systemctl start kibana
~~~
## Utile
L'interface principale est disponible sur <http://127.0.0.1:5601/>
* l'interface principale est disponible sur <http://127.0.0.1:5601/>
* l'interface **Sense** est disponible sur <http://127.0.0.1:5601/app/sense>
## Proxy
### Proxy
Kibana ne gère pas d'authentification. Pour le rendre accessible de manière sécurisée, il est conseillé de le placer derrière un reverse proxy, par exemple Nginx.
@ -150,6 +133,6 @@ server {
}
~~~
# Conseils
## Conseils
* utiliser des certificats SSL (nativement géré par les logiciels) pour que les données circulent de manière chiffrée (surtout entre filebeat et logstash, car ça passe par Internet).

View File

@ -3,7 +3,7 @@ title: Howto Elasticsearch
categories: web bdd nosql
...
* Documentation : <https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html>
* Documentation : <https://www.elastic.co/guide/en/elasticsearch/reference/5.0/index.html>
* Forum : <https://discuss.elastic.co/c/elasticsearch>
[Elasticsearch](https://www.elastic.co/fr/products/elasticsearch) est un serveur de base de données écrit en Java disposant dune interface REST HTTP. Elasticsearch est notammment utilisé dans [la stack Elastic avec Logstash et Kibana](HowtoELK).
@ -13,20 +13,45 @@ categories: web bdd nosql
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" >> /etc/apt/sources.list.d/elasticsearch.list
# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# apt install elasticsearch openjdk-7-jre
# echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" >> /etc/apt/sources.list.d/elastic.list
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# apt install elasticsearch
~~~
On vérifie qu'on a bien Java >= 1.7 activé :
### Java 1;8
Elasticsearch 5.x nécessite Java 1.8. Pour Jessie, il faut installer la machine virtuelle Java depuis les backports.
~~~
$ java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
# cat /etc/apt/sources.list.d/backports.list
deb http://mirror.evolix.org/debian jessie-backports main contrib non-free
~~~
Il vaut mieux aussi s'assurer que les backports aient une préférence basse, dans `/etc/apt/preferences.d/backports`
~~~
Package: *
Pin: release a=jessie-backports
Pin-Priority: 50
~~~
~~~
# apt install openjdk-8-jre
# update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
~~~
### Breaking changes
Si vous faites la mise à jour depuis une verison inférieure à 5.0, il faut penser à supprimer tous les plugins de type "site" comme _head_ ou _kopf_ qu'il faudra réinstaller différemment. :
~~~
# rm -rf /usr/share/elasticsearch/plugins/{kopf,head}
~~~
La liste complète des changements est diponible sur <https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking-changes.html>.
### Démarrage
Pour activer le démarrage automatique :
~~~
@ -35,19 +60,23 @@ Synchronizing state for elasticsearch.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d elasticsearch defaults
Executing /usr/sbin/update-rc.d elasticsearch enable
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
# systemctl start elasticsearch
~~~
## Configuration de base
Les paramètres système (répertoires utilisés, configuration JVM) se trouvent dans le fichier `/etc/default/elasticsearch`,
les options applicatives (nom du cluster, nom du nœud, mémoire, réseau) se trouvent dans le fichier `/etc/elasticsearch/elasticsearch.yml`.
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 les options applicatives (nom du cluster, nom du nœud, mémoire, réseau) se trouvent dans le fichier `/etc/elasticsearch/elasticsearch.yml`.
Il faut activer le redémarrage automatique en cas de mise à jour (classique sous Debian).
On peut aussi définir un *tmpdir* spécifique (utile quand `/tmp` est en _noexec_) dans `/etc/default/elasticsearch` :
Il faut activer le redémarrage automatique en cas de mise à jour (classique sous Debian) dans `/etc/default/elasticsearch` :
~~~
RESTART_ON_UPGRADE=true
~~~
On peut aussi définir un **tmpdir** spécifique (utile quand `/tmp` est en `noexec`) dans `/etc/default/elasticsearch` :
~~~
ES_JAVA_OPTS="-Djava.io.tmpdir=/var/lib/elasticsearch/tmp"
~~~
@ -66,17 +95,6 @@ cluster.name: foo
node.name: bar
~~~
## Journaux
On conseille de ne pas activer le logging stdout vers la console, mais de conserver seulement les logs dans `/var/log/elasticsearch/`. On peut faire cela via le fichier `/etc/elasticsearch/logging.yml` :
~~~{.diff}
-rootLogger: ${es.logger.level}, console, file
+rootLogger: ${es.logger.level}, file
~~~
Les journaux intéressants sont dans `/var/log/elasticsearch/_cluster_name_.log`
## Configuration réseau
Par défaut, Elasticsearch écoute sur 127.0.0.1 sur TCP/9200 pour son interface REST HTTP.
@ -87,34 +105,15 @@ La directive de configuration suivante peut être positionnée pour qu'il écout
network.host: ["192.0.2.42", "198.51.100.42", "127.0.0.1"]
~~~
## Plugins
Il est possible d'utiliser des adresses virtuelles, telles que `_site_`, `_local_`
Les plugins permettent différentes améliorations, notamment en terme de visualisation simple et conviviale d'une base de données.
On verra ici les plus utiles.
Tous les détails sont su <https://www.elastic.co/guide/en/elasticsearch/reference/5.0/modules-network.html#network-interface-values>.
### Kopf - web admin interface for elasticsearch
### mode "production"
<https://github.com/lmenezes/elasticsearch-kopf>
Lorsqu'Elasticsearch est configuré pour écouter sur une IP non locale, il passe en mode "production".
~~~
# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
# chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/
~~~
*Note :* cela nécessite un accès réseau vers https://github.com/
L'interface **Kopf** est ainsi disponible sur http://127.0.0.1:9200/_plugin/kopf/
### Head - web front end for an elastic search cluster
<https://github.com/mobz/elasticsearch-head>
~~~
# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
# chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/
~~~
L'interface **Head** est ainsi disponible sur http://127.0.0.1:9200/_plugin/head/
Il active alors un certain nombre de "bootstrap checks" qui bloquent le démarrage s'ils ne sont pas tous respectés. Les éventuels échecs sont lisibles dans le fichier de log (généralement dans `/var/log/elasticsearch/_cluster_name_.log`).
## Configuration avancée
@ -141,11 +140,11 @@ On check sur la page `/_cat/health` si le status n'est pas en **red**.
/usr/lib/nagios/plugins/check_http -I 127.0.0.1 -u /_cat/health?h=st -p 9200 -r 'red' --invert-regex
~~~
## Snapshost et sauvegardes
## Snapshots et sauvegardes
### Configuration des snapshots
* Documentation http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-snapshots.html
Documentation : <http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-snapshots.html>
Il faut définir un répertoire pour stocker les snapshots :
@ -155,7 +154,7 @@ Il faut définir un répertoire pour stocker les snapshots :
# chown elasticsearch: /home/backup-elasticsearch
~~~
*Note :* en cas de cluster multi-nœuds, le répertoire de snapshots doit impérativement être partagé entre chaque nœud, classiquement via NFS, car chaque nœud ne gère que ses propres données.
*Note* : en cas de cluster multi-nœuds, le répertoire de snapshots doit impérativement être partagé entre chaque nœud, classiquement via NFS, car chaque nœud ne gère que ses propres données.
On précise le répertoire des snapshots dans la configuration `/etc/elasticsearch/elasticsearch.yml` :
@ -170,7 +169,7 @@ $ curl -XPUT 'http://localhost:9200/_snapshot/foo' -d '{
"type": "fs",
"settings": {
"location": "/home/backup-elasticsearch",
"compress": true
"compress": true
}
}'
{"acknowledged":true}
@ -204,6 +203,7 @@ Pour créer un snapshot dans l'ensemble **foo** :
~~~
$ curl -s -XPUT "localhost:9200/_snapshot/foo/snapshot_test?wait_for_completion=true"
$ ls -l /home/backup-elasticsearch
-rw-r--r-- 1 elasticsearch elasticsearch 34 Apr 11 01:35 index
drwxr-xr-x 22 elasticsearch elasticsearch 4096 Apr 11 01:35 indices
@ -222,7 +222,7 @@ Lister les snapshots :
~~~
$ curl -XGET "localhost:9200/_snapshot/foo/_all?pretty=true"
---
[...]
"snapshots" : [ {
"snapshot" : "snapshot_201403190415",
"indices" : [...],
@ -232,7 +232,7 @@ $ curl -XGET "localhost:9200/_snapshot/foo/_all?pretty=true"
"end_time" : "2014-03-19T03:16:33.381Z",
"end_time_in_millis" : 1395198993381,
"duration_in_millis" : 90001,
...
[...]
"snapshot" : "snapshot_201403201222",
"indices" : [...],
"state" : "SUCCESS",
@ -284,10 +284,10 @@ hot_${i}"; done
## cluster
<https://www.elastic.co/guide/en/elasticsearch/reference/2.4/modules-cluster.html>
<https://www.elastic.co/guide/en/elasticsearch/reference/5.0/modules-cluster.html>
Si l'on compare à d'autres services (MySQL, PostgreSQL, MongoDB..) la gestion d'un cluster Elasticsearch est vraiment simple.
Il faut lancer plusieurs instances Elasticsearch sur un réseau avec le même **cluster.name** et un **node.name** différent, et il suffitd'indiquer une (ou plusieurs) adresse(s) IP qui va permettre à l'instance de communiquer avec un (ou plusieurs) autre(s) nœud(s) :
Si l'on compare à d'autres services (MySQL, PostgreSQL, MongoDB) la gestion d'un cluster Elasticsearch est vraiment simple.
Il faut lancer plusieurs instances Elasticsearch sur un réseau avec le même **cluster.name** et un **node.name** différent, et il suffit d'indiquer une (ou plusieurs) adresse(s) IP qui va permettre à l'instance de communiquer avec un (ou plusieurs) autre(s) nœud(s) :
~~~
cluster.name: foo
@ -438,6 +438,7 @@ Recréons un index de test :
~~~
$ curl -X DELETE localhost:9200/planet
{"acknowledged":true}
$ curl -X PUT localhost:9200/planet -d '
{
"mappings": {