theme | highlighter | author | title | mdc | transition | hideInToc |
---|---|---|---|---|---|---|
dracula |
shiki |
edsoncelio |
Observabilidade 101 |
true |
slide-left |
true |
Tudo (ou quase tudo) que você precisa saber sobre o assunto :)
<style> img { float: right; width: 40%; } </style>
SRE, Mantenedor da documentação do Kubernetes e do Glossário da CNCF em Português e nas horas vagas escreve uns códigos na linguagem da Marmota (Golang ❤️)
twitter.com/@tuxpilgrim github.com/edsoncelio edsoncelio.dev
<style> img { display: block; float: right; } </style>
- Muitos serviços se comunicando em diferentes linguagens com diferentes arquiteturas
- Falta de visibilidade do que está acontecendo
- Trabalho de detetive para identificar problemas
- Ações reativas mais que proativas
Observabilidade é a capacidade de medir os estados internos de um sistema examinando suas saídas.
A observabilidade nos permite compreender um sistema a partir do exterior, permitindo fazer perguntas sobre esse sistema sem conhecer o seu funcionamento interno. Além disso, permite solucionar facilmente e lidar com novos problemas e ajuda a responder à pergunta: “Por que isso está acontecendo?
Um log é um registro de texto com marcação de data/hora, estruturado (recomendado) ou não estruturado, com metadados. De todos os sinais de telemetria, os logs são os que têm o maior legado. A maioria das linguagens de programação possui bibliotecas de logging de forma nativa.
I, [2021-02-23T13:26:23.505892 #22473] INFO -- : [6459ffe1-ea53-4044-aaa3-bf902868f730] Started GET "/" for ::1 at 2021-02-23 13:26:23 -0800
Métricas são uma representação numérica de dados medidos em intervalos de tempo.
As métricas economizam tempo porque podem ser facilmente correlacionadas entre os componentes da aplicação/infraestrutura para fornecer uma visão abrangente da integridade e do desempenho do sistema. Também permitem uma pesquisa mais fácil e uma retenção estendida de dados.
avg(rate(node_cpu{job="default/node-exporter",mode="idle"}[1m]))
Outros exemplos:
- Taxa de erros
- Uso de CPU
Os rastros nos dão uma visão geral do que acontece quando é feita uma requisição em uma aplicação. Independente da arquitetura da sua aplicação, os rastros são essenciais para entender o caminho completo das requisições na aplicação.
Um Span representa uma unidade de trabalho (ou operação).
Spans são os blocos que compõem os rastros.
Existem outros dados de telemetria importantes que valem a pena serem citados:
- Eventos
- Perfils (profilling)
- Erros
<style> img { display: block; margin: auto; } </style>
O OpenTelemetry, também conhecido como Otel é um framework de Observabilidade projetado para criar e gerenciar dados de telemetria, como rastros, métricas e logs. Por design, o OpenTelemetry é agnóstico a fornecedor e ferramenta, o que significa que pode ser usado com grande variedade de backends de Observabilidade.
O OpenTelemetry atende a necessidade de observabilidade ao mesmo tempo que segue dois princípios fundamentais:
- Os dados que você gera são seus. Não há dependência de fornecedor (o famoso vendor lock-in).
- Você só precisa aprender um único conjunto de APIs e convenções.
Atualmente, o Otel tem compatibilidade com mais de 40 fornecedores de plataformas de Observabilidade integrado com muitas bibliotecas e serviços e com um grande número de usuários.
- Especificação para todos os componentes (API, SDK e Dados)
- Collector (receber, processar e exportar dados de telemetria)
- Implementações de API e SDK específicas para cada linguagem (.NET, Java, Javascript, PHP, Python...)
<style> img { display: block; margin: auto; } </style>
<style> img { display: block; margin: auto; } </style>
O Loki é um agregador de logs com alta disponibilidade, multi-tenant e escalável inspirado no Prometheus. Foi projetado para ser econômico e fácil de manter.
Diferente de outras ferramentas, o Loki indexa apenas os metadados dos logs (labels).
<style> img { display: block; margin: auto; } </style>https://grafana.com/docs/loki/
Grafana é uma ferramenta de visualização que permite que você faça consultas, visualize, crie alertas e explore suas métricas, rastros e logs onde quer que estejam armazenados.
<style> img { display: block; margin: auto; } </style>https://grafana.com/docs/grafana/
Backend para rastreamento distribuído, otimizado para custos e tem como pre-requisito apenas um armazenamento de objetos para funcionar.
<style> img { display: block; margin: auto; } </style>https://grafana.com/docs/tempo/
Solução para armazenamento escalável e de longo prazo para métricas.
<style> img { display: block; margin: auto; } </style>https://grafana.com/docs/mimir/
Ferramenta para auto instrumentação baseada em eBPF, com suporte para muitas linguagens, como Go, C/C++, Rust, Python, Ruby, Java. Todos os dados capturados são feitos sem nenhuma alteração no código da aplicação ou outra configuração.
<style> img { display: block; margin: auto; } </style>https://grafana.com/docs/beyla/
<style> img { display: block; margin: auto; } </style>
O Prometheus é um conjunto de ferramentas de monitoramento e alerta de código aberto que cresceu em popularidade junto com o crescimento do Kubernetes.
Funcionalidades:
- Modelo de dados multi dimensional com dados de série temporal (time serie) identificados pelo nome da métrica e pares de chave/valor
- Uma linguagem para consulta das métricas: PromQL
- A coleta dos dados acontece por meio de um modelo pull via HTTP (para coleta via push é feito via um Gateway intermediário)
https://prometheus.io/docs/introduction/overview/
Componentes (sendo que alguns são opcionais):
- Servidor Principal, responsável por fazer scrape e armazenar os dados time series
- Bibliotecas clientes, para instrumentar as aplicações
- Push Gateway, para jobs efêmeros (e batchs) expor métricas
- Exporters, para ajudar a exportar métricas de serviços terceiros para o Prometheus
- Alert Manager, para gerenciamento de alertas a partir do Prometheus
https://prometheus.io/docs/introduction/overview/
Para mais ferramentas, recomendo dar uma olhada no landscape da CNCF aqui!
- Observabilidade é diferente de monitoramento
- Além das ferramentas mencionadas existem muitas outras (muitas não sendo opensources)
- Entenda bem suas aplicações e o que precisa de telemetria antes de implementar uma ferramenta (ou stack de ferramenta)
- Observabilidade pode ser cara/custosa
- Observabilidade é uma jornada, vai muito além de logs, rastros e métricas
- Projeto Dose de Telemetria: https://dosedetelemetria.com/
- Documentações do OpenTelemetry: https://opentelemetry.io/docs/what-is-opentelemetry/
- Livro "Observability Engineering": https://www.oreilly.com/library/view/observability-engineering/9781492076438/
- Livro "Distributed Systems Observability": https://www.oreilly.com/library/view/distributed-systems-observability/9781492033431/