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? Ninguém sabe mais sobre a falha

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

    ajudar na estratégia de correção das falhas
  4. por que é importante? Facilita o entendimento do cenário para

    ajudar na estratégia de correção das falhas
  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. 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
  7. 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
  8. o que podemos logar? Informações básicas - timestamp - host

    name - application name - trace id - span - level
  9. 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
  10. 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?
  11. log4j Se o analista precisar saber o nome do paciente,

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

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

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

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

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

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

    • WARN • ERRO • FATAL • DEBUG informações como, sucesso ao processar método/rotina
  18. 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
  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 erro que fluxo não pode continuar
  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 erro ou falha de item de estrutura como banco, outra aplicação
  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 detalhes do contexto como tempo de resposta e retornos
  22. como podemos ver esses logs? em um passado não muito

    distante, era necessário: acessar o servidor # ssh [email protected]
  23. 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
  24. 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
  25. organizar é essencial vamos conhecer um pouco sobre o Micrometer

    <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-brave </artifactId> </dependency>
  26. organizar é essencial vamos conhecer um pouco sobre o Micrometer

    “Micrometer Tracing is a facade over the Brave and OpenTelemetry tracers that gives insight into complex distributed systems at the level of an individual user request. Identify the root cause of issues faster with distributed tracing” https://micrometer.io/
  27. organizar é essencial vamos conhecer um pouco sobre o Micrometer

    “Micrometer Tracing is a facade over the Brave and OpenTelemetry tracers that gives insight into complex distributed systems at the level of an individual user request. Identify the root cause of issues faster with distributed tracing” https://micrometer.io/
  28. 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!
  29. organizar é essencial agora podemos identificar as threads 2020-10-21 12:01:16

    INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] … Example : Hello world!
  30. organizar é essencial application name agora podemos identificar as threads

    2020-10-21 12:01:16 INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] … Example : Hello world!
  31. organizar é essencial application name trace id agora podemos identificar

    as threads 2020-10-21 12:01:16 INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] … Example : Hello world!
  32. organizar é essencial application name trace id span id agora

    podemos identificar as threads 2020-10-21 12:01:16 INFO [backend,0b6aaf642574edd3,0b6aaf642574edd3] … Example : Hello world!
  33. organizar é essencial 0b6aaf642edd3 span id: agora temos um id

    para ajudar na análise das threads 0b6aaf642574edd3
  34. organizar é essencial 0b6aaf642574e8 span id: agora temos um id

    para ajudar na análise das threads 0b6aaf642edd3 0b6aaf642574edd3
  35. 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,0b6aaf642574asd1,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,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad!
  37. … 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,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! organizar é essencial agora temos um id para ajudar na análise das threads
  38. … 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,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! organizar é essencial agora temos um id para ajudar na análise das threads mesma thread
  39. … 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,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! organizar é essencial agora temos um id para ajudar na análise das threads mesma thread
  40. … 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,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! organizar é essencial agora temos um id para ajudar na análise das threads mesma thread
  41. … 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,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! organizar é essencial agora temos um id para ajudar na análise das threads mesma thread
  42. … 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,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Example : Hello world! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289444 --- [nio-9000-exec-1] Attenda : Attenda Cad! … INFO [backend,0b6aaf642574asd1,0b6aaf642574eww3] 289589 --- [nio-9000-exec-1] Prontua : Pront Cad! organizar é essencial agora temos um id para ajudar na análise das threads mesma thread
  43. 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: ""
  44. 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: ""
  45. 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: ""
  46. centralizador de logs 04:54:32 ERROR [CreateAttendace,239jnjha923,ae45jhdm45567s] Problema para cadastrar paciente…

    servidor 1 04:54:32 ERRO [CreateAttendace,239jnjha923,ae45jhdm45567s] Paciente cadastrado com sucesso… servidor 2
  47. centralizador de logs servidor de logs 04:54:32 ERROR [CreateAttendace,239jnjha923,ae45jhdm45567s] Problema

    para cadastrar paciente… servidor 1 04:54:32 ERRO [CreateAttendace,239jnjha923,ae45jhdm45567s] Paciente cadastrado com sucesso… servidor 2
  48. centralizador de logs servidor de logs Principais vantagens • Podemos

    Fazer consultas • É um banco de dados NoSQL • É escalável • Podemos conectar várias ferramentas
  49. 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
  50. Logs eficientes + Request Trace + Centralização + Open source

    Sustentação com qualidade Logs é um dos pilares da tal da Observabilidade
  51. Logs eficientes + Request Trace + Centralização + Open source

    Sustentação com qualidade Logs é um dos pilares da tal da Observabilidade