Os 3 Pilares da Observabilidade em sistemas distribuídos

A editora e plataforma de ensino O’Reilly lançou uma publicação, em 2018, intitulada “Distributed Systems Observability”. Nessa obra, o capítulo 4 oferece uma visão ampla do que ficou conhecido como “Os 3 Pilares da Observabilidade”. Muito embora esses 3 pilares sejam descritos separadamente, inclusive neste post, necessitam ser analisados em conjunto, dentro de uma abordagem coesa, capaz de oferecer uma visão ampla do estado completo do sistema sob difentes aspectos. Assim, para que uma abordagem unificada faça sentido, é necessário tratar o todo, e não somente a mera soma de cada parte, individualmente, compondo o contexto geral do sistema.

Mas, para efeito de estudo, trataremos separadamente e de forma aprofundada cada um dos 3 pilares, quais sejam:

Logs
Métricas
Rastreamento de dados (tracing)


Embora ter acesso completo aos três não necessariamente torne o sistema mais “observável”, esses são elementos-chave que, se bem compreendidos, poderão levar a sistemas melhores e mais eficientes e em uma boa experiência do usuário.

Logs de eventos


Um log de evento é um registro imutável com carimbo de data/hora de eventos discretos que aconteceram ao longo do tempo. Os logs de eventos em geral vêm em 3 formas, mas são fundamentalmente os mesmos: um carimbo de data/hora e uma carga útil de algum contexto. As três 3 formas são:

Texto. Um registro de log pode em formato texto. Este também é o formato mais comum de log que existe.

Estruturado. Muito “evangelizado” e defendido nos últimos tempos. Normalmente, esses logs são emitidos no formato JSON.

Binário. Pense em logs no formato Protobuf, binlogs MySQL usados para replicação e point-in-time recovery, systemd journal logs, o formato pflog usado pelo firewall BSD pf que frequentemente serve como um frontend para a ferramenta tcpdump.

O debug de patologias raras ou infrequentes de sistemas geralmente envolve o debug em um nível muito fino de granularidade. Logs de eventos, em particular, são preciosos quando se trata de fornecer insights valiosos juntamente com amplo contexto sobre a cauda longa que médias e porcentagens não trazem à tona. Como tal, os logs de eventos são especialmente úteis para descobrir comportamentos emergentes e imprevisíveis exibidos por componentes de um sistema distribuído.

Falhas em sistemas distribuídos complexos raramente surgem devido à ocorrência de um evento específico em um componente específico do sistema. Frequentemente, vários gatilhos possíveis em um gráfico altamente interconectado de componentes estão envolvidos na causa raiz e no contexto do problema. Olhar, simplesmente, para eventos discretos que ocorreram em qualquer sistema em algum ponto no tempo, torna impossível determinar todos esses gatilhos. Para definir os diferentes gatilhos, é necessário ser capaz de fazer o seguinte:

  • Começar com um sintoma identificado por uma métrica de alto nível ou um log de evento em um sistema específico
  • Inferir o ciclo de vida da solicitação em diferentes componentes da arquitetura distribuída
  • Iterativamente, faça perguntas sobre as interações entre as várias partes do sistema

Além de inferir o destino de uma solicitação ao longo de seu ciclo de vida (que geralmente é de curta duração), também se torna necessário ser capaz de inferir o destino de um sistema como um todo (medido ao longo de uma duração que, por sua vez, é da ordem de magnitude mais longa do que o ciclo de vida de uma única solicitação).

Os rastreamentos (traces) e as métricas são uma abstração construída sob os logs que pré-processam e codificam as informações ao longo de dois eixos ortogonais, um sendo centrado na solicitação (rastreamento) e o outro no sistema (métrica).

Os prós e contras dos logs

Logs são, de longe, os mais fáceis de gerar. O fato de um log ser apenas uma string ou um blob de JSON ou ainda pares de valores-chave digitados facilita a representação de quaisquer dados na forma de uma linha de log. A maioria das linguagens, frameworks de aplicação e bibliotecas vem com suporte para log. Logs também são fáceis de instrumentar, já que adicionar uma linha de log é tão trivial quanto adicionar uma instrução de impressão. Os logs têm um desempenho muito bom em termos de revelar informações altamente granulares repletas de contexto local rico, desde que o espaço de pesquisa seja localizado para eventos que ocorreram em um único serviço.

A utilidade dos logs, contudo, termina aí. Embora a geração de log possa ser fácil, as idiossincrasias de desempenho de várias bibliotecas de log populares deixam muito a desejar. A maioria das bibliotecas de log de desempenho aloca muito pouco, se muito, e é extremamente rápida. No entanto, as bibliotecas de log padrão de muitas linguagens e estruturas também não são lá aquelas coisas, o que significa que a aplicação como um todo se torna suscetível a um desempenho abaixo do ideal devido à sobrecarga de log. Além disso, as mensagens de log também podem ser perdidas, a menos que se use um protocolo como RELP para garantir a entrega confiável de mensagens. Isso se torna especialmente importante quando os dados de log são usados para fins de cobrança ou pagamento.

Por último, a menos que a biblioteca de log possa amostrar logs dinamicamente, logs excessivos têm a capacidade de afetar adversamente o desempenho da aplicação como um todo. Isso é exacerbado quando o log não é assíncrono e o processamento da requisição é bloqueado ao gravar uma linha de log no disco ou na stdout.

No lado do processamento, os logs brutos são quase sempre normalizados, filtrados e processados ​​por uma ferramenta como Logstash, fluentd, Scribe ou Heka antes de serem persistidos em um armazenamento de dados como Elasticsearch ou BigQuery. Se um aplicativo gerar um grande volume de logs, os logs podem exigir armazenamento em buffer adicional em um broker como o Kafka antes de serem processados ​​pelo Logstash. Soluções hospedadas como o BigQuery têm cotas que não podem ser excedidas.

