Escolar Documentos
Profissional Documentos
Cultura Documentos
2022
Observabilidade na Prática
Bootcamp: Engenheiro de Confiabilidade SRE
Igor Osch Simões
© Copyright do Instituto de Gestão e Tecnologia da Informação.
Todos os direitos reservados.
2
Sumário
Introdução..................................................................................................................... 5
3
Coleta de dados, desafios e estratégias ..................................................................... 45
Referências……… ..............................................................................................................60
4
Capítulo 1. Fundamentos da observabilidade
Introdução
Há combustível suficiente?
Sinais de aquecimento ou a temperatura, estão dentro da normalidade?
Existem aviso de componentes falhando?
5
Etc.
Em carros antigos nosso mecânico teria que abrir o motor ou outras partes para
diagnosticar o que está falhando; em veículos modernos, uma interface computacional
emite sinais sobre a saúde dos componentes, permitindo assim que se entenda qual foi
a falha:
Com isso podemos dizer que veículos modernos são observáveis, enquanto
para veículos mais antigos podem ser considerados não observáveis ou parcialmente
observáveis.
O ponto mais importante sobre sistemas observáveis é que eles devem ser
construídos para isso. Sendo assim, deixo abaixo a definição de sistema observável de
Sridharan C., no livro Distributed Systems Observability.
6
Observabilidade significa um sistema construído, testado e mantido
levando em conta que:
o Nenhum sistema complexo está sempre 100% saudável.
o Sistemas distribuídos são fundamentalmente imprevisíveis.
o É impossível prever a variedade de estados que um sistema
pode atingir em caso de falhas.
o Falha deve ser contemplada em todas as fases do design até a
operação.
o Debug simples é a base para a manutenção e evolução de
sistemas robustos.
7
volume de tráfego e as dependências de uma aplicação eram, portanto, muito mais
simples.
Avançamos para 2022 e temos uma explosão de acessos mobiles, seja por
navegadores móveis ou aplicativos dedicados, uma grande variedade de produtos, de
regras de negócio e condições de acesso às nossas aplicações. Clientes podem acessar
através de diversos canais e parceiros distintos. Garantir uma transação segura e
consistente se torna mais desafiador: nossa aplicação agora tem inúmeros componentes
menores, interconectados entre si de diversas formas diferentes e espalhados por
inúmeras localidades. Deploys são extremamente frequentes, podendo acontecer
diversas vezes num mesmo dia. Garantir estabilidade e desempenho nessas condições
se torna um desafio sem precedentes.
Arquiteturas legadas:
8
‒ Arquitetura aparentemente simples, por depender de menos
componentes, mas com regras e dependências bastante complexas.
Arquiteturas modernas:
9
o Quando um determinado serviço falha, é difícil prever o impacto
aos usuários.
Ferramenta
Monitoração
Plataforma de Observabilidade
10
observabilidade um desafio. Sendo assim, torna-se um desafio a coleta e o
armazenamento consistente das informações dos nossos elementos monitorados.
Métricas.
Logs.
Traces.
Serviços.
Requests.
Instância de um processo.
Etc.
Isso significa que a mesma métrica terá várias dimensões (ou labels) que
permitirão filtragem e melhor análise dos dados. Para isso as métricas precisarão evoluir
de simplesmente um trio composto por nome/valor/unidade, para uma anatomia mais
moderna. Abaixo detalhamento dessa anatomia com base no Prometheus:
11
Detalhes de uma métrica Prometheus:
Essa última característica é excelente permitindo que dados mais antigos sejam
resumidos estatisticamente para menor consumo de espaço: métricas recentes são
12
armazenadas minuto a minuto, métricas mais antigas têm resolução de 10 minutos
chegando até a resolução, em métricas mais antigas, de forma diária.
Entretanto, nem tudo são flores quando nos referimos à métricas. A maior
limitação e, portanto, uma desvantagem, é que as métricas têm escopo limitado. São
limitadas ao serviço monitorado, sendo assim se precisarmos de mais dimensões temos
dificuldades. Por ex.:
Aplicação não foi desenvolvida para prover as métricas com essas dimensões.
Nome: OrdemPagamento
Cada método nesse caso tem necessidades específicas para o negócio. Alguns
exemplos de requisições:
GET /enviar_ordem?id=123141432
GET /enviar_ordem?id=4232423423
GET /enviar_ordem?id=12asdaswer2
GET /enviar_ordem?id=123sdfsde22
POST /enviar_ordem
13
PUT /enviar_ordem
14
Os logs basicamente podem ser gerados em três formatos diferentes, sendo
que cada formato tem suas características específicas. Um log pode ser gerado em texto
puro, esse sendo o tipo mais comum dos logs, composto por um texto e uma data. Um
evento de log pode ter uma forma estruturada, que é um log em formato normalmente
JSON, tendo assim campos que permitem indexar esse evento. Sendo assim, um tipo de
log muito poderoso para indexar permitindo rápidas buscas e análises desses logs. Por
último temos os logs binários, que são logs de eventos gerados como os demais, mas o
seu formato dedica-se a situações específicas, por exemplo, sincronizar uma base de
dados e sua réplica. Logs em estado binário provavelmente não serão usados para uma
aplicação de observabilidade, portanto os logs em texto puro e em formato estruturado
são muito poderosos e garantem um controle e visibilidade no dia a dia para qualquer
sistema observável.
15
Outra vantagem é que dependendo da plataforma usada, os logs podem ser
uma fonte de métricas. Isso quer dizer que, além de coletar evidências, determinadas
características de um evento podem ter as ocorrências contadas. Assim esse valor se
torna uma métrica e, sendo assim, a ponte entre os dois pilares.
16
O excesso de logs pode gerar uma concorrência por I/O que pode impactar
aplicação.
17
espaço e volume de logs, armazenados e processados, mas degradando
a aplicação/ambiente observado.
o Graylog.
o Elastic.
o FluentD.
18
campos relevantes da entrada de log estão separados em campos específicos. Assim,
antes do envio dessa informação para um repositório central esses campos podem ser
facilmente separados para posterior indexação: normalizar os dados. Um exemplo de
ferramenta que faz isso é o FluentD, softwares desse tipo vão processar um evento de
log antes de enviar o repositório central para armazenamento. O armazenamento
desses logs comumente é feito em uma base de dados de eventos, como por exemplo
o Elasticsearch. Nesse tipo de base existem vários índices que permitem a rápida
consulta e análise dos dados, mas que em contrapartida vão requerer bastante espaço
e principalmente redundância, isto é, várias cópias da informação. Sendo assim o
volume de eventos coletados e armazenados impacta o sizing desse ambiente e o seu
custo final de setup e manutenção.
Traces são uma tecnologia, ou tipo de dado, que já estão presentes a bastante
tempo no mercado. Ferramentas de coleta e monitoração de aplicação por traces são
opções bastante consolidadas e permitem que seja analisado o desempenho em nível
de linha de código de uma aplicação em tempo real. Ferramentas desse tipo
historicamente são classificadas de ferramentas APM (Application Performance
Management), por terem foco específico e permitir a análise em tempo real dos “bits e
bites” de uma aplicação em tempo real.
19
‒ Visibilidade a cada etapa da execução.
Diante de tudo que foi exposto acima, temos duas opções básicas de geração
de traces:
Plataformas de mercado.
OpenTelemetry.
20
serviço que desempenha um papel específico para a conclusão de uma requisição é
coletado e analisado para cada transação. Como isso é possível? A figura abaixo
exemplifica essa situação:
21
Comunicação com outros serviços.
Para finalizar este capitulo uma breve discussão sobre a real necessidade de
traces. Este é um argumento que divide bastante os profissionais e ainda hoje existem
empresas que não tem nenhuma estratégia de tracing presente. Outras adotam tracing
limitados a serviços específicos, muito críticos, enquanto a grande maioria dos serviços
são monitorados apenas com logs e métricas. Contribuindo para essa discussão estão as
arquiteturas modernas de microsserviços que são aplicações muito simples e com lógica
bastante reduzida.
22
tipo de ambiente (microsserviços ou legado) e deve fazer parte de uma iniciativa
consistente de observabilidade.
Sendo assim sempre que se fala em traces é preciso achar o limite entre
visibilidade e overhead. Traces muito complexos e grandes podem ser custosos para a
geração e impactar negativamente a aplicação observada. Importante entender que em
alguns casos o tempo de execução pode ser infinitamente menor que o tempo para a
geração dos traces, nesses casos não deve ser feita instrumentação, sob o risco de
impactar negativamente o desempenho da própria aplicação. Finalmente os traces
precisam ser enviados a um repositório central, e dependendo da estratégia adotada,
tráfego de rede pode ser um problema.
A arquitetura de coleta de traces sempre será composta por uma lógica que
gera os traces e um ponto de coleta desses traces. Em todas as plataformas vão existir
softwares coletores dessa informação. Dependendo da opção escolhida, esses coletores
são obrigatórios ou não. O padrão OpenTelemetry define a figura do collector e este
deve estar o mais próximo possível das fontes de traces, ferramentas proprietárias
23
possuem estratégias diversas nesses casos, com muitas não possuindo coletores ou
estes sendo opcionais. Importante que um coletor além de garantir melhor desempenho
e estabilidade, possa facilitar a configuração de comunicação, evitando uma explosão
de regras de firewall para cada elemento monitorado.
Outro desafio que temos com traces, e que novamente, são bastante parecidos
com os desafios de logs, é que o volume de traces cresce de acordo com o volume de
execuções das aplicações monitoradas. Sendo assim a plataforma adotada para a
geração de traces deve ser inteligente o suficiente para lidar com altos volumes de
informação e o overhead gerado por esse volume. Em diversas situações o sampling será
necessário. Sampilng é a ação de descartar traces, para manter a estabilidade do
ambiente como um todo, tanto da aplicação observada como da plataforma de
observabilidade. O maior desafio aqui é manter um conjunto de traces relevante mesmo
com o descarte de parte da informação.
24
Outro fator igualmente importante a considerar é o tempo de existência de um
trace. Traces por sua natureza devem ser efêmeros, não que não haja a necessidade de
armazenamento de traces por longos períodos, mas que a finalidade de um trace é
análise rápida em momentos de crise. Sendo assim, uma estratégia de armazenamento
somente de traces recentes é bastante bem-vinda para economia de recursos, a maioria
das plataformas comerciais de traces armazenarão os traces por cerca de 10 dias, após
esse período esses traces são descartados e apenas as métricas relativas às execuções
são armazenadas, sendo então a base para análise histórica de comportamento e
tendências.
25
Capítulo 2. Arquitetura para observabilidade
26
própria, criada, mantida e desenvolvida por desenvolvedores próprios, trará desafios
impensáveis. É preciso entender que a expertise de qualquer empresa é o seu negócio,
sendo assim suas equipes devem estar focadas em manter o negócio e não em operar e
codificar uma plataforma de observabilidade. Esse é um fator que se não considerado
pode tornar o uso e adoção da observabilidade inviável.
Concentradores de tráfego:
O tráfego monitorado:
27
‒ Grandes volumes de traces sendo gerados, a adoção de uma plataforma
cujo tráfego não sai do seu datacenter (ou da sua cloud), o que pode ser
uma saída interessante para aliviar custos com rede.
Fica evidente que a decisão sobre custos deverá ser relativa ao custo geral em
lugar de simples custo de aquisição de uma plataforma. É importante entender que
plataformas open source podem ter um custo menor de aquisição, mas toda a
arquitetura e a sua manutenção é gerenciada pela própria equipe que está implantando
a observabilidade. Dessa forma os custos dessa gestão ao longo do tempo podem ser
proibitivos. É importante lembrar que a plataforma vai crescer com a adoção e com esse
crescimento o volume de dados armazenados nessa plataforma cresce e crescem as
necessidades de manutenção e de operação.
28
Outro fator a considerar é que é preciso trabalhar com integrações: conforme
a adoção da observabilidade aumenta nas empresas, novos processos são adicionados,
por exemplo, alertas que têm que ser enviados para sistemas de service desk, são
integrações com sistemas terceiros (CMDB, por ex.) entre outros. Nesse caso, open
source não significa que é facilmente integrável, significa que existem opções de código
aberto para que você desenvolva essa integração, portanto o custo desse
desenvolvimento deve ser considerado. Um ponto interessante é que a maioria dos
projetos open source hoje tem soluções Enterprise, dessa forma, se a norma de
determinada equipe é pelo uso de sistemas open source, pode-se optar por em lugar de
manter a uma plataforma própria, adotar uma solução Enterprise oferecida por um
desses provedores.
29
tenha essa plataforma sendo executada dentro da sua própria infraestrutura. A decisão
de se a plataforma vai ser SaaS ou vai ser própria (OnPremisses) não deve levar em
consideração os custos e sim as necessidades da empresa. Em mercados muito
regulados é mandatório que todos os dados de monitoração/observabilidade estejam
em datacenters próprios sobre a responsabilidade da própria empresa. Nesses casos é
mandatório o uso de uma opção OnPremisses. Contudo, com o amadurecimento das
ofertas SaaS e garantia de segurança dessas plataformas, muitas empresas estão sendo
flexíveis e permitindo a adoção de plataformas SaaS mesmo em mercados
extremamente regulados. Nesses casos a adoção em uma plataforma SaaS pode ter
custo semelhante à manutenção da plataforma OnPremisses, mas tira todo o overhead
das equipes que vão operar e manter a plataforma
Limitação de usuários.
Etc.
30
Padronização de coletas e como estender os dados coletados para casos específicos
31
integrar as minhas fontes de dados à minha plataforma de observabilidade sem
necessidade de desenvolvimento de código pelas minhas equipes. A monitoração,
coleta e armazenamento de dados parece ser uma tarefa simples, mas é preciso levar
em consideração a manutenção em longo prazo. Sempre que o sistema monitorado
muda, é necessário realizar uma atualização à integração para garantir que o sistema
continue sendo observável. Se estamos usando essas integrações de forma nativa no
próprio sistema observado, existe uma diminuição no overhead operacional, já que não
é necessário dispensar membros da operação para atualizar a monitoração. Vale
salientar que nem sempre as integrações nativas vão suprir as necessidades de
integração, portanto é importante a adoção de plataformas flexíveis e que exijam o
mínimo de código possível.
32
Capítulo 3. Codificando e testando
É importante deixar claro que o processo anterior não era por si só ineficiente,
mas muitas vezes não era usado de forma ótima, as aplicações eram desenvolvidas e
medidas durante o desenvolvimento por um conjunto de indicadores e eram expostas
cargas completamente diferentes quando chegavam à produção. É muito importante
que quando se esteja desenvolvendo uma aplicação, que essa aplicação seja medida em
todos os pontos do seu ciclo de vida pelos mesmos indicadores: não faz sentido analisar
uma aplicação em desenvolvimento simplesmente por tempo de resposta e, quando
essa aplicação está em produção, exigir desempenho frente a concorrência de usuários;
concorrência essa que nunca foi planejada ou medida, durante o seu ciclo de
desenvolvimento. Sendo assim, não há como garantir que essa concorrência será
atendida e principalmente não será possível garantir a estabilidade dessa aplicação
atendendo aos nossos clientes.
33
A moral da história é que o teste de programas pode ser usado de forma
muito eficaz para mostrar a presença de bugs, mas nunca para mostrar sua ausência.
E. W. Dijkstra
34
O ponto importante aqui é entender que as características das dependências
operacionais de uma aplicação podem variar muito de acordo com o seu ambiente. Pode
acontecer, por exemplo, de que na produção de um sistema de cache, tenha TTLs muito
diferentes dos mesmos sistemas de cache em produção, e podem existir também
configurações de concorrência com comportamento completamente diferente nos
ambientes produtivos. Essas mudanças nas dependências podem fazer o
comportamento da aplicação em ambiente de Quality Assurance muito difícil de refletir
o comportamento no ambiente produtivo.
Os pontos expostos acima não significam que uma aplicação moderna não deve
ser testada, sendo simplesmente acompanhada em produção. Significa exatamente o
contrário: uma aplicação deve ter um processo de desenvolvimento, controle de
qualidade e produção cuidadosamente desenhados. Aplicação precisa ser testada,
monitorada e acompanhada sob os mesmos indicadores em todo o ciclo devida da
aplicação, observabilidade em não produção irá garantir o acompanhamento
consistente desses indicadores.
Testes e observabilidade
Em alguns casos não existem dados suficientes para gerar uma carga efetiva.
35
Capacidade dos meus ambientes não produtivos estão muito distantes da
capacidade de produção.
36
A grande vantagem de uma estratégia de observabilidade que contemple não
somente a produção, mas também todos os pontos do ciclo de vida das aplicações, é
permitir um acompanhamento consistente da evolução dessas aplicações em todos os
ambientes: desenvolvimento, homologação e produção. Sabemos que esses ambientes
têm características muito diferentes, mas é possível acompanhar as diversas releases de
uma aplicação, tendo um histórico dos tempos de resposta e outros indicadores em cada
um desses ambientes. Torna-se possível, de forma consistente, acompanhar a evolução
de uma aplicação: não somente dos requisitos e exigências do negócio, mas também da
performance dessa aplicação. Sendo assim conseguimos garantir que determinada
aplicação é desenvolvida sempre com os mesmos objetivos da produção em mente.
37
Figura 8 – Automação da qualidade com observabilidade.
Testes em produção?
Dessa forma é sempre preciso usar um conjunto de SLOs, que vão ser a fonte
de decisão. Esses indicadores irão garantir se estamos com desempenho esperado ou
não das aplicações, garantindo o acompanhamento em ambiente não produtivo. Isso
garante a consistência em relação aos releases anteriores e quando a aplicação sobe
para a produção acompanhar esses SLOs no ambiente, tanto para a versão da aplicação
que já estava rodando e quanto para a nova versão dessas aplicações, que estão tendo
38
um desempenho consistente. A forma com a qual isso é feito varia, sendo possível a
adoção de estratégias cannary, blue green ou qualquer outra estratégia de rodar duas
versões em paralelo em ambiente produtivo. O processo aqui consiste em
gradativamente fazer com que a nova release receba tráfego e à medida que esse
tráfego aumenta, acompanhe os indicadores.
39
a esses indicadores. O SLO vai permitir entender o quão longe ou o quão violado está
esse indicador e inclusive eles serão a base para a tomada de decisão.
40
Capítulo 4. Laboratório Parte 1
Nessa etapa deve ser acompanhado o arquivo Readme.MD até o fim do passo:
2 – Setup do FluentBit.
41
Capítulo 5. Desafios da observabilidade
3. Etc.
42
equipes de negócio podiam acompanhar em tempo real esse tipo de condição. Essa
métrica foi de fundamental importância em durante uma change: uma mudança de
configuração fez com que todas as operações fossem negadas por falta de saldo.
Olhando apenas para os indicadores de saúde performance e rendimento da aplicação
não havia nenhum problema: a aplicação estava funcionando sem erros, com tempo de
resposta bastante satisfatório e se comunicando com todas as suas fontes de dados
corretamente. A configuração incorreta estava causando um comportamento anômalo.
A métrica de negócio permitiu medir o impacto ao negócio e entender que sim, havia
um problema apesar de os indicadores de saúde da aplicação indicarem o contrário.
Com expansão nesses casos de uso e nesses públicos que vão consumir a
observabilidade é preciso definir corretamente como os dados serão gerados. Dados de
43
infraestrutura e performance são geralmente mais simples e fáceis de serem coletados,
enquanto dados de negócio vão requerer entendimento do negócio e apoio das equipes
que estão buscando consumir essa informação. A principal preocupação com dados de
negócios para a observabilidade é ter em mente que esses dados podem ser complexos
e sensíveis. Dessa forma, o acesso a eles deve ser direcionado a um público restrito, sob
o risco de expor dados desnecessários ou coletar informação inconsistente.
Outro ponto importante sobre métricas e dados sensíveis é que muitas vezes
coletar métricas de negócio pode expor a saúde do negócio e, portanto, devem estar
restritas a grupos específicos. O acesso a esse tipo de informação, por exemplo, a saúde
de vendas de uma de uma empresa que tem ações negociadas na bolsa de valores,
quando mau utilizados pode ser destrutivo ao negócio. Nesses casos essas informações
de negócio devem estar bem restritas na plataforma, garantindo acesso a elas somente
pelo público que realmente vai tomar decisão com base nessas métricas. Dessa forma,
um controle de acesso bastante rigoroso e ao mesmo tempo flexível é importante no
momento da escolha de uma plataforma de observabilidade.
44
Quando abordamos a possibilidade de instrumentar métricas ou qualquer outra
informação de negócio temos que ter a preocupação de que elas podem impactar o
mercado (como acabamos de exemplificar parágrafo anterior), e que também podem
conter evidências de informação sensível. Um exemplo disso são logs: logs são muito
fáceis de serem gerados e, portanto, podemos ter aplicações logando exatamente tudo
o que se passa em arquivos que podem conter de tudo, desde senhas até valores de
transações dos usuários. Dessa forma, controlar o acesso a esse tipo de informação é
crucial para evitar vazamento de dados, fraudes e qualquer exposição dos nossos
clientes. Importante lembrar que se expandirmos o conceito de observabilidade para
monitorar os usuários, quer dizer, monitorar o que se passa nos seus browsers, devemos
estar atentos às regras de privacidade de dados como LGPD, GDPR, entre outras. Nesses
casos uma plataforma que atenda aos requisitos dessas leis é importantíssima para que
se possa ter uma estratégia de observabilidade 100% consistente.
Por último, para encerrar este subcapítulo, vamos abordar um caso de uso de
um banco nacional e a monitoração da sua aplicação PIX. Esse banco tinha uma
necessidade de acompanhar o volume financeiro de PIX sendo feito a partir de cada um
de seus canais. Essa informação financeira deveria ficar restrita apenas às equipes que
coordenam o PIX. Dessa forma, a plataforma que foi adotada permitia a segregação e a
criação de grupos com níveis de acesso diferentes, sendo assim, foi bastante simples a
criação de uma métrica e depois somente as pessoas que faziam parte desse grupo
poderiam acessar esse tipo de métrica. Foi garantido então que toda a monitoração de
performance e saúde da aplicação pudesse vista por todos, mas somente as métricas
relativas ao negócio estavam restritas a uma equipe de negócio.
45
conhecimento bastante profundo e específico da aplicação que está sendo analisada.
Para isso é imprescindível que seja adotada a participação das seguintes equipes:
Dev;
Arquiteto;
PO;
Etc.
Como exemplo desse desafio vamos abordar o caso de uso que discutimos no
subcapítulo anterior, o exemplo da recuperação de crédito. Nesse caso havia uma
inconsistência nos valores coletados. Quando foi feita a configuração inicial, foi discutido
com os desenvolvedores o ponto para a coleta da informação, entretanto, ao ser
apresentado os resultados da configuração, verificou-se uma taxa de recuperação diária
de R$ 10M em crédito, o que significava a recuperação de R$ 300M de crédito por mês.
Valores muito acima do esperado. Em uma nova rodada com os especialistas
envolvendo as equipes necessárias, identificamos que estávamos coletando a
informação em um momento onde os parceiros faziam simulações do crédito a ser
recuperado e, somente em uma etapa mais à frente, enviaram a opção efetivamente
contratada. Dessa forma, foi necessária uma reconfiguração instrumentando e
coletando as métricas do ponto correto para que o dado apresentado fosse consistente
com a realidade.
46
O segundo estudo de caso, sobre o banco e o processo de monitoração por PIX,
é importante, pois mostra que somente a instrumentação nem sempre é suficiente. Nele
foi feita uma coleta dos valores de PIX por canal, e esta configuração, aparentemente,
estava apresentando valores consistentes. Ao fazer uma análise de como a configuração
havia sido executada, o desenvolvedor informou que:
47
Devido à natureza diversa da observabilidade, é importante entender que
teremos diversos repositórios de dados diferentes, cada um com as suas necessidades
específicas, por exemplo:
Base SQL;
Base TimeSeries;
ElasticSearch;
Arquivos;
Etc.
Nesse caso, é bastante importante que essa preocupação sobre os acessos aos
dados seja levada em consideração, principalmente se estamos decidindo manter a
nossa própria plataforma em lugar de contratar um serviço para observabilidade. Muitas
vezes, a redução de custos de manter a plataforma pode esconder essa dificuldade de
proteção aos dados e controle de acesso.
48
não irá apresentar o CPF completo. Mas na base de dados o CPF pode estar armazenado
de forma completa. Em caso de violação de acessos, isto é, onde há acesso aos dados
diretamente na base, pode ocorrer o vazamento de informação ou uso dessa
informação de forma fraudulenta. Outro ponto importante é entender que o
comportamento que vemos na interface pode ser diferente do comportamento que
vemos em uma API de integração, por exemplo. É sempre importante planejar a coleta,
armazenamento e disponibilização de dados sensíveis. Como será a manipulação desses
dados e a disponibilização desses usuários?
49
ser um dado sensível, deve estar restrito a poucas pessoas. É o caso de um CPF ou um
número de uma conta corrente: consultando essas informações em um outro tipo de
sistema, garantimos que podemos ter informações mais relevantes sobre o que pode
ter impactado aquela transação particular, mas, por outro lado, podemos expor nossos
usuários. Dessa forma, o CPF completo só estaria acessível ao usuário sênior de uma
equipe de desenvolvimento ou operação.
Introdução a alertas
50
Ter níveis de criticidade distintos e públicos distintos.
Além disso, é preciso entender que identificar um desfio nem sempre é simples.
Um desvio pode ir desde uma métrica que simplesmente ultrapassou um determinado
valor, ou até uma composição de diversas métricas que, quando ultrapassarem valores,
vão configurar um desvio de comportamento. Dessa forma é importante que a
plataforma que está sendo escolhida seja flexível o suficiente para identificar desde
alertas simples (o desvio de apenas uma métrica) até alertas mais complexos, onde duas
ou três métricas podem ser consideradas para identificar um desvio.
Isso se deve por inúmeros fatores, desde aplicações que tem sazonalidade, por
exemplo, que são executadas em grande quantidade em determinados momentos do
dia e depois tem uma queda. Enquanto aplicação sofre carga muito excessiva, é normal
que seus tempos de resposta e outros indicadores de saúde fiquem degradados, não
necessariamente configurando um problema. Outro problema importante é que, em
momentos de crise, podemos ter uma chuva de alertas e isso desvia a atenção, além de
ser pouco relevante para o entendimento do que está acontecendo. É importante que
a plataforma escolhida consiga correlacionar vários eventos e emitir somente uma
notificação, garantindo assim maior consistência na análise do desvio.
51
uma regra única que vai funcionar em todas as situações, mas é importante que, em
uma estratégia de observabilidade consistente, tenhamos um padrão e construímos
pontos específicos em cima desse padrão. Para entender isso melhor, trago aqui duas
propostas de sinais que podem ser usadas para avaliar desvios de comportamento,
sendo elas:
RED
o Request rate.
o Error rate.
o Duration of request.
USE:
o Utilizations.
o Saturation.
o Errors.
52
‒ Acaba por ser uma estratégia interessante para infraestrutura, pois
correlaciona mais de uma métrica, por exemplo:
Outro ponto importante é entender que as métricas que são coletadas, elas
podem ter relevância e valores diferentes. Basicamente, existem duas maneiras de
coleta de dados. A primeira maneira é a maneira White Boxing, quer dizer, a coleta é
feita de dentro do item monitorado, onde é possível o acesso aos dados mais
consistentes. Outra técnica é a de black boxing: onde eu estou coletando de fora, como
um ping de Nagios, por exemplo. Essas métricas são limitadas à alertas baseados em
métricas de blackboxing, que tendem a ser menos relevantes e prover menos
informações.
53
Envolvemos nossas equipes e sua atuação de forma otimizada, garantindo
assim menos desperdício de tempo e de pessoal. Outro ponto é que uma estratégia de
alertas bem-definida, onde temos problemas conhecidos bem-definidos, podemos usar
a notificação para automatizar a correção desses problemas. Outro ponto relevante a
ser considerado em uma estratégia consistente de envio de alerta e notificações é o fato
de que alguns conjuntos de itens podem ter prioridade maior do que outros, por
exemplo, a queda de um servidor em um conjunto de três servidores pode ser muito
relevante, enquanto a queda de um contêiner numa aplicação com 10 ou 20 réplicas
pode ser bem menos relevante. Tudo isso deve ser considerado na hora de notificar as
equipes: garantindo assim que você não está acordando o seu chefe de operação porque
apenas um contêiner está fora na produção.
54
Quando falamos da parte de notificações e alertas import. A notificação é o
ponto de entrada para a resolução de um problema, seja ele de forma automática, ou
de forma manual por uma equipe que vai fazer um efetivo de uma aplicação. É
importante que esse alerta ou essa notificação tenha informações relevantes que
permitam a quem vai analisar. Um processo de troubleshooting tem as seguintes fases:
55
vão ajudar a ter uma aplicação mais robusta, mas se não houver um trabalho para que
todos os seus sistemas sejam observáveis, sempre teremos uma estratégia de
observabilidade incompleta.
56
Capítulo 6. Laboratório Parte 2
3 – Setup do Prometheus.
5 – Setup do Grafana.
57
Capítulo 7. Laboratório Parte 3
4 – Setup do Jaeger.
58
Capítulo 8. Laboratório Parte 4
6 – Setup da Aplicação.
59
Referências
MURPHY, Niall R.; BEYER, Betsy; JONES, Chris; PETOFF, Jennifer. Site Reliability
Engineering: How Google runs production systems. O'Reilly Media, mar. 2016.
60