Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A importância dos logs

A importância dos logs

Logar e super importante para qualquer aplicação, quanto maior o uso da sua aplicação mais específicos e certeiros tem que ser seus logs, nessa apresentação começo um papo sobre logs, como logar, como organizar e como armazenar para consultas e análises.

Mattheus Cassundé

January 12, 2022
Tweet

More Decks by Mattheus Cassundé

Other Decks in Technology

Transcript

  1. por que é importante? Ninguém sabe mais sobre a falha

    do que a própria aplicação que falhou
  2. por que é importante? Facilita o entendimento do cenário para

    ajudar na estratégia de correção das falhas
  3. quando ele é usado? um log útil pode ser usado

    em alguns momentos como: - validação de novas funcionalidades - análise de erros - criação de alarmes e visualizações
  4. quando ele é usado? um log útil pode ser usado

    em alguns momentos como: - validação de novas funcionalidades - análise de erros - criação de alarmes e visualizações
  5. quando ele é usado? um log útil pode ser usado

    em alguns momentos como: - validação de novas funcionalidades - análise de erros - criação de alarmes e visualizações
  6. o que podemos logar? Informações básicas - timestamp - host

    name - application name - trace id - span - level
  7. o que podemos logar? - URL, Parâmetros, Headers, Request Body,

    Response - chamadas de métodos e seus parâmetros - respostas de métodos - erros de métodos Informações do contexto
  8. não Atenção logar informação sensível • CPF • DATA DE

    NASCIMENTO • E-MAIL • NÚMERO DO CARTÃO DE CRÉDITO • ETC o que podemos logar?
  9. log4j Se o analista precisar saber o nome do paciente,

    pega o código do paciente logado e pesquisa no banco.
  10. public void salvar(Paciente paciente){ try{ paciente.repository(paciente); logger.INFO("paciente salvo com sucesso,

    paciente={}",paciente.getCodigo()); }catch(Exception e){ logger.ERROR("problema para salvar paciente, paciente={}",paciente.getCodigo()); } } log4j
  11. public void salvar(Paciente paciente){ try{ paciente.repository(paciente); logger.INFO("paciente salvo com sucesso,

    paciente={}",paciente.getCodigo()); }catch(Exception e){ logger.ERROR("problema para salvar paciente, paciente={}, erro={}",paciente.getCodigo(), e); } } log4j
  12. public void salvar(Paciente paciente){ try{ paciente.repository(paciente); logger.INFO("paciente salvo com sucesso,

    paciente={}",paciente.getCodigo()); }catch(Exception e){ logger.ERROR("problema para salvar paciente, paciente={}, erro={}",paciente.getCodigo(), e); } } log4j
  13. public void salvar(Paciente paciente){ try{ paciente.repository(paciente); logger.INFO("paciente salvo com sucesso,

    paciente={}",paciente.getCodigo()); }catch(Exception e){ logger.ERROR("problema para salvar paciente, paciente={}, erro={}",paciente.getCodigo(), e); } } log4j
  14. public void salvar(Paciente paciente){ try{ paciente.repository(paciente); logger.INFO("paciente salvo com sucesso,

    paciente={}",paciente.getCodigo()); }catch(Exception e){ logger.ERROR("problema para salvar paciente, paciente={}, erro={}",paciente.getCodigo(), e); } } log4j
  15. public void salvar(Paciente paciente){ try{ paciente.repository(paciente); logger.INFO("paciente salvo com sucesso,

    paciente={}",paciente.getCodigo()); }catch(Exception e){ logger.ERROR("problema para salvar paciente, paciente={}, erro={}",paciente.getCodigo(), e); } } log4j
  16. public void salvar(Paciente paciente){ try{ paciente.repository(paciente); logger.INFO("paciente salvo com sucesso,

    paciente={}",paciente.getCodigo()); }catch(Exception e){ logger.ERROR("problema para salvar paciente, paciente={}, erro={}",paciente.getCodigo(), e); } } log4j
  17. log4j Com log4j podemos classificar nosso log em: • INFO

    • WARN • ERRO • FATAL • DEBUG
  18. log4j Com log4j podemos classificar nosso log em: • INFO

    • WARN • ERRO • FATAL • DEBUG informações como, sucesso ao processar método/rotina
  19. log4j Com log4j podemos classificar nosso log em: • INFO

    • WARN • ERRO • FATAL • DEBUG informações como, sucesso ao processar método/rotina fluxos alternativos, entrou em uma validação
  20. log4j Com log4j podemos classificar nosso log em: • INFO

    • WARN • ERRO • FATAL • DEBUG informações como, sucesso ao processar método/rotina fluxos alternativos, entrou em uma validação erro que fluxo não pode continuar
  21. log4j Com log4j podemos classificar nosso log em: • INFO

    • WARN • ERRO • FATAL • DEBUG informações como, sucesso ao processar método/rotina fluxos alternativos, entrou em uma validação erro que fluxo não pode continuar erro ou falha de item de estrutura como banco, outra aplicação
  22. log4j Com log4j podemos classificar nosso log em: • INFO

    • WARN • ERRO • FATAL • DEBUG informações como, sucesso ao processar método/rotina fluxos alternativos, entrou em uma validação erro que fluxo não pode continuar erro ou falha de item de estrutura como banco, outra aplicação detalhes do contexto como tempo de resposta e retornos
  23. como podemos ver esses logs? em um passado não muito

    distante, era necessário: acessar o servidor # ssh [email protected]
  24. como podemos ver esses logs? em um passado não muito

    distante, era necessário: entrar na pasta de logs da aplicação # cd /opt/tomcat/logs
  25. como podemos ver esses logs? em um passado não muito

    distante, era necessário: exibir os logs em tempo real # tail -f /opt/tomcat/logs/catalina.out
  26. organizar é essencial vamos conhecer um pouco sobre o sleuth

    <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> </dependencies>
  27. organizar é essencial vamos conhecer um pouco sobre o sleuth

    “Spring Cloud Sleuth is able to trace your requests and messages so that you can correlate that communication to corresponding log entries.” https://docs.spring.io/spring-cloud-sleuth/docs/current-SNAPSHOT/reference/html/
  28. organizar é essencial vamos conhecer um pouco sobre o sleuth

    “Spring Cloud Sleuth is able to trace your requests and messages so that you can correlate that communication to corresponding log entries.” https://docs.spring.io/spring-cloud-sleuth/docs/current-SNAPSHOT/reference/html/
  29. organizar é essencial agora podemos identificar as threads 2020-10-21 12:01:16.285

    INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Example : Hello world!
  30. organizar é essencial application name 2020-10-21 12:01:16.285 INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589

    --- [nio-9000-exec-1] Example : Hello world! agora podemos identificar as threads
  31. organizar é essencial application name trace id 2020-10-21 12:01:16.285 INFO

    [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Example : Hello world! agora podemos identificar as threads
  32. organizar é essencial application name trace id span id 2020-10-21

    12:01:16.285 INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Example : Hello world! agora podemos identificar as threads
  33. organizar é essencial agora temos um id para ajudar na

    análise das threads 2020-10-21 12:01:16.285 INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Patient : Patient cad 2020-10-21 12:01:16.285 WARN [backend,0b6aaf642574eOO4,0b6aaf642574evv3] 289222 --- [nio-9000-exec-1] Example : Hello world! 2020-10-21 12:01:16.285 INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289333 --- [nio-9000-exec-1] Class2 : Fez outra! 2020-10-21 12:01:16.285 INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289444 --- [nio-9000-exec-1] Class1 : Fez algo! 2020-10-21 12:01:16.285 INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! 2020-10-21 12:01:16.285 INFO [backend,0b6aaf642574edd3,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad!
  34. organizar é essencial agora temos um id para ajudar na

    análise das threads … INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Patient : Patient cad … WARN [backend,0b6aaf642574eOO4,0b6aaf642574evv3] 289222 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289333 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574edd3,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad!
  35. organizar é essencial agora temos um id para ajudar na

    análise das threads … INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Patient : Patient cad … WARN [backend,0b6aaf642574eOO4,0b6aaf642574evv3] 289222 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289333 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574edd3,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad!
  36. organizar é essencial agora temos um id para ajudar na

    análise das threads … INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Patient : Patient cad … WARN [backend,0b6aaf642574eOO4,0b6aaf642574evv3] 289222 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289333 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574edd3,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! mesma thread
  37. organizar é essencial agora temos um id para ajudar na

    análise das threads … INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Patient : Patient cad … WARN [backend,0b6aaf642574eOO4,0b6aaf642574evv3] 289222 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289333 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574edd3,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! mesma thread outra thread
  38. organizar é essencial agora temos um id para ajudar na

    análise das threads … INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Patient : Patient cad … WARN [backend,0b6aaf642574eOO4,0b6aaf642574evv3] 289222 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289333 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574edd3,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! mesma thread
  39. organizar é essencial agora temos um id para ajudar na

    análise das threads … INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] 289589 --- [nio-9000-exec-1] Patient : Patient cad … WARN [backend,0b6aaf642574eOO4,0b6aaf642574evv3] 289222 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289333 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eaa3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574edd3,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! mesma thread
  40. organizar é essencial … ERROR [CreateAttendace,239jnjha923,ae45jhdm45567s] Problema cad. atendimento, paciente=233

    br.com.sua.app.InterceptionException: br.com.sua.app.exception.InvalidAgeException cadastro de atendimento médico …InterceptionException: br.com.sua.app.exception.ProntuarioCreateException …InterceptionException: java.lang.NumberFormatException: For input string: ""
  41. centralizador de logs servidor de logs 04:54:32 ERRO [CreateAttendace,239jnjha923,ae45jhdm45567s] Problema

    para cadastrar paciente, paciente=23344535345 br.com.sua.app.InterceptionException: br.com.sua.app.exception.InvalidAgeException servidor 1
  42. centralizador de logs servidor de logs 04:54:32 ERRO [CreateAttendace,239jnjha923,ae45jhdm45567s] Problema

    para cadastrar paciente, paciente=23344535345 br.com.sua.app.InterceptionException: br.com.sua.app.exception.InvalidAgeException 04:54:32 ERRO [CreateAttendace,239jnjha923,ae45jhdm45567s] Problema para cadastrar paciente, paciente=23344535345 br.com.sua.app.InterceptionException: br.com.sua.app.exception.InvalidAgeException servidor 1 servidor 2
  43. centralizador de logs servidor de logs 04:54:32 ERRO [CreateAttendace,239jnjha923,ae45jhdm45567s] Problema

    para cadastrar paciente, paciente=23344535345 br.com.sua.app.InterceptionException: br.com.sua.app.exception.InvalidAgeException 04:54:32 ERRO [CreateAttendace,239jnjha923,ae45jhdm45567s] Problema para cadastrar paciente, paciente=23344535345 br.com.sua.app.InterceptionException: br.com.sua.app.exception.InvalidAgeException servidor 1 servidor 2
  44. centralizador de logs servidor de logs Principais vantagens • Podemos

    Fazer consultas • É um banco de dados NoSQL • É escalável • Podemos conectar várias ferramentas
  45. métricas toda sequência de logs pode virar uma métrica quantidade

    de erros SQL quantidade de login negado quantidade de erros na funcionalidade crítica do sistema
  46. Logs eficientes + Request Trace + Centralização + Open source

    Sustentação com qualidade Primeiro passo antes de Observabilidade
  47. Logs eficientes + Request Trace + Centralização + Open source

    Sustentação com qualidade Primeiro passo antes de Observabilidade