Tengo un servidor CentOS 6.5 en el que instalé Elasticsearch 1.3.2 .
Mi elasticsearch.yml
archivo de configuración es una modificación mínima del envío con Elasticsearch como predeterminado. Una vez despojado de todas las líneas comentadas, se ve así:
cluster.name: xxx-kibana
node:
name: "xxx"
master: true
data: true
index.number_of_shards: 5
index.number_of_replicas: 1
path:
logs: /log/elasticsearch/log
data: /log/elasticsearch/data
transport.tcp.port: 9300
http.port: 9200
discovery.zen.ping.multicast.enabled: false
Elasticsearch debería tener la compresión activada de forma predeterminada , y leí varios puntos de referencia que ponen la relación de compresión desde un 50% hasta un 95%. Desafortunadamente, la relación de compresión en mi caso es -400%, o en otras palabras: los datos almacenados con ES ocupan 4 veces más espacio en disco que el archivo de texto con el mismo contenido . Ver:
12K logstash-2014.10.07/2/translog
16K logstash-2014.10.07/2/_state
116M logstash-2014.10.07/2/index
116M logstash-2014.10.07/2
12K logstash-2014.10.07/4/translog
16K logstash-2014.10.07/4/_state
127M logstash-2014.10.07/4/index
127M logstash-2014.10.07/4
12K logstash-2014.10.07/0/translog
16K logstash-2014.10.07/0/_state
109M logstash-2014.10.07/0/index
109M logstash-2014.10.07/0
16K logstash-2014.10.07/_state
12K logstash-2014.10.07/1/translog
16K logstash-2014.10.07/1/_state
153M logstash-2014.10.07/1/index
153M logstash-2014.10.07/1
12K logstash-2014.10.07/3/translog
16K logstash-2014.10.07/3/_state
119M logstash-2014.10.07/3/index
119M logstash-2014.10.07/3
622M logstash-2014.10.07/ # <-- This is the total!
versus:
6,3M /var/log/td-agent/legacy_api.20141007_0.log
8,0M /var/log/td-agent/legacy_api.20141007_10.log
7,6M /var/log/td-agent/legacy_api.20141007_11.log
6,7M /var/log/td-agent/legacy_api.20141007_12.log
8,0M /var/log/td-agent/legacy_api.20141007_13.log
7,6M /var/log/td-agent/legacy_api.20141007_14.log
7,6M /var/log/td-agent/legacy_api.20141007_15.log
7,7M /var/log/td-agent/legacy_api.20141007_16.log
5,6M /var/log/td-agent/legacy_api.20141007_17.log
7,9M /var/log/td-agent/legacy_api.20141007_18.log
6,3M /var/log/td-agent/legacy_api.20141007_19.log
7,8M /var/log/td-agent/legacy_api.20141007_1.log
7,1M /var/log/td-agent/legacy_api.20141007_20.log
8,0M /var/log/td-agent/legacy_api.20141007_21.log
7,2M /var/log/td-agent/legacy_api.20141007_22.log
3,8M /var/log/td-agent/legacy_api.20141007_23.log
7,5M /var/log/td-agent/legacy_api.20141007_2.log
7,3M /var/log/td-agent/legacy_api.20141007_3.log
8,0M /var/log/td-agent/legacy_api.20141007_4.log
7,5M /var/log/td-agent/legacy_api.20141007_5.log
7,5M /var/log/td-agent/legacy_api.20141007_6.log
7,8M /var/log/td-agent/legacy_api.20141007_7.log
7,8M /var/log/td-agent/legacy_api.20141007_8.log
7,2M /var/log/td-agent/legacy_api.20141007_9.log
173M total
¿Qué estoy haciendo mal? ¿Por qué no se comprimen los datos?
He agregado provisionalmente index.store.compress.stored: 1
a mi archivo de configuración, ya que descubrí que en las elasticsearch 0.19.5
notas de la versión (fue cuando la store
compresión salió primero), pero todavía no puedo decir si está marcando la diferencia, y de todos modos la compresión debería estar activada por por defecto, hoy en día ...
Respuestas:
Elasticsearch no reduce sus datos automáticamente. Esto es cierto para cualquier base de datos. Además de almacenar los datos sin procesar, cada base de datos tiene que almacenar metadatos junto con ellos. Las bases de datos normales solo almacenan un índice (para una búsqueda más rápida) para las columnas que db-admin eligió por adelantado. ElasticSearch es diferente, ya que indexa cada columna de forma predeterminada. De este modo, el índice es extremadamente grande, pero, por otro lado, proporciona un rendimiento perfecto al recuperar datos.
En configuraciones normales, verá un aumento de 4 a 6 veces de los datos sin procesar después de la indexación. Aunque depende en gran medida de los datos reales. Pero este es en realidad un comportamiento intencionado.
Por lo tanto, para disminuir el tamaño de la base de datos, debe ir al revés como lo hizo en los RDBM: excluya las columnas de la indexación o el almacenamiento que no necesita indexar.
Además, puede activar la compresión, pero esto solo mejorará cuando sus "documentos" sean grandes, lo que probablemente no sea cierto para las entradas del archivo de registro.
Aquí hay algunas comparaciones y consejos útiles: https://github.com/jordansissel/experiments/tree/master/elasticsearch/disk
Pero recuerde: la búsqueda tiene un costo. El costo a pagar es el espacio en disco. Pero ganas flexibilidad. Si su tamaño de almacenamiento excede, ¡entonces crezca horizontalmente! Aquí es donde gana ElasticSearch.
fuente