Registrando Logs de execução de fluxos de dados do Apache NiFi com ELK

No post anterior, apresentamos o Apache NiFi e entendemos como é possível integrar aplicações através de fluxos de dados nessa plataforma.

Nesse post, indico como produzir logs de operação do Apache NiFi, registrando falhas e a ocorrência de eventos importantes. Usaremos Elastic Search, LogStach e o Kibana (popularmente conhecido como ELK).

NOTA DO ELEMAR: A autoria desse post é do Tiago Tartari. Eu sou editor.

Subindo o Stack

A escolha do stack ELK é muito apropriada pois viabiliza armazenamento, busca e visualização facilitada de logs. No contexto deste post, estou utilizando a imagem sebp/elk do docker.

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk

DICA: Se estiver utilizando Docker, aumente os limites de uso de memória. Por alguma razão, o Elastic Search trava se menos que 4Gb estiver disponível.

Após subir o container você poderá acessar o Kibana no endereço http://localhost:5601/

Processors necessários para gerar Log no ELK a partir do NiFi

Para gerar logs, precisamos incluir os seguinte processor nos Process Groups:

DICA: Existem três tipos de processors que podem ser utilizados para adicionar um conteúdo no ElasticSearch. PutElasticsearch para versões 2.x, o PutElasticsearch5 para versões 5.x e o PutElasticsearchHttp que estamos utilizando em nosso exemplo.

Adicionamos dois connectors após o processor do InvokeHttp, um  ligado ao ReplaceText que seguirá o fluxo para gravar o log no ElasticSearch e outro que foi ligado ao JoltTransformJSON para seguir no fluxo do SQL Server.

NOTA: flowfile é o dado que irá se movimentar entre os processors.

Abaixo, demonstro como ficou a conexão entre os processors de log.

O objetivo do log será guardar os dados referente a requisição feita a API do Wikipedia, o id do flowfile, a data e hora, o termo pesquisado, a url, quantas vezes passou pela retentativa e o status code.

Abaixo, exemplo de configuração do ReplaceText seguido do PutElasticSearchHttp.

O código do ReplaceText ficou assim.

{
"type": "info",
"uuid": "${uuid}",
"fileName": "${filename}",
"date": "${Date}",
"term": "${Term}",
"ipClient": "${X-Client-IP}",
"tryCount": ${TryCount},
"statudCode": ${invokehttp.status.code},
"url": "${invokehttp.request.url}"
}

Muito simples de configurar!

Abaixo, visualizamos os logs no Kibana.

Concluindo

Um bom sistema de Logs é fundamental. No NiFi, logar é atividade trivial.

Já consegue perceber oportunidades de integração usando NiFi? Compartilhe suas impressões conosco nos comentários.

Compartilhe este insight:

2 respostas

  1. Olá Tiago, excelente post!

    Só algumas informações adicionais que são relevantes para complementar o post. Não estão no foco central do post que é o NIFI, são sobre Elastic e são relevantes a respeito do uso das imagens e do docker. Nada demais, mas precisa ser dito.

    1) As imagens oficiais da Elastic estão disponíveis no link https://www.docker.elastic.co/

    2) Usar imagens como a sebp/elk sem disclaimer algum (indicando que não é uma boa prática, que não se deve ter mais de um projeto na imagem/container) pode encorajar a audiência a seguir o mesmo caminho. Para o ELK Stack são necessárias 3 imagens e 3 containers (ElasticSearch, LogStash e Kibana).

    Estou aqui flertando com o NIFI ainda!
    Estou aguardando os próximos posts.

    1. Caro, Luiz Carlos Faria.
      Que privilégio ter um post comentado por você.
      Muito obrigado por suas considerações e com total sentido.

      … e sobre flertar com o NiFi… sensacional, tenho certeza que daqui a pouco vai dar namoro…

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Elemar Júnior

Sou fundador e CEO da EximiaCo e atuo como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Elemar Júnior

Sou fundador e CEO da EximiaCo e atuo como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Mais insights para o seu negócio

Veja mais alguns estudos e reflexões que podem gerar alguns insights para o seu negócio:

Implementing synchronization for multiple threads in .NET is easy. There are a lot of options for doing that – for...
Sometimes it is not enough to know if two strings are equals or not. Instead, we need to get an...
Uma dúvida comum e recorrente em minhas consultorias é “Como eu faço para manter a consistência de dados entre meus...
Neste post, compartilho mais algumas ideias que tenho adotado, com êxito, em meus projetos envolvendo Microsserviços e que podem ajudar...
Autorização, em qualquer aplicação não é processo simples. Quando estamos implementando Microsserviços, o desafio pode ser um pouco maior. Neste...
Este é o primeiro post de uma série onde pretendo compartilhar, com considerável nível de detalhe, como resolver problemas de...