Soluções para Integração de Software

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.

Mais posts da série Soluções para Integração de Software

2 Comentários
  1. Luiz Carlos Faria

    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. Tiago Tartari

      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 *