<?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>Forem: Diogo Antunes</title>
    <description>The latest articles on Forem by Diogo Antunes (@haaragard).</description>
    <link>https://forem.com/haaragard</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%2F591025%2Fa0843432-0b3b-4e8a-b38c-13a99ddd5a90.jpeg</url>
      <title>Forem: Diogo Antunes</title>
      <link>https://forem.com/haaragard</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/haaragard"/>
    <language>en</language>
    <item>
      <title>2. Logs</title>
      <dc:creator>Diogo Antunes</dc:creator>
      <pubDate>Sun, 06 Apr 2025 22:09:29 +0000</pubDate>
      <link>https://forem.com/haaragard/2-logs-cpk</link>
      <guid>https://forem.com/haaragard/2-logs-cpk</guid>
      <description>&lt;h2&gt;
  
  
  O que são logs?
&lt;/h2&gt;

&lt;p&gt;Logs, são uma parte importante da Observabilidade, que servem para nos permitir entender o estado do sistema ao analisar os dados que são gerados por meio deles.&lt;/p&gt;

&lt;p&gt;Os logs geralmente são eventos e erros que ocorrem em um sistema, bons exemplo são Logs de erros, logins e configurações do sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que logs registram?
&lt;/h3&gt;

&lt;p&gt;Logs geralmente registram&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Horário de execução;&lt;/li&gt;
&lt;li&gt;Identificadores de execução (identificadores, referencias de entidades como “ids”);&lt;/li&gt;
&lt;li&gt;Endereço de quem realizou a ação/fluxo (IP);&lt;/li&gt;
&lt;li&gt;Demais detalhes de evento (login, logout, registro, exclusão);&lt;/li&gt;
&lt;li&gt;Demais detalhes de erros (mensagens, códigos, trace de exceptions).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Como os logs são gerados?
&lt;/h3&gt;

&lt;p&gt;Logs são gerados automaticamente por aplicações ao serem executados comandos predefinidos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quais são as limitações dos logs?
&lt;/h3&gt;

&lt;p&gt;A principal limitação dos Logs é depender de uma pre configuração para que sejam realizados esses registros. Por conta disso, acabam sendo limitados a registrar uma ação por vez, sendo Erros, Debugs, Eventos, Ações.&lt;/p&gt;

&lt;h3&gt;
  
  
  Boas Práticas na Geração de Logs
&lt;/h3&gt;

&lt;p&gt;Estrutura e formato&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mantenha um padrão consistente de formatação em toda a aplicação&lt;/li&gt;
&lt;li&gt;Inclua timestamp em formato padronizado&lt;/li&gt;
&lt;li&gt;Utilize IDs de correlação para rastrear requisições através de diferentes serviços&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Níveis de Log&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ERROR: Use para falhas que precisam de atenção imediata&lt;/li&gt;
&lt;li&gt;WARN: Para situações potencialmente prejudiciais&lt;/li&gt;
&lt;li&gt;INFO: Para eventos significativos do negócio&lt;/li&gt;
&lt;li&gt;DEBUG: Para informações detalhadas úteis durante o desenvolvimento&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conteúdo&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evite dados sensíveis (senhas, tokens, dados pessoais)&lt;/li&gt;
&lt;li&gt;Inclua contexto suficiente para entender o problema&lt;/li&gt;
&lt;li&gt;Use mensagens descritivas e acionáveis&lt;/li&gt;
&lt;li&gt;Registre stacktraces completos para erros&lt;/li&gt;
&lt;li&gt;Siga regulamentações de privacidade (GDPR, LGPD)&lt;/li&gt;
&lt;li&gt;Não registre informações duplicadas&lt;/li&gt;
&lt;li&gt;Não use logs para métricas de negócio&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Como podemos monitorar logs?
&lt;/h3&gt;

