AIOps na Prática: O Que a IA Já Faz em Operações Hoje

AIOps na Prática: O Que a IA Já Faz em Operações Hoje

Avaliação honesta do AIOps em quatro faixas de maturidade: detecção de anomalias e correlação de alertas já funcionando, assistentes de código e análise de causa raiz emergindo, remediação autônoma e previsão de capacidade ainda imaturas — e um roteiro de três passos para começar sem comprar ferramenta nova.
DevOps

• • 16 min de leitura

Poucas áreas da tecnologia acumulam tanto entusiasmo e tanta confusão simultâneos quanto a aplicação de inteligência artificial a operações de software. Vendors prometem sistemas que "resolvem incidentes automaticamente", "preveem falhas antes que aconteçam" e "eliminam o trabalho manual de operações". Parte disso já existe e funciona. Parte é aspiracional. Parte é marketing reembalado de funcionalidades que existem há anos sob outro nome.

Este artigo é uma avaliação honesta do estado atual: o que a IA já faz em operações com resultado comprovado, onde ainda é promessa, e como um engenheiro pode começar a aplicar essas ferramentas sem se perder em hype.

AIOps é o termo consolidado para a aplicação de machine learning e análise de dados a operações de TI. O conceito foi cunhado pelo Gartner em 2017 e desde então expandiu para cobrir desde correlação de alertas até geração automática de código de infraestrutura. Para este artigo, é útil dividir o território em quatro categorias por maturidade.

Categoria 1: Consolidado e Funcionando

Detecção de Anomalias em Métricas

A detecção de anomalias em séries temporais é o caso de uso mais maduro do AIOps. O problema é bem definido: dado o comportamento histórico de uma métrica (taxa de requisições, latência, uso de CPU), identificar quando o valor atual desvia significativamente do esperado — considerando sazonalidade, tendências e padrões de dia da semana.

O AWS CloudWatch Anomaly Detection e o Azure Monitor com Dynamic Thresholds resolvem exatamente esse problema. Em vez de configurar manualmente um alerta "dispare quando a latência ultrapassar 500ms", é possível configurar "dispare quando a latência estiver fora do intervalo esperado para este horário e dia da semana". O modelo aprende com 14 dias de histórico e ajusta os limites automaticamente.

# boto3 — configurar Anomaly Detector no CloudWatch
import boto3

cloudwatch = boto3.client('cloudwatch', region_name='sa-east-1')

# Criar um anomaly detector para a métrica de latência
cloudwatch.put_anomaly_detector(
    Namespace='MinhaApp',
    MetricName='Latencia_p99',
    Dimensions=[
        {'Name': 'Servico', 'Value': 'order-service'},
    ],
    Stat='p99',
    Configuration={
        # Janelas a excluir do treino — use para tirar do baseline o
        # período de um incidente ou de uma migração, que sujariam o modelo.
        # A sazonalidade semanal o modelo já aprende sozinho.
        'ExcludedTimeRanges': [],
        'MetricTimezone': 'America/Sao_Paulo'
    }
)

# Criar alerta baseado no anomaly detector
cloudwatch.put_metric_alarm(
    AlarmName='order-service-latencia-anomalia',
    AlarmDescription='Latência p99 fora do padrão esperado',
    # ANOMALY_DETECTION_BAND retorna o intervalo esperado pelo modelo
    Metrics=[
        {
            'Id': 'latencia',
            'MetricStat': {
                'Metric': {
                    'Namespace': 'MinhaApp',
                    'MetricName': 'Latencia_p99',
                    'Dimensions': [{'Name': 'Servico', 'Value': 'order-service'}]
                },
                'Period': 300,
                'Stat': 'p99'
            }
        },
        {
            'Id': 'banda_esperada',
            'Expression': 'ANOMALY_DETECTION_BAND(latencia, 2)',
            # 2 = desvios padrão acima/abaixo do esperado
        }
    ],
    'ComparisonOperator': 'GreaterThanUpperThreshold',
    'ThresholdMetricId': 'banda_esperada',
    'EvaluationPeriods': 3,
    'TreatMissingData': 'notBreaching',
    'AlarmActions': ['arn:aws:sns:sa-east-1:123456789012:alertas-criticos']
)

Correlação de Alertas e Redução de Ruído

Sistemas de observabilidade modernos geram centenas ou milhares de alertas durante um incidente. Um serviço cai, e imediatamente disparam alertas de latência, de taxa de erro, de health check, de filas acumulando, de dependentes que começam a falhar em cascata. Sem correlação, o engenheiro de plantão recebe 50 notificações sobre o mesmo problema raiz.