Do lado do armazenamento, embora o Elasticsearch possa ser um mecanismo de pesquisa fantástico, executá-lo acarreta um custo operacional real. Mesmo que uma organização tenha uma equipe de engenheiros de operações especialistas na operação do Elasticsearch, podem existir outras desvantagens. Caso em questão: não é incomum ver uma queda acentuada nos gráficos em Kibana, não porque o tráfego para o serviço esteja caindo, mas porque o Elasticsearch não consegue acompanhar a indexação do grande volume de dados que está sendo jogado nele. Mesmo que o processamento de ingestão de log não seja um problema com o Elasticsearch, o mesmo não ocorre com a IU do Kibana.


Métricas

As métricas são uma representação numérica de dados medidos em intervalos de tempo. As métricas podem aproveitar o poder da modelagem matemática e da análise preditiva para derivar o conhecimento do comportamento de um sistema em intervalos de tempo no presente e no futuro.

Como os números são otimizados para armazenamento, processamento, compactação e recuperação, as métricas permitem uma retenção de dados mais longa, bem como consultas mais fáceis. Isso torna as métricas perfeitamente adequadas para a construção de painéis que refletem tendências históricas. As métricas também permitem a redução gradual da resolução de dados. Após um determinado período de tempo, os dados podem ser agregados em frequência diária ou semanal.

A anatomia de uma métrica moderna


Uma das maiores desvantagens dos bancos de dados de séries temporais históricas tem sido a identificação de métricas que não se prestam muito bem à análise exploratória ou filtragem de dados.

O modelo métrico hierárquico e a falta de tags ou rótulos nas versões mais antigas do Graphite prejudicam especialmente este cenário. Sistemas de monitoramento modernos como o Prometheus e versões mais recentes do Graphite representam cada série temporal usando um nome de métrica, bem como pares de valores-chave adicionais chamados rótulos. Isso permite um alto grau de dimensionalidade no modelo de dados.

Uma métrica no Prometheus, conforme mostra a figura abaixo, é identificada usando o nome da métrica e os rótulos. Os dados reais armazenados na série temporal são chamados de amostra e consistem em dois componentes: um valor float64 e um carimbo de data/hora de precisão na ordem de  milissegundos.

Observabilidade
Exemplo de métrica no Prometheus. Fonte: oreilly.com

É importante ter em mente que as métricas no Prometheus são imutáveis. Alterar o nome da métrica ou adicionar ou remover um rótulo resultará em uma nova série temporal.

Vantagens das métricas em relação a logs de eventos


Em geral, a maior vantagem da observabilidade e do monitoramento baseado em métricas sobre logs é que, ao contrário da geração e do armazenamento de logs, a transferência e o armazenamento de métricas têm uma sobrecarga constante. Ao contrário dos logs, o custo das métricas não aumenta em sincronia com o tráfego do usuário ou qualquer outra atividade do sistema que possa resultar em um aumento acentuado nos dados.

Com as métricas, um aumento no tráfego de uma aplicação não acarretará em um aumento significativo na utilização do disco, complexidade de processamento, velocidade de visualização e custos operacionais como os logs. O armazenamento de métricas aumenta com mais permutações de valores de rótulo (por exemplo, quando mais hosts ou containers são ativados, ou quando novos serviços são adicionados ou ainda quando os serviços existentes são mais instrumentados), mas a agregação do lado do cliente pode garantir que o tráfego de métrica não aumente proporcionalmente ao tráfego do usuário.

As métricas, uma vez coletadas, são mais maleáveis para transformações matemáticas, probabilísticas e estatísticas, como amostragem, agregação, sumarização e correlação. Essas características tornam as métricas mais adequadas para reportar a integridade geral de um sistema.

As métricas também são mais adequadas para acionar alertas, uma vez que executar queries em um banco de dados de série temporal in-memory é muito mais eficiente, para não mencionar mais confiável, do que executar uma query em um sistema distribuído como Elasticsearch e, em seguida, agregar os resultados antes de decidir se um alerta precisa ser acionado. Obviamente, os sistemas que consultam estritamente apenas dados de eventos estruturados in-memory para gerar alertas podem ser um pouco mais baratos do que o Elasticsearch. A desvantagem aqui é que a sobrecarga operacional de executar um grande banco de dados in-memory em cluster, mesmo se fosse em código aberto, não vale o trabalho operacional para a maioria das organizações, especialmente quando há maneiras muito mais fáceis de derivar igualmente alertas acionáveis.
As métricas são mais adequadas para fornecer essas informações.

As desvantagens das métricas

A maior desvantagem com os logs e métricas do aplicativo é que eles têm o escopo do sistema, tornando difícil entender qualquer outra coisa além do que está acontecendo dentro de um sistema específico. Claro, as métricas também podem ter o escopo de requisiçao, mas isso acarreta um aumento concomitante no fan-out de rótulos, o que resulta em um aumento no armazenamento de métricas.

Com logs sem junções sofisticadas, uma única linha não fornece muitas informações sobre o que aconteceu com uma requisição em todos os componentes de um sistema. Embora seja possível construir um sistema que correlacione métricas e logs em todo o espaço de endereço ou fronteiras RPC, tais sistemas requerem uma métrica para transportar um UID como um rótulo.

Usar valores de alta cardinalidade como UIDs como rótulos de métricas pode sobrecarregar os bancos de dados de série temporal. Embora o novo mecanismo de armazenamento do Prometheus tenha sido otimizado para lidar com a rotatividade de séries temporais, as consultas em intervalos de tempo mais longos ainda serão lentas. (Prometheus foi apenas um exemplo. Todas as soluções populares de banco de dados de série temporal apresentam desempenho sob rotulagem de alta cardinalidade).

Quando usados de maneira ideal, logs e métricas fornecem onisciência completa em um silo, mas nada mais. Embora possam ser suficientes para compreender o desempenho e o comportamento de sistemas individuais, tanto com estado quanto sem estado, eles não são suficientes para entender o tempo de vida de uma requisição que atravessa vários sistemas.

O rastreamento distribuído é uma técnica que aborda o problema de trazer visibilidade ao tempo de vida de uma requisição em vários sistemas.

Rastreamento

Um rastreamento (trace ou tracing) é uma representação de uma série de eventos distribuídos, causalmente relacionados, que codificam o fluxo de requisição de ponta a ponta através de um sistema distribuído.

