Share via


Recomendações para instrumentar um aplicativo

Aplica-se a esta recomendação de lista de verificação de Excelência Operacional do Azure Well-Architected Framework:

OE:07 Crie e implemente um sistema de monitoramento para validar as opções de design e informar decisões futuras de design e negócios. Esse sistema captura e expõe telemetria operacional, métricas e logs que emitem da infraestrutura e do código da carga de trabalho.

Guia relacionado: Recomendações para criar e criar um sistema de monitoramento

Este guia descreve as recomendações para habilitar a observabilidade do aplicativo usando instrumentação. Gere telemetria significativa que pode ser ingerida e integrada ao sistema de monitoramento. Usando a instrumentação, você pode coletar informações sem entrar em um servidor de produção remoto para executar manualmente o rastreamento ou a depuração. Os dados de instrumentação incluem métricas e logs que você pode usar para avaliar o desempenho, diagnosticar problemas e tomar decisões de carga de trabalho.

Principais estratégias de design

Para otimizar a telemetria para sua carga de trabalho, instrumente seu aplicativo para gerar os seguintes dados:

  • Os logs são registros com carimbo de data/hora de eventos discretos. Há três formas de logs: texto sem formatação, estruturado e binário.

  • Os logs de rastreamento distribuídos permitem que você veja o caminho de uma solicitação enquanto ela percorre diferentes serviços e componentes.

  • As métricas são valores numéricos que descrevem um aspecto de um sistema em um determinado ponto no tempo.

Observação

Você pode usar ferramentas como Application Insights, Dynatrace e Monitoramento de Desempenho de Aplicativos Elásticos para instrumentar automaticamente seu aplicativo. Essas ferramentas facilitam a instrumentação, mas também podem ser limitadas. Se você usar uma ferramenta de instrumentação automática, poderá adicionar mais recursos por meio da instrumentação manual, conforme necessário.

Logs e logs de rastreamento distribuídos

Use o log estruturado para integrar facilmente logs em plataformas de monitoramento e análise. Instrumente seu aplicativo para que os níveis de detalhamento possam ser alterados. O registro em log detalhado constante pode desperdiçar recursos de armazenamento, portanto, ele deve ser ativado e desativado conforme necessário para solução de problemas.

Os logs de rastreamento contêm dados textuais ou binários criados a partir de um evento de rastreamento, se o aplicativo usar o ETW (Rastreamento de Eventos para Windows). Os logs do sistema geram conteúdo de log de rastreamento de eventos na infraestrutura, como o servidor Web. O conteúdo do log textual foi projetado para ser legível por humanos, mas você deve garantir que ele seja escrito em um formato que um sistema automatizado também possa analisar.

Categorize logs e use logs separados para registrar a saída de rastreamento de cada aspecto operacional do sistema. Se você categorizar seus logs, poderá filtrar rapidamente as mensagens de log em vez de processar um único arquivo longo. Nunca escreva informações que têm requisitos de segurança diferentes, como informações de auditoria e dados de depuração, no mesmo log.

Observação

Um log pode ser implementado como um arquivo no sistema de arquivos ou pode ser mantido em algum outro formato, como um blob no armazenamento de blobs. As informações de log também podem ser mantidas no armazenamento estruturado, como linhas em uma tabela.

Métricas

As métricas ou exemplos são uma contagem de algum aspecto ou recurso no sistema em um momento específico, com uma ou mais marcas ou dimensões associadas. Uma única instância de uma métrica não é útil isoladamente, as métricas devem ser capturadas ao longo do tempo. Considere quais métricas você deve registrar e com que frequência. Os dados gerados com muita frequência podem impor uma carga pesada ao sistema, mas a captura de dados pouco frequente pode fazer com que você perca as circunstâncias que levam a um evento significativo. A frequência apropriada para capturar dados pode variar de métrica para métrica. Por exemplo, o uso da CPU em um servidor pode variar significativamente de segundo para segundo, mas o alto uso só se tornará um problema se for consistente em muitos minutos.

Informações de correlação de dados

Você pode monitorar facilmente contadores de desempenho individuais e no nível do sistema, capturar métricas para recursos e obter informações de rastreamento de aplicativo de vários arquivos de log. Alguns monitoramentos exigem correlação de dados durante a análise e diagnóstico estágio no pipeline de monitoramento. Esses dados podem assumir várias formas e o processo de análise deve ser fornecido com dados de instrumentação suficientes para mapear essas diferentes formas. Por exemplo, no nível da estrutura do aplicativo, uma ID de thread pode identificar uma tarefa. Em um aplicativo, o mesmo trabalho pode estar associado à ID de usuário para o usuário que concluir essa tarefa.

É improvável que seja um mapa 1:1 entre threads e solicitações de usuário, pois operações assíncronas podem reutilizar os mesmos threads para mais de um usuário. Para complicar ainda mais as coisas, uma única solicitação pode se correlacionar a mais de um thread à medida que flui pelo sistema. Se possível, associe cada solicitação a uma ID de atividade exclusiva que é propagada pelo sistema como parte do contexto da solicitação. A técnica para gerar e incluir IDs de atividade em informações de rastreamento depende da tecnologia usada para capturar os dados de rastreamento.

Todos os dados de monitoramento devem receber um carimbo de data/hora da mesma maneira. Para ter consistência, registre todas as datas e horas usando o Tempo Universal Coordenado.

Observação

Computadores que operam em diferentes fusos horários e redes podem não ser sincronizados. Não dependa somente de carimbos de data/hora para correlacionar dados de instrumentação que abrangem várias máquinas.

Informações a serem incluídas nos dados de instrumentação

Considere os pontos a seguir ao decidir quais dados de instrumentação você precisa coletar.

Dados legíveis por humanos

Verifique se as informações capturadas por eventos de rastreamento são legíveis por computador e humanos. Adote esquemas bem definidos para essas informações para ajudar a implementar o processamento automatizado de dados de log entre sistemas e fornecer consistência para operações e equipe de engenharia lendo os logs.

Inclua as seguintes informações ambientais em seus dados:

  • Ambiente de implantação
  • Computador de processamento
  • Detalhes do processo
  • Pilha de chamadas

Investir em rastreabilidade e correlação

Forneça contexto suficiente, como uma ID de atividade associada a uma instância específica de uma solicitação, para que o desenvolvedor ou administrador possa determinar a origem de cada solicitação.

O contexto de dados também pode incluir informações usadas para correlacionar uma atividade com o trabalho computacional executado e os recursos usados. Esse trabalho pode atravessar limites de processos e máquinas.

Para medição, o contexto deve incluir direta ou indiretamente uma referência ao cliente que causou a solicitação. Esse contexto fornece informações valiosas sobre o estado do aplicativo no momento em que os dados de monitoramento foram capturados.

Capturar todos os dados relevantes

Registre todas as solicitações e os locais ou regiões em que elas são feitas. Você pode usar essas informações para ajudar a identificar pontos de acesso específicos à localização. Essas informações também podem ser úteis para determinar se é necessário reparticionar um aplicativo ou os dados que ele usa.

Registre e capture com cuidado os detalhes de exceções. As informações críticas de depuração geralmente são perdidas devido à má manipulação de exceções. Capture todos os detalhes de exceção que o aplicativo gera, incluindo quaisquer exceções internas ou outras informações contextuais, como a pilha de chamadas, se possível.

Buscar consistência de dados

Dados consistentes podem ajudá-lo a analisar eventos e correlacioná-los com solicitações de usuário. Considere usar um pacote de log abrangente e configurável para coletar informações. Os pacotes de registro em log podem ajudá-lo a evitar a dependência de desenvolvedores para adotar sua abordagem, pois eles implementam diferentes partes do sistema.

Colete dados, como volume de entrada/saída, número de solicitações e uso de memória, rede e CPU, dos principais contadores de desempenho. Alguns serviços de infraestrutura fornecem seus próprios contadores de desempenho, como:

  • O número de conexões a um banco de dados.
  • A taxa de transação.
  • O número de transações que tiveram êxito ou falham.

Os aplicativos também podem definir seus próprios contadores de desempenho.

Considerar dependências externas

Registre todas as chamadas de serviço externo. Chamadas externas podem ser feitas para:

  • Sistemas de banco de dados.
  • Serviços Web.
  • Outros serviços no nível do sistema que fazem parte da infraestrutura.

Registre informações sobre a duração de cada chamada e o êxito ou falha da chamada. Se possível, capture informações sobre todas as tentativas de repetição e as falhas para quaisquer erros transitórios que ocorrem.

Garantir a compatibilidade do sistema de telemetria

Em muitos casos, as informações de instrumentação são geradas como uma série de eventos e passadas para um sistema de telemetria separado para processamento e análise. Um sistema de telemetria normalmente é independente de qualquer aplicativo ou tecnologia específico.

