Pular para o conteúdo principal

Comparação de observabilidade

O AKS possui três caminhos de observabilidade que se sobrepõem de maneira confusa. Esta página esclarece o que cada um faz, onde se sobrepõem e qual combinação realmente usar.

As três ferramentas

FerramentaO que éComo funciona
Container InsightsAgente do Azure Monitor que coleta logs, métricas de nó/pod e eventos do KubernetesDaemonSet implantado via addon de monitoramento
Managed PrometheusArmazenamento de métricas compatível com Prometheus hospedado no Azure com scraping pré-configuradoAddon de métricas implantado como DaemonSet, dados armazenados no Azure Monitor workspace
OpenTelemetrySDK e collector agnóstico de fornecedor para traces, métricas e logsVocê implanta o OTel Collector e instrumenta o código do seu aplicativo

Comparação completa

AspectoContainer InsightsManaged PrometheusOpenTelemetry
Dados primáriosLogs + eventos do KubernetesMétricas (séries temporais)Traces + métricas customizadas + logs
Backend de armazenamentoLog Analytics workspaceAzure Monitor workspace (compatível com Prometheus)Depende do exporter (Azure Monitor, Jaeger, Zipkin)
DashboardsWorkbooks do portal AzureAzure Managed GrafanaGrafana, Jaeger UI ou qualquer backend compatível
AlertasAlertas do Azure Monitor em consultas de logRegras de alerta Prometheus no GrafanaDepende do backend
Métricas customizadasLimitado (consultas de log customizadas via KQL)Suporte completo a PromQL, scrape de qualquer endpoint /metricsInstrumentação completa via SDK no código do seu aplicativo
Métricas de infraestruturaCPU, memória, disco, rede dos nósO mesmo mais métricas de qualquer exporter PrometheusNão projetado para métricas de infraestrutura
Dados a nível de aplicaçãoApenas logs stdout/stderrMétricas do aplicativo se expostas via /metricsTraces distribuídos, spans customizados, métricas do aplicativo
Modelo de custoPago por GB de logs ingeridos no Log AnalyticsPago por amostras de métricas ingeridasGratuito (SDK é open source), pago pelo backend para o qual exporta
Esforço de configuraçãoUm comando CLIUm comando CLI + Grafana workspaceImplantar collector, instrumentar código, configurar exporters
Quando usarSempre (observabilidade básica)Quando precisar de métricas além do portalQuando precisar de tracing distribuído ou instrumentação customizada

A stack recomendada

Use as três. Cada uma cobre uma camada que as outras não conseguem.

CamadaFerramentaPor quê
Logs e eventos do KubernetesContainer InsightsCaptura stdout/stderr de cada container mais eventos de agendamento. Este é seu rastro de auditoria.
Métricas e dashboardsManaged Prometheus + GrafanaPromQL é o padrão para métricas. Dashboards do Grafana são melhores que workbooks do portal Azure. Dashboards da comunidade funcionam imediatamente.
Tracing distribuídoOpenTelemetryA única opção para rastreamento a nível de requisição entre microsserviços. Container Insights e Prometheus não fazem isso.

Habilite a stack recomendada

# 1. Container Insights (logs + events)
az aks enable-addons \
--resource-group myRG \
--name myCluster \
--addons monitoring \
--workspace-resource-id "<log-analytics-workspace-id>"

# 2. Managed Prometheus (metrics)
az aks update \
--resource-group myRG \
--name myCluster \
--enable-azure-monitor-metrics \
--azure-monitor-workspace-resource-id "<azure-monitor-workspace-id>" \
--grafana-resource-id "<grafana-workspace-id>"

# 3. OpenTelemetry Collector (tracing)
# Deploy via Helm or the OTel Operator in your cluster
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install otel-collector open-telemetry/opentelemetry-collector \
--namespace otel-system --create-namespace \
--set mode=deployment \
--set config.exporters.azuremonitor.connection_string="<app-insights-connection-string>"

O que se sobrepõe e o que não

Container Insights e Managed Prometheus coletam métricas de nó e pod. Isso causa confusão.

Tipo de métricaContainer InsightsManaged PrometheusSobreposição?
CPU/memória do nóSim (enviado ao Log Analytics)Sim (enviado ao Azure Monitor workspace)Sim, duplicado
CPU/memória do podSimSimSim, duplicado
Contagem de reinicializações do containerSimSimSim, duplicado
Eventos do KubernetesSimNãoSem sobreposição
Logs de container (stdout/stderr)SimNãoSem sobreposição
Métricas customizadas do aplicativoNãoSim (se o app expõe /metrics)Sem sobreposição
Consultas PromQLNãoSimSem sobreposição
Traces distribuídosNãoNãoNenhum cobre isso
informação

A duplicação de métricas entre Container Insights e Managed Prometheus é intencional. Container Insights alimenta a experiência do portal Azure. Managed Prometheus alimenta o Grafana. Você paga por ambos, mas o caminho do Prometheus é significativamente mais barato para cargas de trabalho puramente de métricas. Se o custo é uma preocupação, reduza o Container Insights para apenas logs e use Prometheus para todas as métricas.


Considerações de custo

Os custos de observabilidade são impulsionados pelo volume de dados. Sem filtros, um cluster de 20 nós pode gerar mais de 50 GB de logs por dia.