Os rastreios são uma representação de logs; a estrutura de dados dos rastreios se parece quase com a de um log de eventos. Um único rastreamento pode fornecer visibilidade tanto do caminho percorrido por uma requisição quanto da estrutura de uma requisição. O caminho percorrido por uma requisição permite que engenheiros de software e SREs entendam os diferentes serviços envolvidos nesse caminho, e a estrutura de uma requisição ajuda a entender as conjunturas e os efeitos da assincronia na execução dela.

Embora as discussões sobre rastreamento tendam a girar em torno de sua utilidade em um ambiente de microsserviços, é justo sugerir que qualquer aplicativo suficientemente complexo que interaja com – ou melhor, disputa por – recursos como rede, disco ou um mutex de uma maneira não trivial pode se beneficiar das vantagens que o rastreamento oferece.

A ideia básica por trás do rastreamento é direta – identificar pontos específicos (chamadas de função, fronteiras RPC ou segmentos de simultaneidade, como threads, continuações ou filas) em uma aplicação, proxy, framework, biblioteca, tempo de execução, middleware e qualquer outra coisa no caminho de uma requisição que representa o seguinte:

  • Forks no fluxo de execução (thread do sistema operacional ou thread verde)
  • Um hop ou um fan-out através dos limites da rede ou do processo

Os rastreamentos são usados para identificar a quantidade de trabalho realizado em cada camada, preservando a causalidade ao se valer da semântica do “acontece antes”. A figura abaixo mostra o fluxo de uma única solicitação por meio de um sistema distribuído. A representação de rastreamento desse fluxo de solicitação é mostrada logo abaixo. Um traço é um gráfico acíclico direcionado (DAG) de spans, onde as arestas entre os spans são chamadas de referências.

Observabilidade
Exemplo de solicitação de diagrama de fluxo. Fonte: oreilly.com

Quando uma solicitação começa, é atribuído um ID globalmente unico, que é então propagado por todo o caminho da requisição para que cada ponto de instrumentação seja capaz de inserir ou enriquecer metadados antes de passar o ID para o próximo hop no fluxo sinuoso de uma requisição. Cada hop ao longo do fluxo é representado como um span. Quando o fluxo de execução atinge o ponto instrumentado em um desses serviços, um registro é emitido junto com os metadados. Esses registros são geralmente logados de forma assíncrona no disco antes de serem enviados fora da banda a um coletor, que então pode reconstruir o fluxo de execução com base em diferentes registros emitidos por diferentes partes do sistema.

Observabilidade
Rastreamento representado como spans: O span A é o root, span B deriva do span A. Fonte: oreilly.com

Coletar essas informações e reconstruir o fluxo de execução enquanto se preserva a causalidade para análise retrospectiva e resolução de problemas permite compreender melhor o ciclo de vida de uma requisição.

E mais importante ainda, ter uma compreensão de todo o ciclo de vida da requisição torna possível fazer o debug de requisições que abrangem vários serviços para identificar a origem do aumento da latência ou da utilização de recursos. Por exemplo, a figura que representa o rastreamento por spans indica que a interação entre o serviço C e o serviço D foi o que demorou mais. Os rastreamentos, como tal, ajudam muito a entender o que e às vezes até o porquê (por exemplo, qual componente de um sistema é tocado durante o ciclo de vida de uma requisição e está retardando a resposta?).

Os casos de uso de rastreamento distribuído são inúmeros. Embora seja usado principalmente para análise de dependência entre serviços, criação de perfil distribuído e debug de problemas de estado estável, o rastreio também pode ajudar no chargeback e no planejamento de capacidade.

Zipkin e Jaeger são duas das mais populares soluções de rastreamento distribuído de código aberto compatível com o OpenTracing, uma especificação de fornecedor independente e bibliotecas de instrumentação para APIs de rastreamento distribuído.

Observabilidade e monitoramento: conclusão

Logs, métricas e rastreamentos atendem a seu propósito único e são complementares. Em uníssono, elas fornecem visibilidade máxima sobre o comportamento de sistemas distribuídos. Por exemplo, faz sentido ter o seguinte:

Um contador e um log em cada entrada principal e ponto de saída de uma requisição

Um log e rastreamento em cada ponto de decisão de uma requisição

Também faz sentido ter todos os três linkados semanticamente de forma que seja possível no momento do debug:

Reconstruir o codepath tomado pela leitura de um rastreio

Derivar a requisição ou razão de erro de qualquer ponto único no codepath

Fazer amostragem de exemplos de rastreios ou eventos e correlacioná-los a métricas desbloqueia a capacidade de clicar em uma métrica, ver exemplos de rastreios e inspecionar o fluxo de requisição através de vários sistemas. Essas percepções obtidas a partir de uma combinação de diferentes sinais de observabilidade tornam-se essenciais para realmente seja possível fazer o debug de sistemas distribuídos.

Você pode entender mais sobre Observabilidade e Monitoramento acompanhando nossos canais e ficando por dentro das novidades!

Podcast Observability Cast by ElvenWorks.
Disponível em todas as plataformas de streaming

Os 3 Pilares da Observabilidade em sistemas distribuídos

observabilidade e monitoramento

A editora e plataforma de ensino O’Reilly lançou uma publicação, em 2018, intitulada “Distributed Systems Observability”. Nessa obra, o capítulo 4 oferece uma visão ampla do que ficou conhecido como “Os 3 Pilares da Observabilidade”. Muito embora esses 3 pilares sejam descritos separadamente, inclusive neste post, necessitam ser analisados em conjunto, dentro de uma abordagem coesa, capaz de oferecer uma visão ampla do estado completo do sistema sob difentes aspectos. Assim, para que uma abordagem unificada faça sentido, é necessário tratar o todo, e não somente a mera soma de cada parte, individualmente, compondo o contexto geral do sistema.

Mas, para efeito de estudo, trataremos separadamente e de forma aprofundada cada um dos 3 pilares, quais sejam:

Logs
Métricas
Rastreamento de dados (tracing)


Embora ter acesso completo aos três não necessariamente torne o sistema mais “observável”, esses são elementos-chave que, se bem compreendidos, poderão levar a sistemas melhores e mais eficientes e em uma boa experiência do usuário.