&lt;p&gt;É possível utilizar de softwares específicos para monitamento de logs. Alguns exemplos são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grafana Loki;&lt;/li&gt;
&lt;li&gt;Scalyr&lt;/li&gt;
&lt;li&gt;Logstash&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Também é possível fazer o monitoramento e gerenciamento dos Logs utilizando alguns conjuntos de ferramentas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grafana Loki + Grafana dashboards;&lt;/li&gt;
&lt;li&gt;Elasticsearch, Logstash e Kibana (Stack ELK);&lt;/li&gt;
&lt;li&gt;Graylog (Gerenciamento de Logs);&lt;/li&gt;
&lt;li&gt;Splunk (Gerenciamento de Logs);&lt;/li&gt;
&lt;li&gt;Loggly (Gerenciamento de Logs);&lt;/li&gt;
&lt;li&gt;Sumo Logic (Gerenciamento de Logs).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Aplicação prática de logs com PHP + Monolog
&lt;/h2&gt;

&lt;p&gt;Para a representação prática de Logs foi decidido por se utilizar da linguagem PHP em conjunto de uma biblioteca muito popular para a criação de Logs, o Monolog, que implementa uma interface definida como &lt;a href="https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md" rel="noopener noreferrer"&gt;PSR-3&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para essa implementação, será utilizado uma runtime do PHP 8.3 no sistema operacional alpine-linux, por meio de um container Docker.&lt;/p&gt;

&lt;p&gt;Utilizaremos também um software chamado Composer, ele servirá para gerenciar as dependencias da nossa aplicação de teste, com ele será possível baixar e importar mais facilmente o pacote Monolog.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inicio da aplicação
&lt;/h3&gt;

&lt;p&gt;Para iniciarmos, será necessário criar um arquivo &lt;code&gt;Dockerfile&lt;/code&gt; e salvar o seguinte conteúdo dentro dele&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Dockerfile&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; php:8.3-alpine&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=composer:latest /usr/bin/composer /usr/bin/composer&lt;/span&gt;

&lt;span class="k"&gt;LABEL&lt;/span&gt;&lt;span class="s"&gt; authors="haaragard"&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /var/www/app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(C.01) Para realizarmos o build da imagem definida no arquivo &lt;code&gt;Dockerfile&lt;/code&gt; é necessário executar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker image build &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; php-fiddle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Este realizará a build da nossa imagem definida no arquivo &lt;code&gt;Dockerfile&lt;/code&gt;(O arquivo &lt;code&gt;Dockerfile&lt;/code&gt; precisa estar no mesmo contexto de execução, por isso o ponto “.”).&lt;/li&gt;
&lt;li&gt;O comando &lt;code&gt;image build .&lt;/code&gt; serve para realizar o build da nossa imagem Docker pre-definida no arquivo Dockerfile.&lt;/li&gt;
&lt;li&gt;A flag &lt;code&gt;-t php-fiddle&lt;/code&gt; serve para nomearmos a nossa imagem como &lt;code&gt;php-fiddle&lt;/code&gt; , poderíamos adiconar alguma “versão” acrescentando um texto &lt;code&gt;:my-version&lt;/code&gt; juntamente do &lt;code&gt;php-fiddle&lt;/code&gt; , porém queremos criar apenas um nome não versionado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(C.02) Para executar um container com a nossa imagem com o build já realizado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nv"&gt;$PWD&lt;/span&gt;:/var/www/app php-fiddle sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Este comando executará o nosso container &lt;code&gt;php-fiddle&lt;/code&gt; , e iniciará rodando o terminal &lt;code&gt;sh&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A flag &lt;code&gt;--rm&lt;/code&gt; serve para remover o container logo após o fim da execução do comando (como vamos utilizar o terminal de forma interativa (&lt;code&gt;-it … sh&lt;/code&gt;), ele ficará preso até o fim da execução do terminal.&lt;/li&gt;
&lt;li&gt;A flag &lt;code&gt;-it&lt;/code&gt;serve para executar o comando final de forma interativa com o terminal do host.&lt;/li&gt;
&lt;li&gt;A flag &lt;code&gt;-v&lt;/code&gt;serve para fazer um “vinculo” de storages, com o conteúdo &lt;code&gt;$PWD:/var/www/app&lt;/code&gt; é feito o vínculo da nossa pasta de execução(&lt;code&gt;$PWD&lt;/code&gt;) com o caminho &lt;code&gt;/var/www/app&lt;/code&gt; .&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(C.03) Para executar algum script específico sem “prender” o terminal, é possível com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nv"&gt;$PWD&lt;/span&gt;:/var/www/app php-fiddle &lt;span class="o"&gt;{&lt;/span&gt;some-script&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Este comando executará o script &lt;code&gt;{some-script}&lt;/code&gt; dentro do container &lt;code&gt;php-fiddle&lt;/code&gt; contendo os arquivos do contexto atual.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Definindo nossas dependencias
&lt;/h3&gt;

