Da ultima vez escrevi sobre fluentd tive foco em ler o syslog do linux, interagi tambem com elasticsearch e kibana. Pois bem, dessa vez vou caminhar um pouco para um outro lado. Imagine voce que existem aplicacoes em python na mesma instancia que monitoramos o syslog no post anterior. Qualquer semelhanca e mera coincidencia ;). Sera que da para ler tambem os logs dessa aplicacao com fluentd?! Caso a aplicacao em python seja o foco da maquina, entao melhor ainda, pois vai ser possivel obter dados de forma rapida de quantas vezes aconteceu algum determinado evento. Isso sem falar do indicativo em tempo real, em formato de histogram que e possivel configurar no kibana.Estendendo ainda mais o assunto fluentd, afirmo que e possivel fazer essa interacao acontecer de uma forma muito facil. Encontrei duas solucoes para essa questao. Vou admitir que voce ja tem todo ambiente do fluentd com elasticsearch e kibana funcionando, caso nao tenha leia isso antes.Primeira solucao - Fazer com que a aplicacao envie os logs diretamente para o fluentd toda vez que ocorrer algum evento. Encontrei no docs.fluentd um exemplo bem interessante que adaptei para mostrar aqui.Precisamos instalar o fluent-logger, utilize o repositorio do pip para isso. Caso nao tenha o pip instalado, entao leia isso.pip install fluent-logger Crie um arquivo de nome python.py e vamos escrever o seguinte nele.from fluent import senderfrom fluent import eventsender.setup('mpdocs', host='10.0.2.15', port=24224)event.Event('follow', { 'from': 'userA', 'to': 'userB', 'host': '10.0.2.15', 'messagem': 'teste para post do mpdocs', 'ident': 'app1'})event.Event('follow', { 'from': 'userI', 'to': 'userP', 'host': '10.0.2.15', 'messagem': 'mpdocs.blogspot.com.br', 'ident': 'app2'})event.Event('follow', { 'from': 'userI', 'to': 'userP', 'host': '10.0.2.15', 'messagem': 'mpdocs.blogspot.com.br', 'ident': 'app2'})event.Event('follow', { 'from': 'Pedro', 'to': 'Zeus', 'host': '10.0.2.15', 'messagem': 'post sobre fluentd e python', 'ident': 'app50'})Para que tudo funcione corretamente o td-agent(fluentd) precisa esta configurado de acordo. Repare no codigo acima a porta e tambem onde esta escrito mpdocs. O arquivo /etc/td-agent/td-agent.conf precisa estar configurado dessa forma:<source> type forward port 24224</source><match mpdocs.**> type elasticsearch flush_interval 10s</match>Agora e reiniciar o td-agent, para que o novo conf entre em acao e tambem executar o python./etc/init.d/td-agent restartpython python.pySegunda solucao - Fazer a aplicacao escrever o log no syslog do linux. Encontrei no docs.python um exemplo simples que ajustei para demonstrar aqui. Recomendo tambem a leitura tambem do docs.fluentd.Caso queira se aprofundar sobre facilidade do syslog e niveis de prioridade, recomendo a leitura do gnulinuxbr. Em nosso exemplo, uso apenas LOCAL4 ao enviar a mensagem.import syslogsyslog.syslog(syslog.LOG_LOCAL4, "mpdocs.blogspot.com.br")Ja que vamos usar o syslog, e necessario indicar no arquivo /etc/rsyslog.conf a facilidade utilizada e tambem a url do fluentd.local4.* /var/log/app.python.loglocal4.* @10.0.2.15:42185Ja o arquivo /etc/td-agent/td-agent.conf, configurei da seguinte forma: <source> type syslog port 42185 tag syslog with_priority true </source> <source> type forward </source> <match syslog.**> type elasticsearch flush_interval 10s logstash_format true </match>Depois de ajustar tudo, nao se esqueca de rodar o Elastisearch e o Fluentd. Confira abaixo como ficou o resultado. Diferente do primeiro exemplo, que fiz o filtro por ident e no script mudei para fazer um grafico mais apresentavel. No segundo exemplo criei apenas um python de teste e rodei algumas vezes alterando a mensagem. Logs sao extremamente importantes