Logs de eventos


Um log de evento é um registro imutável com carimbo de data/hora de eventos discretos que aconteceram ao longo do tempo. Os logs de eventos em geral vêm em 3 formas, mas são fundamentalmente os mesmos: um carimbo de data/hora e uma carga útil de algum contexto. As três 3 formas são:

Texto. Um registro de log pode em formato texto. Este também é o formato mais comum de log que existe.

Estruturado. Muito “evangelizado” e defendido nos últimos tempos. Normalmente, esses logs são emitidos no formato JSON.

Binário. Pense em logs no formato Protobuf, binlogs MySQL usados para replicação e point-in-time recovery, systemd journal logs, o formato pflog usado pelo firewall BSD pf que frequentemente serve como um frontend para a ferramenta tcpdump.

O debug de patologias raras ou infrequentes de sistemas geralmente envolve o debug em um nível muito fino de granularidade. Logs de eventos, em particular, são preciosos quando se trata de fornecer insights valiosos juntamente com amplo contexto sobre a cauda longa que médias e porcentagens não trazem à tona. Como tal, os logs de eventos são especialmente úteis para descobrir comportamentos emergentes e imprevisíveis exibidos por componentes de um sistema distribuído.

Falhas em sistemas distribuídos complexos raramente surgem devido à ocorrência de um evento específico em um componente específico do sistema. Frequentemente, vários gatilhos possíveis em um gráfico altamente interconectado de componentes estão envolvidos na causa raiz e no contexto do problema. Olhar, simplesmente, para eventos discretos que ocorreram em qualquer sistema em algum ponto no tempo, torna impossível determinar todos esses gatilhos. Para definir os diferentes gatilhos, é necessário ser capaz de fazer o seguinte:

  • Começar com um sintoma identificado por uma métrica de alto nível ou um log de evento em um sistema específico
  • Inferir o ciclo de vida da solicitação em diferentes componentes da arquitetura distribuída
  • Iterativamente, faça perguntas sobre as interações entre as várias partes do sistema

Além de inferir o destino de uma solicitação ao longo de seu ciclo de vida (que geralmente é de curta duração), também se torna necessário ser capaz de inferir o destino de um sistema como um todo (medido ao longo de uma duração que, por sua vez, é da ordem de magnitude mais longa do que o ciclo de vida de uma única solicitação).

Os rastreamentos (traces) e as métricas são uma abstração construída sob os logs que pré-processam e codificam as informações ao longo de dois eixos ortogonais, um sendo centrado na solicitação (rastreamento) e o outro no sistema (métrica).

Os prós e contras dos logs

Logs são, de longe, os mais fáceis de gerar. O fato de um log ser apenas uma string ou um blob de JSON ou ainda pares de valores-chave digitados facilita a representação de quaisquer dados na forma de uma linha de log. A maioria das linguagens, frameworks de aplicação e bibliotecas vem com suporte para log. Logs também são fáceis de instrumentar, já que adicionar uma linha de log é tão trivial quanto adicionar uma instrução de impressão. Os logs têm um desempenho muito bom em termos de revelar informações altamente granulares repletas de contexto local rico, desde que o espaço de pesquisa seja localizado para eventos que ocorreram em um único serviço.

A utilidade dos logs, contudo, termina aí. Embora a geração de log possa ser fácil, as idiossincrasias de desempenho de várias bibliotecas de log populares deixam muito a desejar. A maioria das bibliotecas de log de desempenho aloca muito pouco, se muito, e é extremamente rápida. No entanto, as bibliotecas de log padrão de muitas linguagens e estruturas também não são lá aquelas coisas, o que significa que a aplicação como um todo se torna suscetível a um desempenho abaixo do ideal devido à sobrecarga de log. Além disso, as mensagens de log também podem ser perdidas, a menos que se use um protocolo como RELP para garantir a entrega confiável de mensagens. Isso se torna especialmente importante quando os dados de log são usados para fins de cobrança ou pagamento.

Por último, a menos que a biblioteca de log possa amostrar logs dinamicamente, logs excessivos têm a capacidade de afetar adversamente o desempenho da aplicação como um todo. Isso é exacerbado quando o log não é assíncrono e o processamento da requisição é bloqueado ao gravar uma linha de log no disco ou na stdout.

No lado do processamento, os logs brutos são quase sempre normalizados, filtrados e processados ​​por uma ferramenta como Logstash, fluentd, Scribe ou Heka antes de serem persistidos em um armazenamento de dados como Elasticsearch ou BigQuery. Se um aplicativo gerar um grande volume de logs, os logs podem exigir armazenamento em buffer adicional em um broker como o Kafka antes de serem processados ​​pelo Logstash. Soluções hospedadas como o BigQuery têm cotas que não podem ser excedidas.

Do lado do armazenamento, embora o Elasticsearch possa ser um mecanismo de pesquisa fantástico, executá-lo acarreta um custo operacional real. Mesmo que uma organização tenha uma equipe de engenheiros de operações especialistas na operação do Elasticsearch, podem existir outras desvantagens. Caso em questão: não é incomum ver uma queda acentuada nos gráficos em Kibana, não porque o tráfego para o serviço esteja caindo, mas porque o Elasticsearch não consegue acompanhar a indexação do grande volume de dados que está sendo jogado nele. Mesmo que o processamento de ingestão de log não seja um problema com o Elasticsearch, o mesmo não ocorre com a IU do Kibana.


Métricas

As métricas são uma representação numérica de dados medidos em intervalos de tempo. As métricas podem aproveitar o poder da modelagem matemática e da análise preditiva para derivar o conhecimento do comportamento de um sistema em intervalos de tempo no presente e no futuro.

Como os números são otimizados para armazenamento, processamento, compactação e recuperação, as métricas permitem uma retenção de dados mais longa, bem como consultas mais fáceis. Isso torna as métricas perfeitamente adequadas para a construção de painéis que refletem tendências históricas. As métricas também permitem a redução gradual da resolução de dados. Após um determinado período de tempo, os dados podem ser agregados em frequência diária ou semanal.