&lt;p&gt;Para iniciarmos o desenvolvimento, precisamos configurar a nossa aplicação com o Composer, que precisa ser configurado com algumas definições, escopos e dependencias(caso utilizados, no nosso caso será o monolog)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Os passos a seguir serão realizados dentro do container, após executar o comando C.02)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Vamos iniciar a configuração do nosso projeto com o Composer&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer init &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; php/fiddle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;O comando &lt;code&gt;composer init&lt;/code&gt; fará a criação do nosso projeto com o Composer&lt;/li&gt;
&lt;li&gt;A flag &lt;code&gt;-n&lt;/code&gt; fará com que seja uma criação sem mais opções interativas com o terminal.&lt;/li&gt;
&lt;li&gt;A flag &lt;code&gt;--name&lt;/code&gt; com o conteúdo &lt;code&gt;php/fiddle&lt;/code&gt; nomeará nosso projeto como &lt;code&gt;php/fiddle&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Também será necessário definir e baixar as dependências, que será apenas o &lt;code&gt;monolog&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require monolog/monolog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;O comando &lt;code&gt;composer require&lt;/code&gt; fará a inclusão de uma biblioteca às nossas dependencias Composer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Criando o arquivo main.php
&lt;/h3&gt;

&lt;p&gt;Deverá ser criado o arquivo &lt;code&gt;main.php&lt;/code&gt; com o seguinte conteúdo&lt;/p&gt;

&lt;p&gt;&lt;code&gt;main.php&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="k"&gt;require_once&lt;/span&gt; &lt;span class="s2"&gt;"vendor/autoload.php"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\Monolog\Logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'logger-name'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$streamHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\Monolog\Handler\StreamHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="no"&gt;STDOUT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;\Monolog\Level&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nc"&gt;Warning&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pushHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$streamHandler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'Foo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'bar'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'baz'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'some'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'more'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'context'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'Bar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;O código a cima irá produzir 2 Logs no terminal, o primeiro Log será do tipo &lt;code&gt;warning&lt;/code&gt; e o segundo será do tipo &lt;code&gt;error&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;O comando &lt;code&gt;require_once&lt;/code&gt; realizará a inclusão das configurações e bibliotecas gerenciadas pelo Composer.&lt;/li&gt;
&lt;li&gt;Os demais comandos são para a instância do nosso Logger, configuração e produção de registros.&lt;/li&gt;
&lt;li&gt;Na definição do &lt;code&gt;StreamHandler&lt;/code&gt; é possível definir outra saída de texto, em vez do terminal, para que seja registrado em um local, como um arquivo &lt;code&gt;log_register.log&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;O arquivo base de exemplo para este código se encontra em &lt;a href="https://github.com/Seldaek/monolog/blob/main/README.md" rel="noopener noreferrer"&gt;monolog - README&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Execução e logs
&lt;/h3&gt;

&lt;p&gt;Executaremos o nosso código da seguinte forma&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php main.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após a execução, será visível a seguinte saída no terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/var/www/app &lt;span class="c"&gt;# php main.php&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;2025-04-06T21:31:37.326611+00:00] logger-name.WARNING: Foo &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"bar"&lt;/span&gt;:&lt;span class="s2"&gt;"baz"&lt;/span&gt;,&lt;span class="s2"&gt;"some"&lt;/span&gt;:&lt;span class="s2"&gt;"more"&lt;/span&gt;,&lt;span class="s2"&gt;"context"&lt;/span&gt;:&lt;span class="s2"&gt;"data"&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;2025-04-06T21:31:37.326965+00:00] logger-name.ERROR: Bar &lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vemos que a biblioteca &lt;code&gt;monolog&lt;/code&gt; já produz nossos logs com um certo padrão, contendo &lt;code&gt;[{date_time_tz}] {logger_name}.{logger_level}: {log_message} {context_from_array_to_json} {other_data}&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;Considerando o resultado, é perceptível que Logs realizam uma parte importante no registro de eventos em tempo de execução, esses eventos podem ser uma execução de fluxo dentro da aplicação garantindo o funcionamento, até erros inesperados ou debugs.&lt;/p&gt;