Para onde vai o dinheiro

FonteDriver de custoImpacto típico
Logs do Container InsightsGB ingeridos no Log AnalyticsAlto. Este é o componente mais caro.
Métricas do Container InsightsIncluído com o addon de logsModerado. Incluído, mas ainda medido.
Managed PrometheusAmostras de métricas ingeridasBaixo. Prometheus é muito eficiente para dados de séries temporais.
Managed GrafanaPreço por instânciaFixo. Uma instância do Grafana atende toda a equipe.
OpenTelemetryDepende do backendVariável. Application Insights cobra por evento.

Reduza o volume de logs imediatamente

Não colete tudo. Filtre agressivamente desde o primeiro dia.

# ConfigMap to exclude noisy namespaces from Container Insights
# Apply as: kubectl apply -f container-insights-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: container-azm-ms-agentconfig
namespace: kube-system
data:
schema-version: v1
config-version: v1
log-data-collection-settings: |-
[log_collection_settings]
[log_collection_settings.stdout]
enabled = true
exclude_namespaces = ["kube-system","gatekeeper-system","azure-arc"]
[log_collection_settings.stderr]
enabled = true
exclude_namespaces = ["kube-system","gatekeeper-system"]
[log_collection_settings.env_var]
enabled = false
dica

Comece excluindo os logs de kube-system. Eles são de alto volume e raramente úteis para depuração de aplicativos. Se precisar de dados de kube-system, consulte-os através dos eventos do Kubernetes no Container Insights em vez de logs brutos de container.

Comparação de custos em escala

Tamanho do clusterContainer Insights (logs + métricas)Apenas Managed PrometheusEconomia com Prometheus para métricas
5 nós, cargas leves~$150/mês~$30/mês80% no custo de métricas
20 nós, cargas moderadas~$800/mês~$80/mês90% no custo de métricas
50+ nós, cargas pesadas~$3.000+/mês~$150/mês95% no custo de métricas

Estes são estimativas. Os custos reais dependem do volume de logs, retenção e frequência de consultas.


Caminho de migração

Não tente configurar tudo de uma vez. Siga esta ordem:

Fase 1: apenas Container Insights

Habilite o Container Insights. Faça os logs, métricas básicas e dashboards do portal funcionarem. Isso leva 10 minutos e cobre 80% do que você precisa no primeiro dia.

Fase 2: adicione Managed Prometheus e Grafana

Quando precisar de dashboards melhores, métricas customizadas ou alertas via PromQL, adicione o Managed Prometheus. Importe dashboards comunitários do Grafana para Kubernetes. Considere reduzir o Container Insights para apenas logs para evitar pagar por métricas duplicadas.

Fase 3: adicione OpenTelemetry

Quando tiver múltiplos microsserviços e precisar rastrear requisições entre eles, instrumente seu aplicativo com o SDK OpenTelemetry. Implante o OTel Collector para exportar traces para o Application Insights ou Jaeger.

informação

A maioria das equipes nunca precisa da fase 3. Se você executa um monólito ou um número pequeno de serviços, tracing distribuído adiciona complexidade sem valor proporcional. Adicione-o quando não conseguir depurar problemas de latência entre serviços apenas com logs e métricas.


Anti-padrões

Evite estes erros comuns.

Anti-padrãoPor que está erradoO que fazer em vez disso
Executar Prometheus auto-hospedado junto com Managed PrometheusDobro da carga operacional, dobro do custo, dados em dois lugaresUse Managed Prometheus. É totalmente compatível e o Azure cuida da disponibilidade.
Coletar todos os logs de todos os namespaces sem filtragemOs custos do Log Analytics escalam linearmente com o volume. Você vai ter uma surpresa na fatura.Exclua kube-system, gatekeeper-system e qualquer outro namespace de infraestrutura que não precise.
Usar Container Insights para alertas de métricasAlertas de métricas baseados em KQL têm maior latência e custam mais que regras de alerta PrometheusUse recording rules do Prometheus e alertas do Grafana para métricas. Use alertas do Container Insights apenas para condições baseadas em logs.
Implantar Jaeger, Zipkin e Application Insights simultaneamenteTrês backends de tracing significam três lugares para procurar e nenhum deles tem dados completosEscolha um backend de tracing. Application Insights se integra nativamente com o Azure. Jaeger é melhor se quiser permanecer agnóstico de fornecedor.
Não definir limites de recursos no OTel CollectorO collector pode consumir memória ilimitada durante picos de tráfegoSempre defina limites de memória no pod do collector e configure o processador de limitação de memória no pipeline OTel

Árvore de decisão: qual ferramenta preciso agora?

Pergunta 1: Você tem alguma observabilidade neste cluster?

  • Não: Habilite o Container Insights. Pare aqui até ter uma necessidade real para mais.

Pergunta 2: Você precisa de dashboards melhores ou alertas de métricas customizadas?

  • Sim: Adicione Managed Prometheus + Grafana.

Pergunta 3: Você está depurando latência entre múltiplos serviços?

  • Sim: Adicione OpenTelemetry com tracing distribuído.

Pergunta 4: Sua fatura do Container Insights está muito alta?

  • Sim: Filtre a coleta de logs, mude métricas para Prometheus, reduza a retenção do Log Analytics para 30 dias.

Recursos