A anatomia de uma métrica moderna


Uma das maiores desvantagens dos bancos de dados de séries temporais históricas tem sido a identificação de métricas que não se prestam muito bem à análise exploratória ou filtragem de dados.

O modelo métrico hierárquico e a falta de tags ou rótulos nas versões mais antigas do Graphite prejudicam especialmente este cenário. Sistemas de monitoramento modernos como o Prometheus e versões mais recentes do Graphite representam cada série temporal usando um nome de métrica, bem como pares de valores-chave adicionais chamados rótulos. Isso permite um alto grau de dimensionalidade no modelo de dados.

Uma métrica no Prometheus, conforme mostra a figura abaixo, é identificada usando o nome da métrica e os rótulos. Os dados reais armazenados na série temporal são chamados de amostra e consistem em dois componentes: um valor float64 e um carimbo de data/hora de precisão na ordem de  milissegundos.

Observabilidade
Exemplo de métrica no Prometheus. Fonte: oreilly.com

É importante ter em mente que as métricas no Prometheus são imutáveis. Alterar o nome da métrica ou adicionar ou remover um rótulo resultará em uma nova série temporal.

Vantagens das métricas em relação a logs de eventos


Em geral, a maior vantagem da observabilidade e do monitoramento baseado em métricas sobre logs é que, ao contrário da geração e do armazenamento de logs, a transferência e o armazenamento de métricas têm uma sobrecarga constante. Ao contrário dos logs, o custo das métricas não aumenta em sincronia com o tráfego do usuário ou qualquer outra atividade do sistema que possa resultar em um aumento acentuado nos dados.

Com as métricas, um aumento no tráfego de uma aplicação não acarretará em um aumento significativo na utilização do disco, complexidade de processamento, velocidade de visualização e custos operacionais como os logs. O armazenamento de métricas aumenta com mais permutações de valores de rótulo (por exemplo, quando mais hosts ou containers são ativados, ou quando novos serviços são adicionados ou ainda quando os serviços existentes são mais instrumentados), mas a agregação do lado do cliente pode garantir que o tráfego de métrica não aumente proporcionalmente ao tráfego do usuário.

As métricas, uma vez coletadas, são mais maleáveis para transformações matemáticas, probabilísticas e estatísticas, como amostragem, agregação, sumarização e correlação. Essas características tornam as métricas mais adequadas para reportar a integridade geral de um sistema.

As métricas também são mais adequadas para acionar alertas, uma vez que executar queries em um banco de dados de série temporal in-memory é muito mais eficiente, para não mencionar mais confiável, do que executar uma query em um sistema distribuído como Elasticsearch e, em seguida, agregar os resultados antes de decidir se um alerta precisa ser acionado. Obviamente, os sistemas que consultam estritamente apenas dados de eventos estruturados in-memory para gerar alertas podem ser um pouco mais baratos do que o Elasticsearch. A desvantagem aqui é que a sobrecarga operacional de executar um grande banco de dados in-memory em cluster, mesmo se fosse em código aberto, não vale o trabalho operacional para a maioria das organizações, especialmente quando há maneiras muito mais fáceis de derivar igualmente alertas acionáveis.
As métricas são mais adequadas para fornecer essas informações.

As desvantagens das métricas

A maior desvantagem com os logs e métricas do aplicativo é que eles têm o escopo do sistema, tornando difícil entender qualquer outra coisa além do que está acontecendo dentro de um sistema específico. Claro, as métricas também podem ter o escopo de requisiçao, mas isso acarreta um aumento concomitante no fan-out de rótulos, o que resulta em um aumento no armazenamento de métricas.

Com logs sem junções sofisticadas, uma única linha não fornece muitas informações sobre o que aconteceu com uma requisição em todos os componentes de um sistema. Embora seja possível construir um sistema que correlacione métricas e logs em todo o espaço de endereço ou fronteiras RPC, tais sistemas requerem uma métrica para transportar um UID como um rótulo.

Usar valores de alta cardinalidade como UIDs como rótulos de métricas pode sobrecarregar os bancos de dados de série temporal. Embora o novo mecanismo de armazenamento do Prometheus tenha sido otimizado para lidar com a rotatividade de séries temporais, as consultas em intervalos de tempo mais longos ainda serão lentas. (Prometheus foi apenas um exemplo. Todas as soluções populares de banco de dados de série temporal apresentam desempenho sob rotulagem de alta cardinalidade).

Quando usados de maneira ideal, logs e métricas fornecem onisciência completa em um silo, mas nada mais. Embora possam ser suficientes para compreender o desempenho e o comportamento de sistemas individuais, tanto com estado quanto sem estado, eles não são suficientes para entender o tempo de vida de uma requisição que atravessa vários sistemas.

O rastreamento distribuído é uma técnica que aborda o problema de trazer visibilidade ao tempo de vida de uma requisição em vários sistemas.

Rastreamento

Um rastreamento (trace ou tracing) é uma representação de uma série de eventos distribuídos, causalmente relacionados, que codificam o fluxo de requisição de ponta a ponta através de um sistema distribuído.

Os rastreios são uma representação de logs; a estrutura de dados dos rastreios se parece quase com a de um log de eventos. Um único rastreamento pode fornecer visibilidade tanto do caminho percorrido por uma requisição quanto da estrutura de uma requisição. O caminho percorrido por uma requisição permite que engenheiros de software e SREs entendam os diferentes serviços envolvidos nesse caminho, e a estrutura de uma requisição ajuda a entender as conjunturas e os efeitos da assincronia na execução dela.

Embora as discussões sobre rastreamento tendam a girar em torno de sua utilidade em um ambiente de microsserviços, é justo sugerir que qualquer aplicativo suficientemente complexo que interaja com – ou melhor, disputa por – recursos como rede, disco ou um mutex de uma maneira não trivial pode se beneficiar das vantagens que o rastreamento oferece.