&lt;p&gt;Com isso, finalizamos o estudo de Logs, tendo um exemplo demonstrativo desta prática tão importante do uso de Logs.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Ref. 1 - &lt;a href="https://www.exabeam.com/explainers/log-management/top-6-log-management-tools-and-how-to-choose/" rel="noopener noreferrer"&gt;Ferramentas para gerenciamento de logs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 2 - &lt;a href="https://sematext.com/blog/best-log-management-tools/" rel="noopener noreferrer"&gt;Melhores ferramentas para gerenciamento de logs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 3 - &lt;a href="https://www.techtarget.com/searchitoperations/tip/Top-observability-tools" rel="noopener noreferrer"&gt;Principais ferramentas de observabilidade&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 4 - &lt;a href="https://www.dynatrace.com/news/blog/what-is-observability-2/" rel="noopener noreferrer"&gt;O que é observabilidade?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 5 - &lt;a href="https://edgedelta.com/company/blog/three-pillars-of-observability" rel="noopener noreferrer"&gt;Three Pillars of Observability&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 6 - &lt;a href="https://daily.dev/blog/12-logging-best-practices-dos-and-donts" rel="noopener noreferrer"&gt;12 Logging best practices, dos and dont’s&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 7 - &lt;a href="https://docs.docker.com/" rel="noopener noreferrer"&gt;Docker Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 8 - &lt;a href="https://php.net/" rel="noopener noreferrer"&gt;PHP Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 9 - &lt;a href="https://getcomposer.org" rel="noopener noreferrer"&gt;Composer (A Dependency Manager for PHP)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 10 - &lt;a href="https://github.com/Seldaek/monolog" rel="noopener noreferrer"&gt;Monolog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 11 - &lt;a href="https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md" rel="noopener noreferrer"&gt;PSR-3&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>learning</category>
      <category>php</category>
      <category>observability</category>
    </item>
    <item>
      <title>1. Um breve estudo sobre observabilidade</title>
      <dc:creator>Diogo Antunes</dc:creator>
      <pubDate>Sun, 06 Apr 2025 18:11:16 +0000</pubDate>
      <link>https://forem.com/haaragard/um-breve-estudo-sobre-observabilidade-48cf</link>
      <guid>https://forem.com/haaragard/um-breve-estudo-sobre-observabilidade-48cf</guid>
      <description>&lt;h2&gt;
  
  
  O que é a Observabilidade?
&lt;/h2&gt;

&lt;p&gt;A observabilidade se refere a capacidade de compreender o estado interno ou condições de um ou mais sistemas complexos se baseando apenas em saídas externas. (Ref. 1, 2 e 3)&lt;/p&gt;

&lt;p&gt;Quando aplicamos algumas metodologias que fazem parte da ideia de Observabilidade, elas nos dão a habilidade de compreender fluxos, dados, montar estatíticas e, principalmente, compreender melhor os erros, tudo isso sem precisar de testes complexos ou implementações adicionais.&lt;/p&gt;

&lt;p&gt;“Quanto mais observável for um sistema, mais rápido e precisamente você poderá identificar a causa raiz de um problema de desempenho, sem a necessidade de testes ou programação adicionais.” - (Ref. 4)&lt;/p&gt;

&lt;h2&gt;
  
  
  Como funciona a Observabilidade?
&lt;/h2&gt;

&lt;p&gt;A observabilidade funciona coletando continuamento dados de desempenho para criar um registro completo e correlacionado de cada fluxo do sistema em tempo de execução. Quanto mais observável for o seu sistema, mais rápido e precisamento você poderá identificar e rastrear um problema de desempenho até suas origens. (Ref. 1 e 2)&lt;/p&gt;

