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:
- PutElasticSearchHttp, que efetivamente adiciona o Log no ElasticSearch
- ReplaceText, onde aplicamos o layout (modelo) da entrada no Log.
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.