A ideia básica por trás do rastreamento é direta – identificar pontos específicos (chamadas de função, fronteiras RPC ou segmentos de simultaneidade, como threads, continuações ou filas) em uma aplicação, proxy, framework, biblioteca, tempo de execução, middleware e qualquer outra coisa no caminho de uma requisição que representa o seguinte:

  • Forks no fluxo de execução (thread do sistema operacional ou thread verde)
  • Um hop ou um fan-out através dos limites da rede ou do processo

Os rastreamentos são usados para identificar a quantidade de trabalho realizado em cada camada, preservando a causalidade ao se valer da semântica do “acontece antes”. A figura abaixo mostra o fluxo de uma única solicitação por meio de um sistema distribuído. A representação de rastreamento desse fluxo de solicitação é mostrada logo abaixo. Um traço é um gráfico acíclico direcionado (DAG) de spans, onde as arestas entre os spans são chamadas de referências.

Observabilidade
Exemplo de solicitação de diagrama de fluxo. Fonte: oreilly.com

Quando uma solicitação começa, é atribuído um ID globalmente unico, que é então propagado por todo o caminho da requisição para que cada ponto de instrumentação seja capaz de inserir ou enriquecer metadados antes de passar o ID para o próximo hop no fluxo sinuoso de uma requisição. Cada hop ao longo do fluxo é representado como um span. Quando o fluxo de execução atinge o ponto instrumentado em um desses serviços, um registro é emitido junto com os metadados. Esses registros são geralmente logados de forma assíncrona no disco antes de serem enviados fora da banda a um coletor, que então pode reconstruir o fluxo de execução com base em diferentes registros emitidos por diferentes partes do sistema.

Observabilidade
Rastreamento representado como spans: O span A é o root, span B deriva do span A. Fonte: oreilly.com

Coletar essas informações e reconstruir o fluxo de execução enquanto se preserva a causalidade para análise retrospectiva e resolução de problemas permite compreender melhor o ciclo de vida de uma requisição.

E mais importante ainda, ter uma compreensão de todo o ciclo de vida da requisição torna possível fazer o debug de requisições que abrangem vários serviços para identificar a origem do aumento da latência ou da utilização de recursos. Por exemplo, a figura que representa o rastreamento por spans indica que a interação entre o serviço C e o serviço D foi o que demorou mais. Os rastreamentos, como tal, ajudam muito a entender o que e às vezes até o porquê (por exemplo, qual componente de um sistema é tocado durante o ciclo de vida de uma requisição e está retardando a resposta?).

Os casos de uso de rastreamento distribuído são inúmeros. Embora seja usado principalmente para análise de dependência entre serviços, criação de perfil distribuído e debug de problemas de estado estável, o rastreio também pode ajudar no chargeback e no planejamento de capacidade.

Zipkin e Jaeger são duas das mais populares soluções de rastreamento distribuído de código aberto compatível com o OpenTracing, uma especificação de fornecedor independente e bibliotecas de instrumentação para APIs de rastreamento distribuído.

Observabilidade e monitoramento: conclusão

Logs, métricas e rastreamentos atendem a seu propósito único e são complementares. Em uníssono, elas fornecem visibilidade máxima sobre o comportamento de sistemas distribuídos. Por exemplo, faz sentido ter o seguinte:

Um contador e um log em cada entrada principal e ponto de saída de uma requisição

Um log e rastreamento em cada ponto de decisão de uma requisição

Também faz sentido ter todos os três linkados semanticamente de forma que seja possível no momento do debug:

Reconstruir o codepath tomado pela leitura de um rastreio

Derivar a requisição ou razão de erro de qualquer ponto único no codepath

Fazer amostragem de exemplos de rastreios ou eventos e correlacioná-los a métricas desbloqueia a capacidade de clicar em uma métrica, ver exemplos de rastreios e inspecionar o fluxo de requisição através de vários sistemas. Essas percepções obtidas a partir de uma combinação de diferentes sinais de observabilidade tornam-se essenciais para realmente seja possível fazer o debug de sistemas distribuídos.

Você pode entender mais sobre Observabilidade e Monitoramento acompanhando nossos canais e ficando por dentro das novidades!

Podcast Observability Cast by ElvenWorks.
Disponível em todas as plataformas de streaming

Share:

