Este documento describe un proyecto para analizar logs de servidores web mediante Apache Flume, HDFS, Hive, Elasticsearch y Kibana. Los logs son recolectados por Flume y almacenados en HDFS. Luego son cargados a tablas de Hive y a Elasticsearch para permitir búsquedas y visualizaciones en Kibana. El objetivo final es proporcionar una visualización eficiente de los logs para obtener información valiosa.
1. Proyecto Final Master Felix Rodriguez Araujo
Master Experto en Cloud Computing U-TAD
Log -Analytics
con
Apache-Flume
Elasticsearch
HDFS
Kibana
2. DESCRIPCIÓN GLOBAL DEL PROYECTO
TECNOLOGÍAS USADAS
WORKFLOW DEL DATO A ALTO NIVEL
BIBLIOGRAFÍA
1
2
3
4
3.
4. Con el crecimiento de los volúmenes de datos que estamos experimentando en los últimos años, nos hemos visto
obligados a buscar soluciones para poder tratar dicha información de manera ágil y eficiente.
E.T.L. está siendo una estrategia claramente en alza en los últimos tiempos,el cómo extraer los datos de múltiples
orígenes y sistemas, cargarlos en tablas de datos para luego,posteriormente tratarlos y poder sacar un provecho de
ellos.
En el ejemplo que quiero tratar con este proyecto, es la gestión de logs generados por los diferentes webservers que
tenemos por las diferentes regiones configuradas en AWS,para posteriormente visualizarlos de una manera eficiente y
práctica.
Transform
Extract
Load
5.
6. 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)
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.
7. Hadoop es un sistema que permite almacenar y procesar grandes datos en un entorno distribuido en clústeres de ordenadores
utilizando modelos de programación simple. Está diseñado para aumentar la escala de servidores individuales de miles de máquinas,
cada uno de ellos ofrece computación y almacenamiento local.
Características de los HDFS
● Es adecuado para el almacenamiento y procesamiento distribuido.
● Hadoop proporciona una interfaz de comandos para interactuar con HDFS.
● Los servidores de namenode datanode y ayudar a los usuarios a comprobar fácilmente el estado del clúster.
● Streaming el acceso a los datos del sistema de ficheros.
● HDFS proporciona permisos de archivo y la autenticación.
8. Hive es almacén de datos creado específicamente para Hadoop que nos facilita la tarea de sumarizar los datos pre-existentes en HDFS.
La idea principal de Hive es la de funcionar como capa externa a Hadoop a modo de envoltorio, donde vamos a poder realizar
consultas sobre el sistema de archivos que serán tratadas como MapReduces en modo nativo en HDFS.
Para poder realizar estas operaciones, fue creado un lenguaje de consultas a "base de datos" (recordemos que HDFS es un sistema de
ficheros) muy similar a SQL, que denominaron HiveQL o HQL (dependiendo de en que libro lo leas lo verás de una manera u otra).
9. ElasticSearch indexa cualquier documento que le envíes y escala horizontalmente con mucha facilidad.
ElasticSearch es un servidor de indexación y búsqueda schema-less con 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-text search) 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.
10. Kibana permite sacar provecho de los datos indexados, diseñando dashboards en cuestión de minutos.
Kibana es el motor de visualización y análisis de ElasticSearch, que permite una integració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.
11.
12. Http requests and responses
Apache HTTP server
Flume Agent
Flume Messaging TCP PORT 4545
HDFS
Hive
Flume Agent
Loading to Elasticsearch
with Hive
Visualising the data
13. El primer paso, lógicamente será
recibir peticiones a nuestros
servidores web Apache.
Dicho tráfico configuraremos
para que loguee donde
consideremos oportuno. Http requests and responses
Apache HTTP server
Flume Agent
En cada web-server configuraremos
el agente flume, para que envie los
logs al HDFS.
El archivo de conf básica del flume en el web-server
Ruta de los logs a analizar
Ip HDFS +Puerto
PARA LEVANTAR EL AGENTE
/usr/lib/flume/bin/flume-ng agent -c conf -f conf/flume-src-agent.conf -n source_agent
14. Apache HTTP server
Flume Agent
Flume Messaging TCP PORT 4545
HDFS
Hive
Flume Agent
Una vez levantado el agente Flume en el servidor
origen,procederá a enviar al “collector” (servidor
destino) los logs que hemos configurado
previamente.
Path del HDFS donde guardamos
los logs enviados desde el source
START Agent: flume-ng agent -c conf -f /flume-ng/conf/flume-trg-agent.conf -n
collector
15. Una vez lanzados los agentes flumes tanto en el server target como source…..
Vemos como, efectivamente nuestro HDFS está recibiendo datos
16. Podemos ver de una manera mucho más gráfica los logs importados por flume en HDFS, usaremos la G.U.I. de
Hadoop, HUE.
17. Para poder conseguir nuestro objetivo final, debemos de empezar a tratar los logs con HIVE, para ello
vamos a “importar” los logs en tablas, para ello lo haremos desde HUE o también desde la consola
hive de un terminal SSH, con la siguiente query.
18. A continuación vamos a “inyectar” datos en ElasticSearch,ya que es un requisito fundamental para finalmente poder
verlo en Kibana.
Lo primero que debemos hacer es agregar el jar elasticsearch-hadoop a la query
Las queries necesarias para ello son las siguientes:
CREATE TABLE logs (type STRING, time STRING, ext STRING, ip STRING, req STRING, res INT, bytes INT,
phpmem INT, agent STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY 't';
LOAD DATA INPATH '/pro/data/logs/apache_access_combined/150724' OVERWRITE INTO TABLE logs;
CREATE EXTERNAL TABLE felix_logses (time STRING, extension STRING, clientip STRING, request STRING,
response INT, agent STRING)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'demo/hive',
'es.mapping.names' = 'time:@timestamp',
'es.nodes' = 'your_es_cluster_hostname');
INSERT OVERWRITE TABLE felix_logses SELECT s.time, s.ext, s.ip, s.req, s.res, s.agent FROM logs s;
19. Si todo ha ido bien, ya podemos empezar a tratar datos con Elasticsearch.
Para verlo no hay más que ejecutar esta sencilla query…...
Y ...Voila...vemos los datos correctamente
importados…….
20. El último paso de nuestro proyecto, es ofrecer una visualización de los logs que vamos y hemos importado.
Como dijimos antes, usaremos Kibana.
Lo primero que deberemos hacer es agregar el index creado en la tabla anteriormente en hive.
En este caso, el index creado se denomina felix, vemos que importa las tablas con sus campos y datos.
21. El último paso de nuestro proyecto, es ofrecer una visualización de los logs que vamos y hemos importado.
Como dijimos antes, usaremos Kibana.
Lo primero que deberemos hacer es agregar el index creado en la tabla anteriormente en hive.
En este caso, el index creado se denomina felix, vemos que importa las tablas con sus campos y datos.
22. Los siguientes pasos en Kibana, para no entrar mucho en detalle, es básicamente que debes personalizar tus
búsquedas en tus logs para que, posteriormente con los datos importados por Elasticsearch, te muestre los
gráficos deseados.