<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ilana Cabral Coutinho</title>
    <description>The latest articles on DEV Community by Ilana Cabral Coutinho (@ilanacabral).</description>
    <link>https://dev.to/ilanacabral</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1281144%2F04799c2d-850c-486a-908e-c7843f94d42d.jpeg</url>
      <title>DEV Community: Ilana Cabral Coutinho</title>
      <link>https://dev.to/ilanacabral</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ilanacabral"/>
    <language>en</language>
    <item>
      <title>Observabilidade em Sistemas de Software: Práticas, Técnicas e Ferramentas</title>
      <dc:creator>Ilana Cabral Coutinho</dc:creator>
      <pubDate>Tue, 15 Oct 2024 22:57:13 +0000</pubDate>
      <link>https://dev.to/womakerscode/observabilidade-em-sistemas-de-software-praticas-tecnicas-e-ferramentas-2g5n</link>
      <guid>https://dev.to/womakerscode/observabilidade-em-sistemas-de-software-praticas-tecnicas-e-ferramentas-2g5n</guid>
      <description>&lt;p&gt;Autoras: &lt;a href="//dev.to/ilanacabral"&gt;Ilana Cabral Coutinho&lt;/a&gt;, &lt;a href="//dev.to/alicia-so"&gt;Alícia Oliveira&lt;/a&gt; e &lt;a href="https://dev.to/raphaelaberto"&gt;Anna Raphaela Berto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A observabilidade é um conceito fundamental no desenvolvimento de software moderno, especialmente em sistemas distribuídos e microsserviços. Neste artigo, vamos explorar o que é observabilidade, suas técnicas e as ferramentas de mercado que podem ser utilizadas para implementá-la em projetos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que é Observabilidade?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Observabilidade é a capacidade de medir o estado interno de um sistema com base em sua saída externa. Em outras palavras, é a habilidade de entender o que está acontecendo dentro de um sistema apenas observando os dados que ele gera, como logs, métricas e traces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyz41p9lb7ksuwsrmwz3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyz41p9lb7ksuwsrmwz3.png" alt="Image description" width="451" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diferença entre Monitoramento e Observabilidade&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monitoramento&lt;/strong&gt;: Envolve coleta de dados sobre o desempenho e a saúde do sistema.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observabilidade&lt;/strong&gt;: Vai além do monitoramento, permitindo uma compreensão profunda e a capacidade de diagnosticar problemas complexos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Logs: O Primeiro Pilar da Observabilidade&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Os logs são registros de eventos e atividades realizadas por um sistema. Esses registros são essenciais para monitorar, diagnosticar problemas e garantir a segurança e o desempenho das operações. Na observabilidade, um dos principais objetivos do uso de logs é obter insights valiosos, identificar padrões comportamentais e antecipar tendências de funcionamento de uma aplicação.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Boas Práticas para Logs&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Estruturação&lt;/strong&gt;: Para facilitar a observabilidade, é fundamental que os logs sejam estruturados de forma padronizada para facilitar a leitura, manutenção e análise. Cada mensagem de log no formato JSON representa um objeto com pares chave-valor, facilitando a identificação dos dados. Essa padronização é capaz de melhorar as análises, a legibilidade e o acesso às informações geradas pelos logs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzx9zlovm5k0s1ljx9gck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzx9zlovm5k0s1ljx9gck.png" alt="Image description" width="602" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um exemplo em &lt;strong&gt;Java&lt;/strong&gt; com a biblioteca Logback pode ser visto abaixo mostrando os níveis de logs que podemos capturar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbycybk10kssyopiktd90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbycybk10kssyopiktd90.png" alt="Image description" width="602" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Níveis de Log&lt;/strong&gt;: Os logs podem ser categorizados de acordo com seu nível, de acordo com o tipo e objetivo que o log é implementado.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;INFO: serve basicamente para registrar informações gerais do sistema, não necessitam necessariamente de uma ação. Registram por exemplo logs de envio e recebimento bem sucedidos para atividades da aplicação.