44 comentários em “Os 3 Pilares da Observabilidade em sistemas distribuídos”

  1. Hello,

    I’m Abi, an English SEO copywriter and content writer. I excel in crafting blogs, articles, e-commerce product descriptions, SEO content, website content, business service descriptions, newsletter content, brochures, proofreading, social media captions, LinkedIn content, and SOPs.

    My rate is USD 20 for every 1000 words of content. If you don’t have time to plan out your content, we can help you with that.

    Feel free to email me at Contentwriting011994@outlook.com with any current requirements.

    Thanks,

    Abi

  2. Who is 4U2 Inc.? Visit our website at 4u2inc.com . Suppliers: (Manufacturers, Wholesalers, Re Sellers, etc.) Increase your Gross Sales BIG TIME!! Purchasers/Buyers: Save Time & Money Account Executive/Sales People (Full/Part Time): Recruit Suppliers, Purchasers/Buyers, other Account Executives/ Sales people, Potential Team Leaders and work from home. Earn up to $60,000 +/- USD . Questions? Visit our website at 4u2inc.com or contact us via email (4u2inc123@gmail.com).

  3. Hey, I noticed your website isn’t using AI yet, can I send over something that I think would help?

  4. Now you can post your ad to millions of contact forms just like the ad you’re reading now!. It’s way more affordable than conventional advertising. Contact me at my email or skype below for details.

    Phil Stewart
    Skype: live:.cid.e169e59bb6e6d159
    Email: ps95362@gomail2.xyz

  5. Hi, I noticed a few problems affecting your website on Google, is this a good place to send them?

  6. Brigitte MacDonnell

    START YOUR DAY is a daily newsletter that shows you easy ways to make money, gives you ideas to easily learn new skills, as well as giving you helpful ways to lose weight and just about anything else you can think of – DAILY!

    LEARN MORE: https://StartYourDayIdeas.com

  7. START YOUR DAY is a daily newsletter that shows you easy ways to make money, gives you ideas to easily learn new skills, as well as giving you helpful ways to lose weight and just about anything else you can think of – DAILY!

    LEARN MORE: https://StartYourDayIdeas.com

  8. Penelope Sherwin

    Now you can post your ad to millions of contact forms just like the ad you’re reading now!. It’s not as expensive as you think. Get in touch with me by email or skype below for details.

    P. Stewart
    Skype: live:.cid.e169e59bb6e6d159
    Email: ps10027@gomail2.xyz

  9. Hi there,

    We run an Instagram growth service, which increases your number of followers both safely and practically.

    – Guaranteed: We guarantee to gain you 300-1000+ followers per month.
    – Real, human followers: People follow you because they are interested in your business or niche.
    – Safe: All actions are made manually. We do not use any bots.

    The price is just $60 (USD) per month, and we can start immediately.

    If you are interested, and would like to see some of our previous work, let me know and we can discuss further.

    Kind Regards,
    Megan

  10. Aujourd’hui, la première impression de votre entreprise se fait souvent en ligne. Pour assurer le succès continu de votre activité, il est essentiel de disposer d’un site internet professionnel et efficace. C’est pourquoi nous vous proposons nos services de création de site web sur mesure, spécialement adaptés aux besoins de votre entreprise de plomberie.

    – Visibilité accrue : Être facilement trouvé par de nouveaux clients grâce à un site web optimisé pour les moteurs de recherche.

    – Professionnalisme : Impressionnez vos clients potentiels avec un site internet moderne, esthétique et reflétant la qualité de vos services de plomberie.

    – Facilité de contact : Offrez à vos clients une manière simple de vous contacter, que ce soit pour des demandes de devis, des questions ou la prise de rendez-vous.

    Investir dans un site internet professionnel est un pas essentiel pour assurer la croissance de votre entreprise de plomberie. Nous sommes là pour vous guider à chaque étape du processus et vous fournir une solution qui répond parfaitement à vos besoins spécifiques.

    N’hésitez pas à nous contacter pour discuter de la création de votre site web sur mesure. Ensemble, faisons de votre présence en ligne un atout majeur pour votre entreprise.

    Cliquez ici :
    http://tinyurl.com/creation-site-plombier

  11. Curious about blending fitness with the art of lightsabers? Experience it firsthand with a complimentary session of our Lightsaber Movement Therapy.

    Just reply ‘Yes’ to unlock this unique experience.

    Mike

  12. START YOUR DAY is a daily newsletter that shows you easy ways to make money, gives you ideas to easily learn new skills, as well as giving you helpful ways to lose weight and just about anything else you can think of – DAILY!

    LEARN MORE: https://StartYourDayIdeas.com

  13. Georgiana Sharman

    If you want to earn 5.1% on your cash Public has a fee-free treasury account.
    Fund an account with $25 and you’ll be entered to win $50!

    Click here to sign up: shorturl.at/ktR25
    One lucky winner will be selected this month. Terms and conditions apply.

  14. Hi there,

    We run a Youtube growth service, where we can increase your subscriber count safely and practically.

    – Guaranteed: We guarantee to gain you 700-1500 new subscribers each month.
    – Real, human subscribers who subscribe because they are interested in your channel/videos.
    – Safe: All actions are done, without using any automated tasks / bots.

    Our price is just $60 (USD) per month and we can start immediately.

    If you are interested then we can discuss further.

    Kind Regards,
    Amelia

  15. You saw this message and I can help your ad message get to millions of sites just like this. It’s a low-cost and effective way to advertise your offer.If you are interested, you can reach me via email or skype below.

    P. Stewart
    Email: 32j07c@gomail2.xyz
    Skype: live:.cid.37ffc6c14225a4a8

  16. The Traffic Syndicate is a new high-ticket traffic generation mastermind and weekly traffic coaching program. Affiliate commission is 40% per $5K sale ($2K) & your share of a $25K Prize Pool. Find out how to can access to your promo tools, and more, here:

    https://bit.ly/BeASyndicateAffililate

  17. This message came to you and I can make your ad message go to millions of websites the same way. It’s a great deal compared to normal advertising.Contact me by email or skype below if you want to know more.

    P. Stewart
    Email: 72hqxa@gomail2.xyz
    Skype: live:.cid.2bc4ed65aa40fb3b

  18. Hey,

    Are you tired of missing out on potential profits in the volatile world of
    cryptocurrency trading? Look no further! I’ve got something special for you.

    Introducing the “GOD Trading Strategies” e-book, your ultimate guide to
    mastering successful crypto trading.

    For a limited time, you can get this comprehensive guide for just $19.95
    instead of the regular $49. That’s a whopping 60% discount!

    Here’s what you get with “GOD Trading Strategies”:

    In-depth insights into successful trading strategies.
    Tips on risk management to safeguard your investments.
    Real-world examples and case studies for practical application.

    Don’t miss out on this incredible opportunity to elevate your trading
    game. If you are interested, write to me or click here to grab your copy now!

    http://hornoselectricos.online/CryptoGOD/

    Happy Trading!

  19. This message reached you and I can send your ad message to millions of websites in the same fashion. It’s a cheap and efficient way to promote your business.For more information, please email me or skype me below.

    P. Stewart
    Email: tm1yds@gomail2.xyz
    Skype: live:.cid.2bc4ed65aa40fb3b

  20. Hey it’s Sage! Here is the free AI tool that AUTOMATICALLY writes copy to drive TRAFFIC and CALLS. Just use this proven SEO fill-in-the-blanks templates and the AI will do the rest:

    1. “best [YOUR SERVICE] in [YOUR CITY]”
    2. “[YOUR SERVICE] [YOUR CITY] pricing”
    3. “[YOUR SERVICE] near me” –

    Actually the AI can write ANYT*HING you want.
    Get the FREE TRIAL while it lasts!

    Go to:
    http://www.aiquickcopy.com

  21. Are the rising hosting costs and diminishing support affecting your ability to operate business systems at peak performance?

    At a time when every penny counts, it is alarming to witness the surge in hosting expenses without a proportional increase in support quality.
    This which leaves businesses like yours dedicating time to support and maintain their servers, instead of driving the business forward.

    At Codero, we believe in a different approach – a solution that not only simplifies your hosting costs but also guarantees unwavering support.
    We understand that your time is precious, and dealing with complicated pricing models and subpar support is the last thing you need on your plate.

    That’s why we’re excited to introduce our hosting services, designed with your peace of mind at the core.
    Our commitment is to provide you with a straightforward, predictable pricing structure that aligns with your budget, eliminating the unwelcome surprises that often accompany hosting invoices.

    Codero is a managed service provider with over 20 years of experience hosting that includes Linux servers and Windows servers.
    Codero If you’d like to learn more, click here to learn more: https://shorturl.at/ksGZ1
    Reply UNSUBSCRIBE if you wish to be unsubscribed from my list.

  22. GAMIFY your videos and get viewers to happily give you their email and phone number. There is no other tech like this..it’s the next big thing. As seen on CBS, NBC, FOX, and ABC.
    See if you qualify for a free GAMIFICATION of your video.

    Contact me via my email or skype below for more details

    Robert
    email: gamifyvideo@gmail.com
    skype: live:.cid.d347be37995c0a8d

  23. Hi there,

    We run a YouTube growth service, which increases your number of subscribers both safely and practically.

    – We guarantee to gain you 700+ subscribers per month.
    – People subscribe because they are interested in your channel/videos, increasing likes, comments and interaction.
    – All actions are made manually by our team. We do not use any ‘bots’.

    The price is just $60 (USD) per month, and we can start immediately.

    If you have any questions, let me know, and we can discuss further.

    Kind Regards,
    Amelia

  24. Innovative AI Cloner X App Builds Your Affiliate Sites in Seconds and Drives Free Traffic Instantly

    To Learn More: youtube.com/watch?v=_1Tt78oKxHo

  25. Find the Top 0.01% of E‑commerce Products to Sell to Launch Your Business…

    Even if You’ve Never Sold Online Before!

    Plus, get access to advanced tools to spy on your competitors, uncover the most profitable keywords, and track exact profits!

    There are $353M products you could possibly sell online.

    But 99.99% of them will be a waste of your time, money, and energy.

    That’s because only 0.01% of products are even worth pursuing.

    Luckily, finding that 0.01% isn’t too hard.

    Which is why I believe anybody with a good head on their shoulders can do it.

    Test our cutting‑edge software that helps you start and scale an e‑commerce business all in one place.

    https://bit.ly/BestAmazonResearchTool

  26. For a limited time we would like to offer you a NO-COST Reputation Video that you can put on your Website, LinkedIn, Facebook, Instagram etc.

    We simply turn your static 5 Star Reviews into SEO content and will be seen on the Front Page of Google when prospects are looking up your Online Reputation.

    What’s the Catch – excellent question – if you like the video we produce for you, all we need from you is 3 referrals.

    When you introduce them to us, they will get a 50% Discount from our retail pricing.

    GET YOUR NO-CHARGE VIDEO HERE:
    https://YourFreeReputationVideo.com

    Thank You,
    Media Relations

  27. Greetings,

    That Means You Don’t Have To Create A Product, Fulfil Any Services, Run Ads,
    or Do Any Customer Service – And Best of All — You Get To
    Partner With Me On Your New 7-Figure Business


    Learn More: https://www.youtube.com/watch?v=qUZDw3_AaTQ

    Regards,
    Nicholas Madison

    5575 Torp Squares,
    Haverhill, Minnesota


    Unsubscribe Form: hornoselectricos.online/unsubscribe/

  28. Dear ladies and gentlemen,
    Football is perhaps the most interesting sport on our planet, and predicting the final outcome of football matches is a complex and complex task.
    When you make soccer predictions, whether it’s for fun or to make a profit from betting on the games of fortune, you’ll find that there are many soccer analysts on the planet, as well as tools in the form of computer programs that can help you. in this venture.
    Today I would like to introduce you to our successful analytical approach to football predictions: we use a program that gives full information about future matches based on the ELO rating system, which also provides information on the performance of the ELO rating, and also allows to perform Asian handicap tests, as well as computer simulation of the future match to see the change in the ability to perform the ELO ratings, as well as in the ELO ratings themselves and more and more valuable indicative of the outcome of the match objective parameters.
    As you can see, we are talking about professional soccer predictions that take into account various factors that could be predicted in advance.
    We offer you a training course using the above mentioned program, the end result of which will be a great development of your analytical abilities regarding football matches. For more information and to see evidence of the success of our analytical football approach please visit:
    sport.toxylact.com
    We claim that our analytical approach is currently leading in the world of football predictions and because it allows to successfully analyze not only football matches, but basketball matches, hockey matches and more sports!
    With respect
    Dimitar Kehaiov MD
    Bourgas
    Bulgaria

  29. Are you okay running your business without much funds? This could slow down growth and delay returns on your business.

    Now you have the Opportunity to Fund your Busineses and Projects without stress and without the burden of repayment as our interest in first for the growth of your business and projects, and for your to arrive at your desired business goals and dreams.

    Take advantage of our Funding opportunity and get funded on your business and Projects within days and have an ample number of years/Loan Term Period which gives you time to grow and achieve your business goals.

    Give us a call on:
    +852 3008 8373,
    or write us at:
    info@capitalfund-hk.com

  30. Alethea Costello

    Thought ChatGPT Was Smart? Then This Will Blow Your Socks Off…

    World’s First AI Chatbot Is 16X SMARTER Than ChatGPT, By Combining Google & Microsoft’s AI
    And 6X Faster At: Crafting Sal And Much More!

    Ask Anything, And Get Stunning, Real-Time Answers In 5-10 Seconds!

    RoboChat Is The ONLY App That Fuses Together Google & Microsoft’s AI, Into An Even More Powerful Beast Than ChatGPT


    Learn More: https://www.youtube.com/watch?v=okdY7XZDci4

    Regards,
    Joe Nicolson

    Apt. 308 819 Violette Greens,
    Port Dessieside, KY 96468-1819


    Unsub scribe Form: hornoselectricos.online/unsubscribe/

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Quanto dói perder talentos em tecnologia?
Programa de Formação em Engenharia de Confiabilidade (SRE)

Experimente agora, grátis!