&lt;p&gt;Os principais conceitos da observabilidade, são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dados de Logs;

&lt;ul&gt;
&lt;li&gt;Os logs registram eventos e erros com informações, levam também informações importantes como data e hora de execução e dados utilizados.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Métricas;

&lt;ul&gt;
&lt;li&gt;As métricas são registros de dados quantitativos, servem principalmente para identificar o número de cadastros realizados, números de acessos a serviços e consumo de recursos.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Tracing distribuído;

&lt;ul&gt;
&lt;li&gt;O Tracing distribuído serve para registrar de ponta a ponta cada operação realizada pela aplicação, marca do início ao fim das operações com um identificador único e registra eventos relevantes.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Mapeamento de dependências;

&lt;ul&gt;
&lt;li&gt;Os mapas de dependência mostram como aplicações, serviços e componentes de infraestrutura estão conectados. (Ref. 5)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Detecção de anomalias.

&lt;ul&gt;
&lt;li&gt;Uma plataforma de observabilidade correlaciona enormes quantidades de dados de telemetria em tempo real, o que fornece às equipes de DevOps, SRE e TI uma imagem contextual completa de qualquer evento ou problema. (Ref. 5)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Por que a observabilidade é importante?  — Por que precisamos dela?
&lt;/h2&gt;

&lt;p&gt;A observabilidade é importante porque permite que as equipes avaliem, monitorem e melhorem o desempenho de sistemas distribuídos. É muito mais eficaz do que os métodos de monitoramento tradicionais. Uma plataforma de observabilidade de ponta a ponta pode ajudar a romper silos e promover a colaboração. Os problemas podem ser diagnosticados de forma proativa, analisados e rastreados até suas origens. (Ref. 5)&lt;/p&gt;

&lt;p&gt;Com a  stack completa de observabilidade (Logs, Métricas e Traces), pode-se acompanhar o desempenho do seu ecossistema multinuvem em tempo real e com um rico histórico. É possível sintetizar dados de endpoints e serviços gerados por hardware, software, componentes de infraestrutura de nuvem, containers, open source, microsserviços e muito mais. (Ref. 5)&lt;/p&gt;

&lt;p&gt;A observabilidade ajuda as organizações a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Descobrir e analisar a importância dos incidentes de desempenho para os negócios&lt;/li&gt;
&lt;li&gt;Aumentar a eficiência dos ciclos de vida de desenvolvimento de software&lt;/li&gt;
&lt;li&gt;Acelerar a resolução de problemas e a análise de causa raiz&lt;/li&gt;
&lt;li&gt;Melhorar as experiências do usuário final&lt;/li&gt;
&lt;li&gt;Fortalecer a segurança das aplicações&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Ref. 5)&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Ref. 1 - &lt;a href="https://www.redhat.com/pt-br/topics/devops/what-is-observability" rel="noopener noreferrer"&gt;Observabilidade&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 2 - &lt;a href="https://www.ibm.com/br-pt/resources/automate/observability-basics" rel="noopener noreferrer"&gt;O que é observabilidade?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 3 - &lt;a href="https://www.youtube.com/watch?v=TQur9GJHIIQ&amp;amp;list=PLDGkOdUX1Ujo27m6qiTPPCpFHVfyKq9jT" rel="noopener noreferrer"&gt;What is Observability? | Grafana for Beginners&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 4 - &lt;a href="https://grafana.com/tutorials/grafana-fundamentals/" rel="noopener noreferrer"&gt;Grafana Fundamentals&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 5 - &lt;a href="https://www.elastic.co/pt/what-is/observability" rel="noopener noreferrer"&gt;O que é observabilidade?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ref. 6 - &lt;a href="https://youtu.be/aJpzr8648XE" rel="noopener noreferrer"&gt;Metrics, Logs and Traces: What To Observe and Why&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;A.N.:&lt;br&gt;
Estou criando alguns posts como referência a estudos que venho realizando, sintam-se a vontade para acrescentar informações relevantes nos comentários.&lt;br&gt;
Obrigado.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>observability</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
