Concrete Logo
Hamburger button

Introdução ao Apache Flume

  • Blog
  • 9 de Agosto de 2016
Share

Logs são uma fonte básica de informação e ajudam a monitorar a ‘saúde’ de sistemas, detectando falhas em hardware e serviços. Podem ajudar também na solução de problemas. Embora de uma forma geral um log represente registro de eventos, esta é uma ferramenta importante na administração de sistemas.

Com o surgimento de tecnologias e ferramentas para Big Data, a geração e utilização dos logs se tornaram cada vez mais importantes, uma vez que agora é possível ‘prever’ quando um equipamento precisa de manutenção, o comportamento de um indivíduo em um e-commerce e a geração de recomendações, entre outras coisas.

Administrar o volume de logs que é gerado por diversos sistemas/dispositivos não é uma tarefa fácil. Em 2011 a Cloudera criou o Flume, um sistema distribuído, confiável e disponível para coletar, agregar e mover grandes quantidades de dados de muitas fontes diferentes para um armazenamento de dados centralizado. Em 2012, esse passou a ser um projeto top level na Apache Software Foundation.

O Apache Flume não se restringe apenas à coleta de logs, e pode ser usado para transportar grandes quantidades de dados como os gerados em social media, e-mails e qualquer fonte de dados possível.

O objetivo principal do Flume é ingerir dados de eventos no HDFS (Hadoop Distributed File System) de forma simples e automatizada. Porém, seu uso não se limita apenas ao HDFS, é possível enviar também dados para um arquivo ou banco de dados, entre outros.

Abaixo o modelo de fluxo de dados do flume:

image01Um agente Flume roda na JVM (Java Virtual Machine) e possui os seguintes componentes:

  • Source: responsável pela entrada de dados;
  • Channel: armazena os dados que passam do source para o sink. Seu comportamento é parecido com uma fila;
  • Sink: responsável por enviar os dados ao destino/saída. A saída pode ser outro agente Flume.

A configuração de um agente é feita por meio de um arquivo local que tem o formato de um arquivo properties utilizado em Java.

Abaixo um exemplo de configuração de um agente com um source e um sink:

image00No exemplo, a1 é o nome do agente. Nele, está sendo configurado um source (r1), um channel (c1) e um sink (k1).

O tipo do source é netcat – captura qualquer dado enviado a um socket em uma porta tcp -, o endereço e portão são localhost:44444.

O tipo do sink é logger, o que significa que os dados serão gravados em um arquivo. Este tipo é útil para fins de teste.

O tipo do canal é memory com capacidade para armazenar 1000 eventos no buffer e 100 eventos por transação.

Por fim, tanto source como sink são ligados ao canal c1.

Este é apenas um exemplo simples de configuração. Caso quiséssemos configurar mais de um agente, isso poderia ser feito no mesmo arquivo, alterando apenas o nome do agente. Isso pode ser bem útil a quem precisa coletar e analisar logs de diversos sistemas e máquinas, uma vez que configurados esses agentes, os dados estariam disponíveis em HDFS, banco de dados ou outro repositório (definido no sink), trazendo agilidade na análise e processamento.

Apache Flume é uma ferramenta flexível, podendo ser usada para diversas situações, o que a torna bem poderosa apesar de sua simplicidade. Ficou alguma dúvida ou tem alguma contribuição? Aproveite os campos abaixo! Até a próxima.