Mise à jour pour Elasticsearch et ELK (5.0)
This commit is contained in:
parent
d5cb30f8ff
commit
c486414ba8
107
HowtoELK.md
107
HowtoELK.md
|
@ -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).
|
||||
|
|
|
@ -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 d’une 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": {
|
||||
|
|
Loading…
Reference in New Issue