on-the-fly etl con efk: elasticsearch, flume, kibana

Post on 12-Jul-2015

3.710 Views

Category:

Data & Analytics

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Patrocinado por

ElasticSearch, Flume y Kibana

On-the-fly

ETL con EFK:

En Telefónica Flagship Store_

¿Quiénes somos?

Gaspar Muñoz@gmunozsoriagmunoz@stratio.com

www.stratio.com@StratioBD

Santiago Mola@mola_iosmola@stratio.com

¿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 ☺

top related