Apresentando a detecção semântica e descrevendo a fadiga de alertas
Na nossa segunda aula, abordaremos a importância da detecção semântica. Vamos entender o que significa semântica nesse contexto e como funciona a resposta automatizada.
Para quem atuou nos anos 1990 e 2000, eram muito comuns os monitoramentos em que uma determinada tela exibia alertas e indicações de status (se estavam ativados ou não), com sinalizações de erro, de warning (aviso) e pouca informação adicional. Hoje consideramos esse modelo ineficiente, pois frequentemente apresenta muitos falsos positivos e métricas totalmente isoladas ou descontextualizadas.
Existe o que chamamos de fadiga de alertas. A fadiga de alertas é um cenário que persiste até hoje: monitoramentos com alertas na tela em que determinadas pessoas dizem para não nos preocuparmos, que é normal, que aquela sinalização “sempre aparece” e não merece atenção, “é um alerta da casa”. Isso é fadiga. Quando temos uma tela com alertas que não exigem atenção, isso cansa, desvia nosso foco para destaques do monitoramento que não trazem significado. Não podemos permitir que isso ocorra; um alerta nunca pode ficar “fatigado”. Ele precisa ser tratado ou, se de fato deixou de ser importante, o monitoramento correspondente deve ser removido e aquela instância de serviço ou workload deve ser descontinuada, já que não é mais relevante.
Correlacionando monitoramento de infraestrutura ao negócio
Também existe o tipo de monitoramento que observa recursos: recursos de rede, de infraestrutura, links. São monitoramentos que continuam importantes. É essencial conhecermos a saúde da nossa infraestrutura e dos nossos servidores; isso segue sendo relevante. No entanto, hoje esse tipo de monitoramento perde força quando deixamos de correlacioná-lo com o nosso negócio. Este exemplo de monitoramento é de uma ferramenta muito interessante, o Zabbix, ainda amplamente utilizado. Veremos, ao longo desta aula, que ele é importante, mas ganha muito mais força quando conseguimos correlacioná-lo com nosso negócio.
O problema central é acreditar que uma saturação de CPU, um erro de rede ou algum tipo de recurso de infraestrutura se sobrepõe ao que realmente importa: o que aquilo representa para o nosso negócio. Quando temos esse tipo de monitoramento sem deixar claro o que está ocorrendo do ponto de vista do negócio, ele perde força. Por isso, hoje os monitoramentos de infraestrutura são realizados de outras formas.
Modelando telemetria orientada ao negócio com logs semânticos
Quando falamos de SRE, falamos do papel da avaliação de logs (registros) semânticos com contexto. São serviços que dizem o que fazem, de fato, não apenas tecnicamente. O fator técnico, isoladamente, não é o mais importante. Precisamos correlacionar com algo relacionado ao negócio. O SRE é quem vai monitorar a operação por meio das ferramentas, e a pessoa arquiteta auxilia a modelar o ecossistema telemétrico.
O que isso significa? Que começamos pelas métricas de negócio, identificamos os caminhos críticos e tudo aquilo que representa o tráfego e as operações monitoradas. As ferramentas que monitoram nosso ambiente precisam saber o que esses eventos significam para o negócio. Só então entram os aspectos que conhecemos de desempenho e disponibilidade.
Isso fica mais claro quando analisamos o diagrama do The Open Group, do TOGAF. No TOGAF, a arquitetura corporativa nasce em uma camada de negócio e se desdobra por nossas aplicações e tecnologia. Sempre que criamos uma solução, existe uma motivação estratégica para o negócio. Por exemplo, atender uma pessoa cliente ou disponibilizar um meio de pagamento. A camada de negócio engloba nossos serviços e ofertas. Por exemplo, efetuar um PIX. Queremos possibilitar um pagamento via PIX. Teremos uma camada de aplicações que sustenta esse interesse de negócio e um suporte via tecnologia. Aqui falamos de um cluster (agrupamento), de uma fila, de um tópico.
Quando ocorre um incidente, percorremos o caminho inverso. Se um determinado cluster (agrupamento) estiver fora de serviço, já precisamos ter mapeada na telemetria a correlação: o que isso significa? O que deixamos de prover ou comercializar por causa dessa falha tecnológica? O elo entre essas duas dimensões está na camada de aplicação. A camada de aplicação começa a fornecer logs (registros) semânticos, que indicam o que está sendo feito. Por exemplo: compra realizada, pagamento efetuado, cartão emitido, relatório médico concluído, reserva confirmada. A camada de aplicação gera logs (registros) que criam um elo e informam à telemetria o que de fato está ocorrendo.
Implementando ciclo de resposta inteligente e autocura
Temos, então, um ciclo de resposta inteligente, baseado nas informações fornecidas pelas aplicações. A primeira etapa é a ingestão de logs (registros) e métricas. Em seguida, realizamos uma análise que pode ser preditiva. Consumo de CPU e memória é importante? Sim. Mas o que nos diz mais sobre o estado do ambiente? Por exemplo, uma fila com muitos comandos a executar. Quando essa fila cresce, é sinal de que o ambiente precisa se adaptar. Isso se torna uma análise preditiva. Hoje temos ferramentas que conseguem ler esse tipo de indicador. Por exemplo, o KEDA, uma ferramenta que conectamos ao Kubernetes e que pode monitorar uma fila, um tópico ou algum tipo de gargalo, para aumentar a quantidade de pods (instâncias de execução no Kubernetes), escalar para cima e para baixo.
O isolamento semântico pode ser assistido por IA. Em ambientes muito complexos, com diferentes ferramentas ou etapas que geram zonas ofuscadas, a inteligência artificial pode auxiliar nessa correlação. O self-healing (auto-recuperação) é o que configuramos dentro do nosso SOAR (Security Orchestration, Automation, and Response — Orquestração, Automação e Resposta de Segurança), nosso sistema de respostas automatizadas a incidentes, para, por exemplo, reiniciar um workload (carga de trabalho), levantar um novo nó, aumentar a quantidade de pods (instâncias no Kubernetes) da aplicação ou reiniciar algum tipo de serviço.
Temos, inclusive em sistemas legados, um Windows Service (Serviço do Windows) que processa determinada fila. Se observamos que essa fila está gerando gargalo, aumentando e não sendo processada, o que podemos fazer? Configurar um reinício automático desse serviço ou até do servidor. O self-healing (auto-recuperação) reúne mecanismos e estratégias para que o ambiente se restabeleça por si só. Às vezes, já vamos arquitetar com o conceito de self-healing (auto-recuperação) desde o início; às vezes isso será nativo quando usamos um cluster (agrupamento) Kubernetes. Falamos muitas vezes de recursos nativos, como rollout (implantação gradual) e readiness (prontidão), que funcionam automaticamente dentro de um cluster (agrupamento), mas também podemos criar self-healing (auto-recuperação) derivado de algum tipo de incidente: sempre que ocorrer o problema X, tomamos a ação Y. Isso pode ser automatizado.
Enriquecendo o monitoramento com métricas de negócio
Esse já é um exemplo de monitoramento rico. O monitoramento rico adiciona às métricas da ferramenta — neste caso, o Dynatrace — números de pedidos ou ordens processados, estado de um determinado estoque e de entregas. Esse monitoramento deixa de tratar apenas de CPU, memória ou da saúde de um pod (instância no Kubernetes). Passa a observar, de fato, indicadores de negócio. Podemos estabelecer uma baseline (linha de base), que indica o volume esperado para aquele dia e faixa horária, muitas vezes comparando com o mesmo período do dia anterior, da semana anterior ou do mês anterior, nas mesmas datas. Isso é uma correlação de informações de negócio.
Quem gera essa informação? As aplicações. Vamos até a aplicação e inserimos um log information (registro informativo), um log debug (registro de depuração) ou outro tipo de log (registro) para gerar dados como “ordem processada” e “volume movimentado”, entre outros.
Quando temos essas correlações estabelecidas, podemos definir nossos SLIs e SLOs, isto é, nossos indicadores e objetivos de nível de serviço: em termos formais, um Service Level Indicator (indicador de nível de serviço) e um Service Level Objective (objetivo de nível de serviço). Com a correlação, deixamos de acompanhar apenas a contagem de códigos de erro HTTP 400 ocorrendo e passamos a observar, por exemplo, o número de vendas não concretizadas ou com falha em um período determinado.
Podemos estabelecer o Error Budget (orçamento de erro), que é o número aceitável de falhas para uma operação dentro de um período. Digamos que, no contexto bancário, definimos o número de confirmações de pagamento e não toleramos que mais de mil transações falhem durante toda a semana. Quando estamos gastando muito desse orçamento, o que podemos fazer? Podemos tomar decisões para reduzir risco, como não realizar um deploy (implantação) nesse período, porque uma nova versão pode desestabilizar o ambiente. Se começamos a gastar muito, podemos tomar decisões estratégicas no negócio para favorecer algum tipo de ação. Em termos práticos, isso se traduz em metas: estabelecemos uma meta de conversão e uma meta de erros toleráveis. Com isso, traçamos uma estratégia para mitigar e evitar exceder o nosso Error Budget.
Considerando estacionalidade, modelagem estocástica e análise probabilística
Estacionalidade operacional e telemetria são conceitos fundamentais. Estacionalidade é o nome que damos a períodos em que determinados comportamentos ocorrem, como no contexto de Black Friday ou Dia das Mães. São fenômenos que acontecem de tempos em tempos. O que é modelagem estocástica? É um cenário em que temos certo grau de previsibilidade comprometida. O estocástico, não determinístico, prevê flutuações. Existem algoritmos aos quais podemos recorrer e que muitas ferramentas já trazem, às vezes de forma nativa, para nos ajudar.
Entram aqui a modelagem temporal e as flutuações baseadas em padrões históricos: mesmos movimentos, em dias diferentes ou horários diferentes. Podemos ter uma expectativa e gerar alertas se houver algum tipo de ruptura nessa expectativa. Um baseline (referência) real reflete o comportamento histórico com uma referência dinâmica e contextual. Um baseline é nossa meta para uma determinada métrica, que podemos estabelecer em colaboração com a equipe de negócio ou por meio de análise histórica.
Quanto à análise probabilística, ela se baseia em algo totalmente variável. Quando usamos muito? Por exemplo, em assistências baseadas em inteligência artificial, como análise de crédito por IA. Às vezes observamos um comportamento chamado drift (desvio), quando a inteligência artificial deixa de responder como se esperava. Isso pode gerar um tipo de anomalia, que as ferramentas podem detectar e, assim, disparar alertas.
Portanto, estatística, probabilidade e estacionalidade são fatores que devemos ter em mente. Nem sempre a métrica do dia a dia é a mesma métrica que deve ser aplicada em datas ou momentos específicos. Se a área de marketing lança uma promoção que vai sobrecarregar o ambiente, a comparação com o mesmo período do dia anterior, às vezes, não serve. A estacionalidade entra justamente para entendermos que existem variações de acordo com determinados contextos de negócio.
Aplicando inteligência artificial para correlação e anomalias
Como já comentamos no primeiro bloco, a inteligência artificial, ou AIOps, nos ajuda a fazer correlação em escala, isolamento de dependências e triagem automatizada. Ela nos auxilia a olhar no lugar certo. Quando temos uma ferramenta de IA consumindo nossos logs e nossa telemetria, contamos com a ajuda de um “superespecialista” capaz de observar, considerando estacionalidade, probabilidade e até contextos não determinísticos e estocásticos, qual deveria ser o comportamento esperado naquele momento. Devemos, portanto, utilizar e conhecer esses recursos de IA integrados às nossas ferramentas e, se não os tivermos, é o momento de avaliar novas ferramentas que tragam esse tipo de capacidade.
Falamos ainda sobre descoberta contínua, grafos e redes neurais — três elementos que a IA usa para chegar a determinadas conclusões. Lembramos que sempre podemos ter falsos positivos e falsos negativos; por isso, além da análise dinâmica, mantemos em paralelo nossos guardrails (regras de proteção) e monitorações mais efetivas, como conversão de vendas, conversões de entrega e efetivações de pagamento. Assim, deixamos que a IA trabalhe principalmente para tratar anomalias estocásticas e variações sazonais de um determinado processo.
Exemplo: relação entre volume de vendas, número de pods e quantidade de mensagens aceitáveis dentro de uma determinada fila. A IA pode fazer essa correlação que, às vezes, deixamos passar por se tratar de um cenário atípico, como no padrão apresentado na primeira aula: o padrão Request-Reply (solicitação-resposta), em que temos comando via fila e resposta via tópico. Para estabelecer o equilíbrio do ambiente, a IA pode ajudar, indicando: “Há algo errado, o volume deste ponto específico não está proporcional ao que deveria sair pelo tópico.”
Orquestrando playbooks e mecanismos de resiliência em múltiplas camadas
Entramos também em detecção de incidentes e execução de playbooks (roteiros de ação), o que significa já termos preparados nossos scripts para tomada de decisão conforme o tipo de incidente. O conceito de self-healing (autocura) é justamente a ideia de que já conhecemos o problema, já passamos por um incidente desse tipo e, toda vez que ocorre, tomamos determinada ação — o que chamamos de playbook.
Exemplos clássicos incluem o circuit breaker (interrupção de circuito) com graceful degradation (degradação gradual). Podemos desativar parte do processo, desviar um fluxo para um servidor de fallback (alternativa), levantar outro servidor ou usar outra cloud (nuvem). Podemos ter um serviço primário que responde com latência muito baixa dentro do nosso ambiente, dentro do nosso padrão de Bulkhead (compartimentação) e, em um caso mais crítico, desviar esse fluxo para um serviço primário em outra rede. Aplicamos o circuit breaker, desviamos para um fallback e podemos optar por graceful degradation, desativando funcionalidades do sistema enquanto o ambiente não está totalmente estável.
A autocura e os mecanismos de resiliência se aplicam tanto à camada de rede quanto à camada de aplicação e à camada de infraestrutura. Na camada de rede, normalmente usamos ferramentas de borda, como Akamai, Cloudflare, Azion e outras, que por si só têm recursos para nos ajudar e também aliviar nosso backend (servidor de aplicação), tratando muitas coisas já na primeira camada. A camada de aplicação é o ponto mais crítico; muitas vezes não recebe o devido cuidado. Devemos adotar cuidados como usar um service mesh (malha de serviços), por exemplo, Istio com o Envoy, para dar tempo às aplicações responderem adequadamente, aplicando uma retry policy (política de repetição) e uma timeout policy (política de tempo limite). Na camada de infraestrutura, falamos de autoescalonamento, como o que o KEDA nos proporciona dentro do nosso cluster (conjunto de nós).
Sintetizando aprendizados e encerrando o bloco
Sintetizando na nossa Aula 2, discutimos a importância de alertas dinâmicos e contextuais e a relação entre a camada de negócio, a camada de aplicação e a camada de tecnologia. Essa correlação é o que confere semântica e lógica de negócio ao que observamos tecnicamente. Abordamos o uso da inteligência artificial para estabelecer uma correlação mais efetiva, especialmente em cenários de estacionalidade e contextos atípicos, e a automação nas bordas, por exemplo, utilizando circuit breaker, playbooks e autocura em diferentes camadas, cada uma com sua lógica e sua estratégia.
Com isso, finalizamos nosso segundo bloco e nos encontramos a seguir no próximo.