Nettoyage Elasticsearch et ELK
This commit is contained in:
parent
5309b7269b
commit
6c1393c3b2
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue