Skip to content

Instantly share code, notes, and snippets.

@blavoie
Created March 2, 2016 20:43
Show Gist options
  • Save blavoie/58c90290935e8e1167e6 to your computer and use it in GitHub Desktop.
Save blavoie/58c90290935e8e1167e6 to your computer and use it in GitHub Desktop.
#
# Ce fichier de configuration Logstash permet d'effectuer la copie d'index soit:
# - à l'intérieur d'un même cluster Elasticsearch
# - entre différents clusters Elasticsearch
#
# Utile dans le cas où nous voulons réindexer un index à l'aide de nouveaux mappings ou pour
# dupliquer la production vers un autre environnement de tests.
#
# Pour invoquer la commande:
# LS_HEAP_SIZE="2048m" /path/to/bin/logstash -w 2 -f copie-elasticsearch.conf
#
# Note: seulement les données sont copiées, pas les mappings associés.
#
# Afin d'accélérer au maximum la copie, il est conseillé de:
# - désactiver les rafraîchissements (refresh_interval)
# - désactiver les replicas
#
# Les étapes d'exploitation devraient donc être:
#
# 1. Spécifier l'adresse du serveur Elasticsearch utilisé:
#
# export ES_HOST="http://node.cluster.domain.com:9200"
#
# 2. Désactiver les rafraichissements et les replicas, soit:
#
# 1. Sur tous les index existants via l'API REST.
# Peut être utile pendant une copie, alors que les index existente déjà.
#
# curl -XPUT $ES_HOST/ul-*/_settings -d '{ "index.refresh_interval" : "-1" }'
# curl -XPUT $ES_HOST/ul-*/_settings -d '{ "index.number_of_replicas" : "0" }'
#
# 2. Pour les futurs index avec le template «ul-bulk-import».
# Très bonne stratégie à adopter avant même de procéder à la copie.
#
# curl -XPUT $ES_HOST/_template/ul-bulk-import -d @ul-bulk-import.json
#
# 3. Procéder à la copie.
# Bien sûr, ajuster le fichier de paramètre avant de lancer la commande.
#
# LS_HEAP_SIZE="2048m" /opt/logstash/bin/logstash -w 2 -f copie-elasticsearch.conf
#
# 4. Optimiser les indexes à l'aide d'un «force merge» (optionnel).
#
# curl -XPOST $ES_HOST/ul-*/_forcemerge?max_num_segments=5
#
# 5. Supprimer le template «ul-bulk-import».
#
# curl -XDELETE $ES_HOST/_template/ul-bulk-import
#
# 6. Réactiver les rafraichissement et/ou les replicas selon ce qui est désiré dans
# l'environnement de destination.
#
# curl -XPUT $ES_HOST/ul-*/_settings -d '{ "index.refresh_interval" : "15s" }'
# curl -XPUT $ES_HOST/ul-*/_settings -d '{ "index.number_of_replicas" : "1" }'
#
# TODO:
# - Il serait peut-être bien de regarder le paramètre index.translog.flush_threshold_size et voir
# si cela peut avoir un impact sur les performances d'import masssif.
#
# https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-translog.html
#
###############################################################################
#
# Entrée à partir d'Elasticsearch
#
# Pour un plus grand parralélisme, plusieurs blocs d'entrée avec des patterns différents peuvent
# être utilisés.
#
# Documentation: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-elasticsearch.html
#
input {
elasticsearch {
# Éviter de spécifier le «master node».
# De préférence, spécifier des «client nodes» ou des «data nodes».
hosts => [ "localhost" ]
index => "ul-index1-2016.03.*"
query => '{"query": { "match_all": {} } }'
docinfo => true
# Paramètres de performance
scan => true
size => 1000 # Attention: nombre par shard
scroll => "5m"
}
#elasticsearch {
#
# hosts => [ "localhost" ]
# index => "ul-index2-2016.03.*"
#
# query => '{"query": { "match_all": {} } }'
# docinfo => true
#
# # Paramètres de performance
#
# scan => true
# size => 1000 # Attention: par shard.
# scroll => "5m"
#
#}
}
###############################################################################
#
# Filtres
#
# Généralement, lorsqu'on veut une copie complète et identique on ne spécifie
# pas de filtres qui altère les événements. Cependant, il est possible de
# copier qu'un sous-ensemble des événements en éliminant qu'une portion de
# ces derniers.
#
# On ajoute aussi le filtre metrics permettant de visualiser la progression de
# la copie.
#
filter {
#drop {
# percentage => 50
#}
#ruby {
# code => "event.cancel if rand <= 0.40"
#}
#if [property] == "value" {
# drop { }
#}
# Permet d'empêcher la copie d'index débutant par un point.
# Généralement : .kibana et .marvel.
#
#if [@metadata][_index] =~ /^\./ {
# drop { }
#}
metrics {
meter => "events"
add_tag => "metric"
flush_interval => 10
}
}
###############################################################################
#
# Sortie vers Elasticsearch
#
# Documentation: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
#
output {
if "metric" in [tags] {
stdout {
codec => line {
format => "count: %{[events][count]} rate: %{[events][rate_1m]}"
}
}
} else {
elasticsearch {
# Éviter de spécifier le «master node».
# De préférence, spécifier des «client nodes» ou des «data nodes».
hosts => [ "localhost" ]
#index => "copie.%{[@metadata][_index]}"
index => "%{[@metadata][_index]}"
document_type => "%{[@metadata][_type]}"
document_id => "%{[@metadata][_id]}"
# Paramètres de performance
flush_size => 250
idle_flush_time => 10
workers => 4
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment