Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a esta recomendação de lista de verificação de Eficiência de Desempenho do Azure Well-Architected Framework:
| PE:04 | Estabeleça uma medida de desempenho consistente para que o comportamento possa ser analisado ao longo do tempo, comparado com as linhas de base e usado para detectar lacunas de degradação, ineficiência e dimensionamento. |
|---|
Sem dados de desempenho, os problemas subjacentes e as oportunidades de otimização passam despercebidos, levando à degradação da experiência do usuário.
Este artigo descreve estratégias de design para implementar a medida de desempenho de várias camadas que captura a latência, a taxa de transferência e o comportamento de recursos para estabelecer linhas de base e identificar a degradação do desempenho em toda a carga de trabalho.
As principais estratégias neste artigo baseiam-se na prática operacional fundamental da observabilidade, descrita nas estratégias de arquitetura do OE:07 para a criação de um sistema de monitoramento. As diretrizes sobre como implementar a prática de monitoramento estão disponíveis no Guia de Design de Monitoramento. Recomendamos revisar esses recursos primeiro. As recomendações neste guia têm como escopo o desempenho. Para obter informações sobre confiabilidade, consulte as estratégias de arquitetura RE:10 para criar uma estratégia confiável de monitoramento e alertas.
Definições
| Term | Definição |
|---|---|
| Logs de atividades | Logs que rastreiam operações de gerenciamento em recursos, como a exclusão de um recurso. |
| Logs de aplicação | Logs que rastreiam informações sobre eventos do aplicativo, erros e outras atividades, como entradas e falhas de conexão com o banco de dados. |
| Ferramenta de monitoramento de desempenho de aplicativos (APM) | Uma ferramenta que monitora e relata o desempenho de um aplicativo. |
| Baselines | Métricas de desempenho do sistema esperadas usadas como ponto de referência para detectar descompasso, regressões e melhorias ao longo do tempo. |
| Instrumentação de código | A captura direta ou indireta de métricas de desempenho da perspectiva do código do aplicativo. As métricas capturadas incluem métricas de fluxo, uso de recursos e métricas específicas da linguagem ou do tempo de execução. |
| Rastreamento distribuído | Coletando e correlacionando métricas entre componentes de carga de trabalho distribuída para entender os fluxos de transação de ponta a ponta. |
| Latency | O atraso de tempo entre iniciar uma solicitação e receber uma resposta, medindo a capacidade de resposta do sistema. |
| Metrics | Medidas numéricas que registram o comportamento de desempenho da carga de trabalho ao longo do tempo, normalmente agregadas para análise. |
| Percentis (p50, p95, p99) | Medidas estatísticas mostrando a distribuição de desempenho; p50 representa o desempenho típico, p95 mostra a maior parte da experiência do usuário sob carga, p99 captura o pior desempenho. |
| Métricas de plataforma | Valores numéricos que registram o desempenho da carga de trabalho em um determinado momento. |
Usar métricas baseadas em percentil
Medir métricas de desempenho, como latência, tempo de resposta ou tempos de carga, com percentis (p50, p95, p99), não médias. As médias podem ser enganosas. Se a maioria das solicitações forem rápidas, mas algumas forem extremamente lentas, a média ocultará a experiência ruim.
Percentis mostram o comportamento final, que é importante para entender a experiência do usuário. p50 representa o desempenho típico, p95 mostra o que a maioria dos usuários experimenta sob carga e p99 captura o pior desempenho ou as exceções.
Colete dados de desempenho usando suas ferramentas de monitoramento e represente-os como percentis em janelas de tempo definidas. Use-os como sua linha de base para monitoramento, alertas e análise de desempenho.
Definir seus limites de melhoria de desempenho
Defina limites de desempenho claros para saber exatamente o que está incluído em suas medidas. Divida a latência em todo o sistema em vez de tratá-la como um único número. Por exemplo, atribua tempo a cada camada, como serviços de borda, gateways, computação e dependências, para ver onde os atrasos realmente ocorrem.
Separe o que você controla do que não controla: seu código, serviços, infraestrutura e dependências diretas versus fatores externos, como condições do lado do cliente, resolução DNS, latência ISP ou restrições de dispositivo. Essa distinção impede a atribuição incorreta e mantém a otimização focada em áreas em que você pode fazer alterações, refletindo ainda a experiência completa do usuário de ponta a ponta.
Avalie quando e onde os problemas de desempenho afetam a experiência do usuário. Compense essa degradação por meio do design ou mitigue por meio de melhorias nas partes controláveis do sistema.
Segmentar sinais por ambiente e finalidade
Segmentar dados de desempenho para que cada sinal reflita um contexto claro. Separe por ambiente e finalidade para evitar a combinação de sinais que se comportem de forma diferente ou que atendam a decisões diferentes.
Mantenha os dados de produção e não produção separados. Os dados de produção refletem o impacto real do usuário e devem gerar monitoramento e alertas. Os dados de não produção são úteis para testar e ajustar, mas misturá-los com a produção distorce os resultados e oculta problemas reais.
Separar as métricas de desempenho das métricas de negócios. As métricas de desempenho acompanham o comportamento do sistema e a integridade da carga de trabalho, enquanto as métricas de negócios acompanham os resultados. Mesmo quando eles se sobrepõem, mantenha-os em fluxos distintos para que cada um possa ser analisado e usado de forma independente.
Criar alertas de desempenho com escopo e acionáveis
O objetivo do alerta é a detecção precoce da degradação do desempenho antes de se tornar visível para o usuário ou para os negócios. Crie alertas em dois níveis: experiência do usuário de ponta a ponta e transações internas principais que representam caminhos críticos do sistema sob carga.
Use um único conjunto de dados consistente em cada ambiente para os alvos e alertas. Se os alertas forem baseados em dados diferentes dos destinos de desempenho, eles se tornarão não confiáveis e difíceis de confiar.
Crie alertas que sejam acionáveis e claramente vinculados aos resultados de desempenho. Cada alerta deve indicar qual limite teve uma violação sustentada, o impacto potencial e os componentes envolvidos para que fique claro onde investigar e o que é afetado. Comece com limites padrão e conhecidos e, em seguida, refina-os ao longo do tempo com base nas características de carga de trabalho e comportamento do sistema observados.
Quando o alerta direto em uma dependência externa não for possível, use sinais indiretos, como duração da chamada de dependência, taxas de erro ou comportamento de tempo limite para aproximar seu impacto no desempenho do sistema.
Monitorar a elasticidade
Meça como seu sistema responde às alterações na demanda e a eventos de escalonamento.
Acompanhe o início frio e a latência de inicialização para entender como a sobrecarga de inicialização afeta a capacidade de resposta, especialmente durante eventos de expansão. Monitore o comportamento de expansão horizontal e redução horizontal para avaliar a velocidade com que o sistema se adapta às alterações na carga e se as ações de dimensionamento acompanham a demanda.
Acompanhar o desempenho ao longo do tempo
Acompanhe como o desempenho evolui com alterações em seu design e fatores externos.
Estabeleça linhas de base que representam o desempenho esperado do sistema e compare o comportamento atual com eles para detectar descompasso, incluindo regressões e melhorias.
Conecte alterações de desempenho a eventos operacionais, como implantações, atualizações de configuração e ações de dimensionamento. Anotar linhas do tempo com esses eventos para que as mudanças de comportamento tenham um contexto claro e possam ser rastreadas de volta para causas prováveis.
Use essa visibilidade contínua como um ciclo de feedback para decisões de engenharia. Alimente insights de desempenho ao planejamento e à priorização e trate-os como insumos para o trabalho regular, em vez de somente para resposta a incidentes.
Refina continuamente os objetivos de desempenho à medida que o sistema evolui. Ajuste os SLOs, os limites e as expectativas com base nos padrões de uso e comportamento observados para que os destinos permaneçam realistas e alinhados com a experiência real do usuário.
Coletar dados de desempenho do aplicativo
Você precisa ter as métricas de desempenho do aplicativo, como taxa de transferência, latência e tempos de conclusão, coletadas principalmente por meio do código de instrumentação.
Instrumentar caminhos de execução críticos onde o desempenho é mais perceptível: fluxos de solicitações principais, operações intensivas em recursos e pontos em que ocorrem dependências ou repetições externas. Verifique a visibilidade da transação de ponta a ponta para que o tempo total de execução e suas etapas de contribuição possam ser medidos.
Capture três tipos principais de sinais de desempenho:
- Métricas para comportamento de desempenho agregado (distribuições de latência, taxa de transferência, taxas de erro)
- Rastreamentos para entender como o tempo é distribuído entre caminhos de solicitação e componentes do sistema
- Logs para contexto de execução detalhado em etapas ou eventos específicos
Use metadados consistentes nesses sinais para que os dados de desempenho possam ser correlacionados entre camadas do sistema e entre serviços.
Evite duplicar sinais de desempenho de nível inferior já expostos pela plataforma, a menos que seja necessária granularidade adicional para explicar o comportamento ou gargalos específicos da carga de trabalho.
Coletar dados de desempenho de recursos
Colete dados de desempenho no nível do recurso para entender como os componentes de infraestrutura se comportam sob carga e como eles contribuem para o desempenho geral da carga de trabalho.
Cada serviço expõe métricas específicas da plataforma que refletem suas características de integridade e desempenho. Use a configuração de diagnósticos para exportar esses dados, permitindo o acesso para alertas, painéis de controle e análises de longo prazo, além da retenção temporária da plataforma.
Coletar métricas e logs para todos os recursos. Acompanhe a utilização de computação e armazenamento em relação aos intervalos esperados para confirmar que o subprovisionamento não está introduzindo latência e degradando o desempenho sob carga. O superprovisionamento também é detectável com esses dados examinando o uso de P99 e comparando com a capacidade restante dos seus recursos.
Monitore o tráfego de rede como parte do desempenho do recurso. Analise o fluxo de tráfego entre sub-redes e limites de serviço para entender os padrões de latência, congestionamento e transferência de dados que podem afetar o desempenho da carga de trabalho.
Coletar dados de banco de dados e armazenamento
Os sistemas de banco de dados e armazenamento produzem sinais de desempenho especializados para identificar gargalos, validar a capacidade e entender o comportamento da carga de trabalho. Esses sinais normalmente vêm de ferramentas de monitoramento internas e logs gerados pelo sistema.
Concentre-se nas principais dimensões de desempenho:
| Area | O que medir | O que isso te diz |
|---|---|---|
| Produtividade | Volume de leitura/gravação ao longo do tempo | Capacidade de transferência de dados |
| Latency | Tempo por operação de armazenamento | Capacidade de resposta do armazenamento |
| IOPS | Operações de leitura/gravação por segundo | Funcionalidade de manipulação de transações |
| Uso da capacidade | Armazenamento usado versus disponível | Necessidades de dimensionamento e planejamento de capacidade |
Para bancos de dados, estenda o monitoramento para um comportamento específico da carga de trabalho:
| Area | O que medir | O que isso te diz |
|---|---|---|
| Desempenho da consulta | Tempo de execução, frequência, uso de recursos | Eficiência dos padrões de acesso a dados |
| Desempenho da transação | Duração, simultaneidade, contenção de bloqueio | Contenção e eficiência transacional |
| Desempenho do índice | Fragmentação, uso, impacto na otimização | Eficácia das estruturas de aceleração de consulta |
| Uso de recursos | CPU, memória, disco, rede | Restrições no nível do sistema |
| Métricas de conexão | Conexões ativas, com falha e anuladas | Estabilidade e pressão de conexão |
| Taxa de transação | Transações por segundo | Intensidade da carga de trabalho e alterações ao longo do tempo |
| Taxas de erro | Erros e falhas de banco de dados | Sinais de degradação de desempenho e confiabilidade |
Use esses sinais juntos para distinguir entre consultas lentas, saturação de recursos e ineficiências estruturais. Isso permite a otimização direcionada em sistemas de armazenamento e cargas de trabalho de banco de dados.
Coletar dados de desempenho do sistema operacional
Para cargas de trabalho baseadas em infraestrutura, colete métricas no nível do sistema operacional para entender como os recursos de computação estão sendo utilizados e onde as restrições de recursos podem ocorrer.
Faça amostragens dos contadores de desempenho do sistema operacional em intervalos regulares para capturar o comportamento temporal do sistema sob carga.
| Area | O que medir | O que ele indica |
|---|---|---|
| CPU | Uso da CPU (usuário/privilegiado), comprimento da fila da CPU | Saturação de computação e pressão de agendamento |
| Processes | Contagem de threads, contagem de identificadores | Carga do processo no nível do aplicativo e do sistema operacional |
| Memória | Memória comprometida, memória disponível, taxa de paginação, uso de swap | Pressão de memória e atividade de paginação |
| Disk | Taxa de leitura/gravação, taxa de transferência, utilização de disco | Desempenho e gargalos de E/S de armazenamento |
| Network | Taxa de transferência da interface, erros RX/TX | Problemas de capacidade de rede e transmissão |
Use esses sinais para identificar a saturação de recursos no nível do sistema operacional e para distinguir entre ineficiências no nível do aplicativo e restrições de infraestrutura.
Gerar dados sintéticos, quando necessário
Se o sistema não for usado de forma consistente, é difícil dizer se ele terá um bom desempenho quando o tráfego for retornado.
Para resolver isso, use transações sintéticas, que enviam solicitações automatizadas por meio de seu sistema. Elas simulam o uso real sem afetar os dados ou usuários reais. Isso ajuda a manter partes do sistema ativas, gerar métricas de desempenho consistentes e revelar padrões (como problemas de hora do dia) que o uso irregular pode ocultar.
Suporte ao Azure
O Azure Monitor fornece uma plataforma unificada para coletar, analisar e responder a dados de desempenho em toda a carga de trabalho. Ele agrega dados de aplicativos, infraestrutura e fontes externas em uma plataforma de dados comum.
Coleta e armazenamento de dados: use os workspaces do Log Analytics para centralizar seus dados de desempenho com políticas de retenção configuráveis. Crie vários workspaces para segmentar dados por requisitos de conformidade ou ambiente.
Monitoramento de aplicativos: o Application Insights coleta telemetria no nível do aplicativo, incluindo taxas de solicitação, tempos de resposta e exceções. Habilite o rastreamento distribuído para correlacionar o desempenho entre componentes distribuídos.
Monitoramento de infraestrutura: habilite as configurações de diagnóstico em todos os serviços do Azure para coletar logs e métricas da plataforma. Use a extensão diagnóstico do Azure para obter dados detalhados de desempenho da VM. Explore as opções de telemetria para sua plataforma específica. Por exemplo, os clusters do Kubernetes emitem telemetria de alto desempenho por meio de integrações do Prometheus .
Banco de dados e armazenamento: o Azure Monitor fornece monitoramento interno para o Banco de Dados SQL do Azure, MySQL, PostgreSQL e serviços de armazenamento. A Análise de Armazenamento do Azure rastreia os principais indicadores de desempenho, como taxa de transferência e latência no Armazenamento de Blobs, Tabelas e Filas.
Alerta e análise: crie regras de alerta com limites personalizáveis, janelas de tempo e ações (email, webhooks, Azure Functions). Use os Logs do Azure Monitor para consultar e correlacionar dados de desempenho. Para obter detalhes sobre preços, consulte os preços do Azure Monitor.
Exemplos
- Aplicativo Web de linha de base de serviços de aplicativos altamente disponível com redundância de zona
- Monitorar um aplicativo de microsserviços no AKS (Serviço de Kubernetes do Azure)
- Monitorar componentes da zona de destino das plataformas do Azure
Links relacionados
Lista de verificação de Eficiência de Desempenho
Consulte o conjunto completo de recomendações.