Patrocinado por
ElasticSearch, Flume y Kibana
On-the-fly
ETL con EFK:
En Telefónica Flagship Store_
¿Quiénes somos?
Gaspar Muñoz@[email protected]
www.stratio.com@StratioBD
Santiago Mola@[email protected]
¿De qué vamos a hablar?
1 Visión general del stack EFK
¿Por qué Apache Flume?
On-the-fly ETL con Apache Flume
Diseño de un workflow
Casos de uso
EFK in Action
2
3
4
5
6
Patrocinado por
1. Visión general del stack tecnológico1. VISIÓN GENERAL DEL
STACK TECNOLÓGICO EFK
1.1 Visión general del stack tecnológico
E
F
K
Flume permite diseñar y ejecutar workflows ETL con un gran rendimiento, confiabilidad y una puesta en marcha rápida (sin necesidad de programación)
ElasticSearch indexa cualquier documento que le envíes y escala horizontalmente con mucha facilidad.
Kibana permite sacar provecho de los datos indexados, diseñando dashboards en cuestión de minutos.
1.2 Una solución end To end
Plataforma endToEnd para el tratamiento y monitorización en tiempo real de datos estructurados y no estructurados.
Confiable, escalable, flexible y… ¡open source!
E F K
1.3 Componentes
ElasticSearch es un servidor de indexación y búsqueda schema-lesscon grandes capacidades de escalabilidad horizontal.
Schema-less significa que el esquema se puede actualizar sobre la marcha, en función de los documentos indexados.
ElasticSearch puede indexar cada campo de los documentos (full-textsearch) y genera agregaciones y agrupaciones automáticamente.
Registrar un nodo nuevo en el cluster es muy sencillo, con una gestión automática del reparto de los datos y peticiones.
Apache Flume es un sistema para la recolección agregación y transporte de cantidades masivas de información. Distribuido, confiable y flexible.
Su capacidad de adaptación permite trabajar con fuentes de datos heterogéneas y con destinos variados.
Los datos se pueden transformar, parsear, enriquecer o normalizar al vuelo.
También pueden crearse topologías de despliegue sofisticadas, para resolver casos de uso más complejos.
Kibana es el motor de visualización y análisis de ElasticSearch, que permite una interacción nativa con los datos indexados.
Los dashboards de Kibana son fáciles de crear y permiten una exploración de los datos en tiempo real, pero también de históricos.
Su interfaz es muy flexible y potente, con capacidades de análisis que abarcan desde la visualización de widgets hasta el raw data, con drill-down y estadísticas al vuelo de cada dato indexado.
1.4 Logstash, Flume…
¿No es ELK el tridente promovido por ElasticSearch?
Patrocinado por
1. Visión general del stack tecnológico2. EFK, ELK… por qué Flume?
2.1 Alternativas
LogStash y Flume son las dos principales soluciones open source para ETL on-the-fly
Fuente: SemaText: http://blog.sematext.com/2014/10/06/top-5-most-popular-log-shippers/
2.2 ¿Por qué Apache Flume?
Desarrollado en Java
Confiable (garantía de entrega de eventos)
Tolerante a fallos y escalable
Extensible (todos los componentes son pluggables)
Comunidad madura (liberado por Cloudera, ahora en la ASF)
Big data ready
Patrocinado por
1. Visión general del stack tecnológico3. On-the-fly ETL con
3.1 Aproximación a ETL
APACHE FLUME
3.2 Terminología básica de Flume
SOURCE
INTERCEPTOR
SINK
AGENT
3.3 Workflows
El algoritmo que debe ejecutar un agente de Flume recibe el nombre de workflow.
El workflow se define mediante configuración, sin necesidad de programar.
Esta “receta” incluye el uso de sources, interceptors y sinks, combinados para ejecutar una misión.
3.4 Agentes
La unidad mínima de despliegue en Flume son los agentes.
Un agente es, en esencia, un proceso java.
Cada agente es responsable de ejecutar su workflow en el que, como veremos más adelante, se puede conectar un agente con otros agentes para formar topologías.
Un agente también puede recibir datos de uno o más agentes.
Agent 1 Agent 2
3.5 Sources
Los componentes responsables de recibir datos en Flume se denominan “sources”.
Los datos pueden llegar bien desde un productor externo (snmp, log4j, jms, rest, syslog...), o bien desde otro agente (avro, rpc, jms, kafka...).
La misión principal de un source es la de recibir los datos y escribir en el “channel” definido.
Cada dato recibido en el source se emitecomo un evento en Flume (compuesto de body y headers)
exec
spooling
SNMP
3.6 Sinks
Los sinks son los components encargadosde drenar los channels y escribir esosdatos a un destino.
Los sinks hacen un poll contínuo a los channel y extrae eventos en batches.
Los sinks son totalmente transaccionales.
3.7 Channels
Los channels sirven como buffer intermedio entre los sinks y los sources.
Permiten desacoplar el productor del consumidor, ajustando lasvelocidades de procesamientomediante absorción de lasdiferencias.
Pueden ser volátiles (memoria) o persistentes (disco)
3.8 Interceptors
Los interceptores se sitúan entre un source y un channel.
Permiten transformar o eliminarlos eventos que pasen entre esosdos componentes.
Los interceptors puedenencadenarse para apilaroperaciones sobre los eventos.
Se pueden programar tambiéncustom interceptors.
3.9 KiteSDK: Morhplines
Como parte del KiteSDK liberado por Cloudera, los morphlines son un framework extensible de
transformaciones.
3.10 Full Flume workflow
3.11 Principales herramientas
3.12 Topologías de despliegue
Patrocinado por
1. Visión general del stack tecnológico4. Diseño de un workflow
4.1 Visión general
4.2 Flume workflow
#Define components
a.sources=src
a.sinks=snk
a.channels=chan
# Define a channel
a.channels.chan.type=file
a.channels.chan.checkpointDir=data/chan/check/
a.channels.chan.dataDirs=data/chan/data/
a.channels.chan.capacity=1000000
a.channels.chan.transactionCapacity=10000
a.channels.chan.checkpointInterval=300000
4.3 Flume workflow
# Define a source
a.sources.src.type=spoolDir
a.sources.src.spoolDir=data/spooldir
a.sources.src.fileHeader=true
a.sources.src.batchSize=100
a.sources.src.deserializer=LINE
a.sources.src.deserializer.decodeErrorPolicy=REPLACE
# Define an interceptor (optional)
a.sources.src.interceptors=morphline => link
a.sources.src.interceptors.morphline.type=org.apache.flume.sink.solr.morphline.Mor
phlineInterceptor$Builder
a.sources.src.interceptors.morphline.morphlineFile=conf/morphline-
elasticsearch.conf
a.sources.src.interceptors.morphline.morphlineId=morphline1
4.4 Flume workflow
# Define a sink
a.sinks.snk.type=org.apache.flume.sink.elasticsearch.ElasticSearchSink
a.sinks.snk.batchSize=1000
a.sinks.snk.indexName=flume_wikipedia_demo
a.sinks.snk.hostNames=127.0.0.1:9300
a.sinks.snk.clusterName=elasticsearch
a.sinks.snk.serializer=com.stratio.ingestion.serializer.elasticsearch.ElasticSearc
hSerializerWithMapping
a.sinks.snk.serializer.mappingFile=conf/elasticsearch_mapping.json
# Bind channel with components
a.sources.src.channels=chan
a.sinks.snk.channel=chan
4.5 Integración Flume _ES
Flume provee un sink de ElasticSearch.
Características:● Rolling Index. Índice cada día. ● Parametrización de ttl, batch.● Serializador custom.
https://flume.apache.org/FlumeUserGuide.html#elasticsearchsink
4.6 Integración Flume -ES
¿Problema? Cuando se crean nuevos índices cada día se utiliza un mapping por defecto.
Solución: Serializador custom, con mapping de tipos.
agent.sinks.essink.serializer=com.stratio.ingestion.serializer.elasticsearch.ElasticSearchSerializerWithMapping
{
"properties" : {
"@timestamp": { "type": "date", "store": true },
"proj_lang": { "type": "string", "index": "not_analyzed" },
"title": { "type": "string", "index": "not_analyzed", "store": true },
"reqs": { "type": "integer", "store": true },
"size": { "type": "integer", "store": false, "index": "no" },
"timestamp": { "type": "date" }
},
"_source": { "enabled": true },
"_all": { "enabled": false }
}
4.7 Flume workflow
# Define a sink
a.sinks.snk.type=org.apache.flume.sink.elasticsearch.ElasticSearchSink
a.sinks.snk.batchSize=1000
a.sinks.snk.indexName=flume_wikipedia_demo
a.sinks.snk.hostNames=127.0.0.1:9300
a.sinks.snk.clusterName=elasticsearch
a.sinks.snk.serializer=com.stratio.ingestion.serializer.elasticsearch.ElasticSearc
hSerializerWithMapping
a.sinks.snk.serializer.mappingFile=conf/elasticsearch_mapping.json
# Bind channel with components
a.sources.src.channels=chan
a.sinks.snk.channel=chan
Patrocinado por
1. Visión general del stack tecnológico5. Casos de uso
5.1 Casos de uso: SIEM
5.2 Casos de uso: SIEM (ii)
5.3 Casos de uso: SIEM (iii)
5.4 Caso de uso: Complex Event Processing
Stratio Streaming es el fruto de la conjunciónentre la potencia de Spark Streaming comoframework de computación continua y Siddhi CEP como motor de procesado de eventoscomplejos.
5.5 Caso de uso: Complex Event Processing
Patrocinado por
1. Visión general del stack tecnológico6. EFK in action
6.1 Stratio Ingestion
● https://github.com/Stratio/flume-ingestion
● Ejemplos en el directorio “examples”, con instrucciones incluidas.
Patrocinado por
1. Visión general del stack tecnológico
Patrocinado por
1. Visión general del stack tecnológicoSiguientes Meetups
● Temas sugeridos
o ElasticSearch Avanzado:
Agregaciones, GeoSearch,
Backups
o Optimización y
monitorización
o ¿Otros?
● Próxima fecha: 2015
Próximos meetups de ElasticSearch
Patrocinado por
We’re hiring!
http://bit.ly/1I3hDVM
Encuesta
Gracias ☺