A correlação de alertas — agrupar alertas relacionados em um único incidente — é a funcionalidade central do PagerDuty, Opsgenie e ferramentas similares. O que o machine learning adiciona é a capacidade de aprender quais alertas tendem a aparecer juntos, qual deles geralmente é a causa raiz, e qual a sequência temporal típica — sem configuração manual de regras de correlação.

O Prometheus AlertManager sozinho não faz isso (tem agrupamento por labels, mas não correlação inteligente). Ferramentas como o AWS DevOps Guru e o Dynatrace Davis aplicam ML para reduzir dezenas de alertas a um único evento de "problema detectado" com causa raiz inferida.

Análise Inteligente de Logs

A busca em logs com expressões regulares e filtros manuais existe há décadas. O que o ML adiciona é a capacidade de classificar logs sem configuração prévia: identificar quais mensagens de log são "normais para este horário", quais são padrões novos que nunca apareceram antes, e quais correlacionam com degradações de performance.

O CloudWatch Log Insights com ML e o Elastic Observability com ML Jobs fazem isso nativamente. O exemplo mais útil na prática é a detecção de padrões novos: em vez de procurar por uma string específica de erro, o sistema alerta quando um tipo de mensagem de log aparece pela primeira vez ou com frequência anormalmente alta.

# Exemplo: usar o AWS DevOps Guru para análise automática de anomalias
# O DevOps Guru analisa CloudWatch métricas e logs automaticamente
# Configuração via Terraform:

resource "aws_devopsguru_resource_collection" "minha_app" {
  type = "AWS_CLOUD_FORMATION"

  cloud_formation {
    # DevOps Guru monitora todos os recursos desta stack
    stack_names = [
      "minha-app-producao",
      "minha-app-infraestrutura"
    ]
  }
}

# O DevOps Guru gera insights automaticamente quando detecta anomalias.
# Não requer configuração de alertas individuais — ele aprende o baseline
# e notifica quando algo está fora do padrão, com causa raiz inferida.

Categoria 2: Emergindo com Resultados Reais

Assistentes de Código para Infraestrutura

O GitHub Copilot, o Cursor e ferramentas similares têm impacto mensurável na escrita de Terraform, scripts Bash, manifestos Kubernetes e pipelines YAML. O benefício não é que a IA escreve código perfeito — é que ela elimina o tempo gasto consultando documentação para lembrar a sintaxe de um recurso que se usa raramente.

Um engenheiro que sabe o que quer fazer mas precisa consultar a documentação do azurerm_kubernetes_cluster para lembrar o nome exato do campo de Workload Identity economiza 5 minutos com o Copilot. Multiplicado por dezenas de interações por dia, o ganho de produtividade é real e já documentado em estudos do GitHub: desenvolvedores completam tarefas com assistência de IA entre 35% e 55% mais rápido em benchmarks controlados.

O próximo artigo (E10) cobre isso em profundidade com exemplos práticos de geração e revisão de pipelines.

Root Cause Analysis Assistida

Ferramentas como o Datadog Watchdog e o Dynatrace Davis vão além da detecção de anomalias: elas tentam identificar a causa raiz automaticamente, correlacionando eventos de infraestrutura, deploys recentes, mudanças de configuração e métricas de aplicação.

O resultado prático não é "a IA resolve o incidente sozinha" — ainda é o engenheiro que toma as decisões e executa as ações. O que a ferramenta faz é apresentar um diagnóstico estruturado: "Anomalia detectada às 14:23. Correlacionada com deploy realizado às 14:20. Serviço order-service mostrando latência 3x acima do normal. Possível causa: nova versão da query de banco de dados em /src/orders/repository.js linha 47."

Isso reduz o tempo de diagnóstico — o MTTD (Mean Time to Detect) e o MTTR (Mean Time to Recover) — que são as métricas que realmente importam em operações.

Categoria 3: Promissora mas Ainda Imatura

Remediação Automática

A ideia de um sistema que detecta um problema e automaticamente o corrige — reinicia o pod com crash, faz rollback do deploy problemático, aumenta a capacidade — existe em implementações limitadas e confiáveis. O Kubernetes já faz isso em nível básico com liveness probes e restarts automáticos. O HPA escala automaticamente baseado em métricas.

O que ainda é imaturo é a remediação autônoma de problemas mais complexos: "a query está lenta porque o índice está fragmentado — reconstruir o índice automaticamente em produção". Esse tipo de ação requer confiança muito alta na decisão da IA, porque uma ação errada pode piorar o problema. A maioria das organizações com cultura de engenharia madura ainda prefere "IA sugere, humano aprova e executa" para ações de remediação não-triviais.

Previsão de Capacidade