&lt;/li&gt;
&lt;li&gt;DEBUG: utilizado para caracterizar os logs que são utilizados para identificar características específicas ou debugar alguma funcionalidade do sistema. Utilizado principalmente para "troubleshooting" fornecendo informações técnicas.
&lt;/li&gt;
&lt;li&gt;ERROR: identifica logs que de fato representam algum erro ou comportamento indesejado que requer ação necessária para reverter este estado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A utilização desses níveis na categorização dos logs além de ser uma boa prática, otimiza a detecção de informações e possíveis problemas, permitindo a identificação de forma mais rápida.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ferramentas de Logs: ELK Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma solução popular para gerenciamento de logs é o &lt;strong&gt;ELK Stack&lt;/strong&gt; (Elasticsearch, Logstash, Kibana):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Elasticsearch&lt;/strong&gt;: Armazenamento e busca de grandes volumes de dados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Logstash&lt;/strong&gt;: Processamento e transformação dos logs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kibana&lt;/strong&gt;: Visualização dos logs em uma interface gráfica.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftlafo9itn1i60tfaqz0v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftlafo9itn1i60tfaqz0v.png" alt="Image description" width="602" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tipos de logs e suas aplicabilidades&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Existem diversos tipos de logs, cada um capturando informações específicas que necessitam ser analisadas para diferentes propósitos. Alguns tipos comuns e suas aplicações:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs de Alteração: Registra as modificações realizadas em um sistema, como atualizações de configuração ou mudanças de código. Eles podem identificar a autoria e demais informações fundamentais para a rastreabilidade de mudanças. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo: Sistema que registra logs durante uma atualização de software com informações de alteração como quais arquivos foram modificados e por qual desenvolvedor, garantindo que todas as mudanças sejam documentadas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs de Acesso: Registra informações de acesso a um sistema, registrando pedidos de acesso, solicitação a acesso de arquivos, autenticação de usuários, assim como os dados do usuário. Esses logs são fundamentais para auditorias de segurança. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo: Implementação de logs para um usuário acessar ou editar um documento sensível, o sistema gera um log de acesso que registra a data, hora e informações de usuário, permitindo o rastreamento dos acesso aos documentos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs de ameaças: São logs que registram atividades suspeitas que ameaçam a segurança de um sistema. São particularmente úteis rastrear comportamentos anômalos e prevenir incidentes de segurança, como invasões, ataques de negação de serviço, ataques de força bruta, ou vazamento de dados e exploração de vulnerabilidades.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo: Logs de registro caso um usuário faça várias tentativas de login fracassadas, um log de ameaça é gerado, contendo o endereço IP, o horário das tentativas e informações do usuário. Com base nesses logs, o sistema pode disparar alertas ou bloquear o acesso após um número anormal de tentativas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Métricas: O Segundo Pilar da Observabilidade&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Métricas são dados quantitativos que medem o desempenho de um sistema e são essenciais para monitorar sua saúde e identificar tendências. Elas geralmente se dividem em dois grupos principais: métricas de sistema e métricas de aplicação. As métricas de sistema monitoram recursos como uso de CPU, memória e disco, enquanto as métricas de aplicação identificam aspectos como taxas de requisição, latências e erros. Essas métricas fornecem uma visão geral do comportamento do sistema tornando o acompanhamento mais eficiente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ferramentas para Métricas: Prometheus e Grafana&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As mais populares para monitoramento de métricas incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prometheus&lt;/strong&gt;: Ferramenta de código aberto para coleta e armazenamento de métricas como séries temporais.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Grafana&lt;/strong&gt;: Plataforma de análise e monitoramento de dados que suporta várias fontes de dados, incluindo o Prometheus, ideal para criação de dashboards interativos.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Exemplo de monitoramento&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1h49lakctjp84bckjjbl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1h49lakctjp84bckjjbl.png" alt="Image description" width="602" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traces: O Terceiro Pilar da Observabilidade&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que são traces?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Os traces rastreiam o fluxo de uma requisição através de diferentes serviços em um sistema distribuído. Eles são cruciais para entender a latência e identificar gargalos. Os traces possuem como componentes os spans, que representam uma unidade de trabalho, e o Tracing ID, que é um identificador único para uma requisição completa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ferramenta para Tracing: Jaeger&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma ferramenta popular para tracing é o &lt;strong&gt;Jaeger&lt;/strong&gt;, que ajuda a monitorar e solucionar problemas de transações em sistemas distribuídos, facilitando a detecção de problemas de latência e gargalos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04duqbdc24172awpiml8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04duqbdc24172awpiml8.png" alt="Image description" width="602" height="409"&gt;&lt;/a&gt;      Exemplo de Código em Java com OpenTelemetry e Jaeger&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7lflsskksljb0209vhn4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7lflsskksljb0209vhn4.png" alt="Image description" width="602" height="252"&gt;&lt;/a&gt;&lt;br&gt;
O Jaeger facilita a visualização do caminho percorrido por uma requisição e identifica pontos de falha ou lentidão.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A observabilidade desempenha um papel crucial na garantia do desempenho, segurança e confiabilidade de sistemas modernos, especialmente em ambientes complexos como os de microsserviços e sistemas distribuídos. Ao combinar logs estruturados, métricas precisas e traces detalhados, as equipes de desenvolvimento conseguem uma visão completa do estado e comportamento de suas aplicações, permitindo uma resposta rápida a problemas e a otimização contínua dos serviços.&lt;/p&gt;

&lt;p&gt;Ferramentas como ELK Stack, Prometheus, Grafana e Jaeger são essenciais para implementar essa abordagem, oferecendo suporte para monitoramento, análise de dados e identificação de falhas. Quando bem implementada, a observabilidade não apenas melhora a capacidade de resposta e solução de problemas, mas também promove um desenvolvimento mais eficiente e resiliente, preparando as organizações para enfrentar desafios e evoluir suas aplicações de forma sustentável.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>monitoramento</category>
      <category>observabilidade</category>
    </item>
  </channel>
</rss>