Os sistemas de telemetria usam esquemas definidos para analisar informações. O esquema especifica um contrato que define os campos de dados e os tipos que o sistema de telemetria pode ingerir. Generalize o esquema para permitir que os dados cheguem de várias plataformas e dispositivos. Um esquema comum deve incluir campos relevantes para todos os eventos de instrumentação, como:

  • Nome do evento.
  • Hora do evento.
  • Endereço IP do remetente.
  • Detalhes necessários para correlação de eventos, incluindo:
    • Id de Usuário
    • ID do Dispositivo
    • ID do aplicativo

Lembre-se de que muitos dispositivos podem gerar eventos para o mesmo aplicativo, portanto, o esquema não deve depender do tipo de dispositivo. O aplicativo deve dar suporte à distribuição móvel ou entre dispositivos. O esquema também pode incluir campos de domínio relevantes para um cenário específico que é comum entre aplicativos, como:

  • Informações sobre exceções.
  • Eventos de início e término do aplicativo.
  • Êxito ou falha de chamadas à API do serviço Web.

Estabeleça campos de domínio que produzam o mesmo conjunto de eventos para criar um conjunto de relatórios e análises comuns entre aplicativos. Talvez seja necessário configurar um esquema para conter campos personalizados para capturar os detalhes de eventos específicos do aplicativo.

O OpenTelemetry é uma coleção neutra do fornecedor de APIs, SDKs e outras ferramentas. Você pode usar o OpenTelemetry para instrumentar aplicativos e gerar telemetria significativa consistentemente entre idiomas. O OpenTelemetry é independente de ferramentas, portanto, é compatível com muitas plataformas de observabilidade, incluindo ofertas de software livre e comerciais. A Microsoft está adotando o OpenTelemetry como a ferramenta padrão para instrumentação.

Práticas recomendadas para a instrumentação de aplicativos

A lista a seguir resume as práticas recomendadas para instrumentar um aplicativo distribuído em execução na nuvem:

  • Logs facilitam a leitura e a análise. Use logs estruturados sempre que possível.

  • Seja conciso e descritivo nas mensagens de log.

  • Identifique a origem do log.

  • Adicione informações de carimbo de data/hora à medida que cada registro de log é gravado.

  • Use o mesmo fuso horário e formato para todos os carimbos de data/hora.

  • Categorize logs e escreva mensagens no local apropriado.

  • Não revele informações confidenciais sobre o sistema ou informações pessoais sobre os usuários. Limpe essas informações antes de serem registradas, mas mantenha todos os detalhes relevantes.

  • Registre todas as exceções críticas, mas permita que o administrador ative e desative o log conforme necessário para menos exceções e avisos.

  • Capture e registre todas as informações de lógica de repetição. Esses dados são úteis para monitorar a integridade transitória do sistema.

  • Rastreie chamadas fora do processo, como solicitações para serviços Web ou banco de dados externos.

  • Não misture mensagens de log com requisitos de segurança diferentes no mesmo arquivo de log.

  • Verifique se todas as chamadas de registro em log são operações de fogo e de esquecer que não bloqueiam o progresso das operações de negócios. Exclua eventos de auditoria dessa regra porque eles são essenciais para a empresa.

  • Verifique se o registro em log é extensível e não tem nenhuma dependência direta em um destino concreto.

  • Verifique se todo o registro em log é à prova de falhas e não dispara erros em cascata.

  • Trate a instrumentação como um processo iterativo contínuo e examine os logs regularmente.

Considerações

  • Implemente a criação de perfil somente quando necessário, pois ela pode impor uma sobrecarga significativa ao sistema. Usando instrumentação, a criação de perfil registra um evento, como uma chamada de método, sempre que ele ocorre. No entanto, a amostragem registra apenas os eventos selecionados.

  • As seleções de criação de perfil podem ser baseadas em tempo, como uma vez a cada n segundos ou baseadas em frequência, como uma vez a cada n solicitações. Se os eventos ocorrerem com frequência, a criação de perfil poderá causar muita carga no sistema e afetar o desempenho geral. Nesse caso, a abordagem de amostragem é preferível. No entanto, se a frequência de eventos for baixa, a amostragem poderá perdê-los. Nesse caso, a criação de perfil pode ser a melhor abordagem.

Facilitação do Azure

A autoinstrumentação está disponível para muitos tipos de aplicativos locais e do Azure monitorados com o Application Insights. A função de autoinstrumentação configura automaticamente seu aplicativo para fornecer telemetria avançada ao Application Insights e fornece acesso fácil a experiências como o aplicativo dashboard e o mapa do aplicativo. Para obter plataformas de hospedagem e linguagens de desenvolvimento com suporte, consulte Ambientes, idiomas e provedores de recursos com suporte.

Lista de verificação de Excelência Operacional

Consulte o conjunto completo de recomendações.