Machine learning aplicado a previsão de capacidade — "quantas instâncias vou precisar semana que vem para a campanha de Black Friday?" — funciona razoavelmente bem em problemas com padrões históricos claros. Mas para eventos sem precedente, crescimento acelerado de usuários ou mudanças de comportamento causadas por features novas, a previsão tem limitações inerentes: não é possível prever o que nunca aconteceu antes.

Como Começar: Um Roteiro Prático

Para times que querem começar a aplicar AIOps sem grandes investimentos em ferramentas especializadas, o roteiro mais pragmático segue três passos.

O primeiro é ativar as funcionalidades de ML que já estão nos serviços em uso. O CloudWatch Anomaly Detection, o Azure Monitor com Dynamic Thresholds, o AWS DevOps Guru e o Datadog Watchdog são ativados com poucos cliques ou linhas de Terraform. Não requerem dados de treinamento customizados nem expertise em ML.

O segundo é integrar um assistente de código ao workflow de desenvolvimento. GitHub Copilot ou Cursor para escrita de Terraform, pipelines e scripts. O ROI é imediato e mensurável em horas economizadas.

O terceiro é instrumentar as métricas de negócio que alimentarão os modelos. Detecção de anomalias em métricas técnicas (CPU, latência) é útil, mas detecção de anomalias em métricas de negócio (taxa de conversão, pedidos por minuto) é o que gera valor direto. Isso requer que as métricas de negócio estejam sendo coletadas com consistência — o que foi construído no capstone desta série.

Fontes e leituras recomendadas

Exercícios

Exercício 1

No alarme do CloudWatch, a expressão é ANOMALY_DETECTION_BAND(latencia, 2), o operador é GreaterThanUpperThreshold e EvaluationPeriods é 3 com Period de 300. Traduza isso em uma frase: o que exatamente precisa acontecer para o alarme disparar?

Ver resposta

✓ Resposta: A latência p99 precisa ficar acima da banda superior prevista pelo modelo em três janelas consecutivas de 5 minutos — ou seja, sustentar o desvio por 15 minutos.

Cada peça faz uma coisa:

  • ANOMALY_DETECTION_BAND(latencia, 2) devolve uma faixa, não um número: o intervalo esperado para aquele instante, com largura de 2 desvios. A faixa muda ao longo do dia — às 3h da manhã ela é mais estreita e mais baixa do que às 14h.
  • GreaterThanUpperThreshold escolhe só o teto da faixa. Latência anormalmente baixa não dispara — o que é a decisão certa aqui, mas seria errado para uma métrica como "pedidos por minuto", onde a queda é justamente o sintoma. Nesse caso o operador é LessThanLowerOrGreaterThanUpperThreshold.
  • EvaluationPeriods: 3 com Period: 300 exige persistência, filtrando o pico isolado de um garbage collector ou de um lote pesado.

O preço dessa filtragem é latência de detecção: um incidente real só paginará alguém 15 minutos depois de começar. É a troca explícita entre ruído e MTTD, e vale decidi-la por alarme — não é o mesmo número para "latência p99" e para "taxa de erro 5xx".

Exercício 2

Você ativa o CloudWatch Anomaly Detection num serviço novo, colocado em produção há três dias. Nas primeiras semanas o alarme dispara constantemente por qualquer coisa. Por que — e o que fazer?

Ver resposta

✓ Resposta: Porque o modelo ainda não viu histórico suficiente. O detector treina sobre até 14 dias de dados, e com três dias ele não tem como distinguir a variação normal de terça de tarde do pico de segunda de manhã — a banda que ele projeta é estreita e mal posicionada, então quase tudo cai fora dela.

O que fazer é deixar o detector coletando e não pendurar uma ação de paging nele ainda. Na prática: criar o alarme, apontar as AlarmActions para um tópico SNS silencioso ou um canal de observação, e só promover para o rodízio de plantão quando o histórico completar as duas semanas e a taxa de falso positivo cair.

Há um segundo motivo, mais sutil, que persiste mesmo depois dos 14 dias: se o serviço passou por um incidente ou uma migração nesse período, o comportamento anômalo entrou no baseline como se fosse normal. É exatamente para isso que serve ExcludedTimeRanges — recortar do treino as janelas que não representam o funcionamento normal.

A regra geral do artigo se aplica aqui: detecção de anomalias é a parte madura do AIOps, mas ela é madura dado histórico suficiente. Em serviço novo, o limiar estático continua sendo a escolha melhor até o modelo amadurecer.

Exercício 3

O artigo diz que o Prometheus AlertManager "tem agrupamento por labels, mas não correlação inteligente". Qual é a diferença concreta entre as duas coisas? Descreva um incidente em que o agrupamento por labels não resolve.

Ver resposta

✓ Resposta: Agrupamento por labels junta alertas que você declarou antecipadamente como semelhantes. Correlação infere que alertas diferentes pertencem ao mesmo incidente, sem que ninguém tenha escrito a regra.

O group_by do AlertManager é sintático: se você agrupa por ['alertname', 'cluster'], ele funde vinte disparos de HighLatency no mesmo cluster em uma notificação só. Funciona bem para um alerta em muitas instâncias.

O caso em que não resolve é o oposto — uma causa, muitos alertas de nomes diferentes. O banco fica lento e disparam, em sequência: DBConnectionPoolExhausted, CheckoutLatencyHigh, OrderQueueBacklog, PaymentServiceErrorRate e HealthCheckFailing em quatro serviços. Nenhum par compartilha alertname, e os service são todos distintos — para o AlertManager são cinco incidentes independentes, e o plantonista recebe cinco páginas.

É esse salto que ferramentas como o DevOps Guru e o Dynatrace Davis tentam dar: aprender que esses cinco aparecem juntos, que a ordem temporal costuma começar no banco, e entregar um evento com a causa raiz sugerida. Dá para aproximar o efeito no AlertManager com inhibit_rules — mas aí você está de volta a escrever manualmente cada relação, que é exatamente o trabalho que o ML se propõe a eliminar.

Exercício 4

O artigo classifica a remediação automática como imatura, mas reconhece que o Kubernetes já reinicia pods e o HPA já escala sozinho. Não é contradição? O que separa o que o Kubernetes faz do que ainda não se confia à automação?

Ver resposta

✓ Resposta: Não é contradição, porque o que o Kubernetes faz não é decisão de IA — é uma regra determinística, estreita e reversível.

Três propriedades separam os dois casos:

  • Determinismo: a liveness probe falhou N vezes → reinicia. A mesma entrada produz sempre a mesma ação, e a lógica cabe numa frase. Não há modelo inferindo nada.
  • Reversibilidade: reiniciar um pod num Deployment com várias réplicas custa alguns segundos de capacidade. Reconstruir um índice em produção segura escritas na tabela e não tem botão de desfazer no meio do caminho.
  • Escopo do dano quando erra: um restart desnecessário é ruído. Um rollback automático disparado por diagnóstico errado remove a versão correta e pode reintroduzir o bug que o deploy tinha acabado de corrigir.

Daí a formulação do artigo — "IA sugere, humano aprova e executa" — não ser conservadorismo gratuito. O gargalo não é a IA acertar na média; é que o custo de errar é assimétrico. Uma ação que acerta 95% das vezes e, nos 5% restantes, agrava um incidente em produção tem valor esperado pior do que não fazer nada.

O caminho prático é subir a escada por reversibilidade: automatizar primeiro o que se desfaz sozinho (restart, escala), depois o que se desfaz com um comando (rollback de deploy), e manter sob aprovação humana o que não se desfaz.

Exercício 5

O roteiro de três passos termina com "instrumentar as métricas de negócio", e o artigo afirma que elas geram mais valor que as técnicas. Por que detectar anomalia em "pedidos por minuto" vale mais do que em "uso de CPU"?

Ver resposta

✓ Resposta: Porque a métrica de negócio detecta a classe de falha em que toda a infraestrutura parece saudável.

CPU, memória e latência são proxies: medem o sintoma que costuma acompanhar um problema. Mas há falhas caras que não movem nenhuma delas — um deploy que quebra o botão de finalizar compra no front-end, um feature flag ligado por engano, um gateway de pagamento que passa a recusar cartões, um erro de configuração que faz o checkout responder 200 com a página errada. Em todos, a CPU fica normal, a latência fica normal, o health check passa. E não entra pedido nenhum.

"Pedidos por minuto" cai imediatamente nos quatro casos, porque mede o resultado, não o meio. É a diferença entre monitorar se o servidor está de pé e monitorar se o cliente conseguiu comprar.

Uma consequência prática, ligada ao Exercício 1: para métrica de negócio o alarme quase nunca é "acima do teto". O sintoma é a queda — o operador correto é LessThanLowerThreshold, ou a forma que cobre os dois lados. Configurar métrica de negócio com o mesmo operador que se usa para latência é um erro comum, e silencioso: o alarme existe, aparece verde no painel e nunca vai disparar no incidente que importa.

Comentários

Mais em DevOps

Trabalhando em Equipe com Git Flow
Trabalhando em Equipe com Git Flow

Git Flow como modelo de organização de branches: os papéis de main e develop…

GitLab CI/CD: A Alternativa Enterprise ao GitHub Actions
GitLab CI/CD: A Alternativa Enterprise ao GitHub Actions

A plataforma que nasceu DevOps completa, e não como hospedagem de código que…

Shell Script do Zero
Shell Script do Zero

Shell script do zero: shebang e permissão de execução, variáveis e…